相关疑难解决方法(0)

启用Windows身份验证的IIS中的CORS请求的401响应

我正在尝试在我的WebAPI项目中启用CORS支持,如果我启用匿名身份验证,那么一切正常,但是使用Windows Auth +禁用匿名身份验证,发送的OPTIONS请求始终返回401未经授权的响应.请求它的站点位于DOMAIN上,因此应该可以进行呼叫,有没有办法解决问题而不禁用Windows身份验证?

ntlm windows-authentication iis-7.5 cors asp.net-web-api

38
推荐指数
6
解决办法
4万
查看次数

带有Windows身份验证的WebAPI CORS - 允许匿名选项请求

我有一个运行Windows身份验证的WebAPI 2 REST服务.它与网站分开托管,因此我使用ASP.NET CORS NuGet包启用了CORS.我的客户端站点正在使用AngularJS.

到目前为止,这是我经历过的:

  1. 我没有设置withCredentials,因此CORS请求返回401.通过在我的$ httpProvider配置中添加withCredentials解决了这个问题.
  2. 接下来,我使用通配符源设置了EnableCorsAttribute,使用凭据时不允许这样做.通过设置明确的原始列表解决.
  3. 这使我的GET请求成功,但我的POST发出了预检请求,而我没有创建任何控制器操作来支持OPTIONS动词.为了解决这个问题,我将MessageHandler实现为全局OPTIONS处理程序.它只是为任何OPTIONS请求返回200.我知道这不完美,但现在在Fiddler工作.

我被困的地方 - 我的Angular预检电话不包括凭据.根据这个答案,这是设计,因为OPTIONS请求被设计为匿名.但是,Windows身份验证使用401停止请求.

我已经尝试将[AllowAnonymous]属性放在我的MessageHandler上.在我的开发计算机上,它可以工作 - OPTIONS动词不需要身份验证,但其他动词可以.但是,当我构建并部署到测试服务器时,我将继续在我的OPTIONS请求中获得401.

使用Windows身份验证时,是否可以在我的MessageHandler上应用[AllowAnonymous]?如果是的话,有关如何做的任何指导?或者这是一个错误的兔子洞,我应该看一个不同的方法?

更新:我能够通过在IIS中的站点上设置Windows身份验证和匿名身份验证来使其工作.这导致一切都允许匿名,所以我添加了一个全局的Authorize过滤器,同时保留了MessageHandler上的AllowAnonymous.

然而,这感觉就像一个黑客...我一直都明白只应该使用一种身份验证方法(不混合).如果有人有更好的方法,我会很感激听到它.

windows-authentication cors asp.net-web-api angularjs

16
推荐指数
3
解决办法
2万
查看次数