需要将Windows凭据跨域传递给API

Oli*_*ver 11 security http token asp.net-web-api angularjs

我在AngularJS中实现了基于令牌的身份验证,但是我的安全api(生成令牌)是基于窗口的,用于将所有AD交互集中到一个站点.

结构如下: 在此输入图像描述

流程如下:

  1. 用户未登录
  2. $ http请求到Windows身份验证的安全性Api
  3. 安全性Api用户AD创建令牌(由auth处理的身份验证)
  4. 令牌返回应用程序
  5. 所有后续请求都使用令牌来标记经过身份验证的api

当安全性和应用程序位于同一域时,这一切都正常,但是只要$ http请求需要跨域,就不会发送带有Windows凭据的授权标头,从而导致401.

示例请求(api是经过Windows身份验证的)

在此输入图像描述

安全性Api通过允许Origin(*仅用于测试而非生产)允许跨域请求:

<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
Run Code Online (Sandbox Code Playgroud)

问题(TL:DR):

是否可能,如果是这样,在制作跨域$ http请求时,如何让AngularJS客户端应用程序通过Windows凭据?

Dar*_*rov 15

尝试在发出AJAX请求时将withCredentials属性设置为true以确保客户端将发送其凭据:

$http.get(url, { withCredentials: true, ...})
Run Code Online (Sandbox Code Playgroud)

基本上,此标志将执行的操作是withCredentials在基础XMLHttpRequest本机对象上设置该属性.

您还可能需要Authorization在服务器上包含Access-Control-Allow-Headers响应的标头.

  • 对于将来的用户,您需要在web.config端设置以下内容以允许此操作:<add name ="Access-Control-Allow-Credentials"value ="true"/> <add name ="Access-Control-Allow -Origin"value ="http:// requestdomain"/> <add name ="Access-Control-Allow-Methods"value ="GET,POST,PUT,DELETE,OPTIONS"/> <add name ="Access-Control -Allow-Headers"value ="Origin,X-Requested-With,Content-Type,Accept,Authorization"/> (2认同)
  • 添加withCredentials:true后,它给了我一个弹出窗口,有没有办法在没有弹出窗口的情况下做到这一点.. (2认同)