我正在向具有 WebApi 后端的 Angular SPA 网站添加 ADFS 身份验证。为了实现此目的,我使用客户端和 RP 设置了 ADFS 实例。
为了登录 SPA,用户将被重定向到 sts.domain/adfs/oauth2/authorize 端点。用户在网页上进行身份验证并被重定向到应用程序内的页面 - www.domain/token/redirect.html?code=SOMECODE&state=URL
此页面从 URL 参数中提取 token ,并调用 sts.domain/adfs/oauth2/token 端点以获取 WebApi 后端的 JWT token 。
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
}
})
然后,应用程序保存 WebApi token 并将其添加到 Angular $http.defaults.headers.common.Authorization,以便将其用于与 WebApi 后端进行通信。然后它重定向回 SPA。
这在 IE 中一切正常,但在 Firefox 和 Chrome 中失败,并在调用/token OAuth 端点时显示标准 CORS 错误消息。
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.domain' is therefore not allowed access.
似乎我应该将 SPA URL 添加到 ADFS 实例的 CORS 配置中,但我找不到配置 ADFS 实例的 CORS 配置的方法。如何在 ADFS 3.0 OAuth 中配置 CORS?有没有更标准的不同方法来完成这项任务?
最佳答案
我也遇到了同样的问题。根据this ,微软不喜欢从客户端检索访问 token 。因此,我关注了this来解决问题。基本上,在后端 WebAPI 中构建一个调用,通过传递授权代码来检索访问 token 。
关于angularjs - ADFS 3 OAuth 2 CORS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26222699/