我将ADFS身份验证添加到具有WebApi后端的Angular SPA网站.为此,我已经使用客户端和RP设置了ADFS实例.
为了登录SPA,用户被重定向到sts.domain/adfs/oauth2/authorize端点.用户在网页上进行身份验证,并重定向到应用程序中的页面 - www.domain/token/redirect.html?code = SOMECODE&state = URL
此页面从URL参数中提取令牌,并调用sts.domain/adfs/oauth2/token端点以获取WebApi后端的JWT令牌.
var url = "https://sts.domain/adfs/oauth2/token";
$.ajax(url, {
type: "POST",
data: {
grant_type: "authorization_code",
client_id: client,
redirect_uri: redirect,
code: token
}
})
Run Code Online (Sandbox Code Playgroud)
然后,应用程序保存WebApi令牌并将其添加到Angular $ http.defaults.headers.common.Authorization,以便它将用于与WebApi后端通信.然后它重定向回SPA.
这一切都可以在IE中正常工作,但在调用/ token OAuth端点时,Firefox和Chrome在标准CORS错误消息中失败.
请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" https://www.domain "访问.
好像我应该将SPA URL添加到ADFS实例的CORS配置中,但我找不到配置ADFS实例的CORS配置的方法.如何在ADFS 3.0 OAuth中配置CORS?有没有不同的方法来完成更标准的任务?
oauth adfs asp.net-web-api angularjs single-page-application