【发布时间】:2018-07-04 12:29:02
【问题描述】:
我有一个带有 [Authorize] 属性的 API 控制器,以确保所有调用都由正确登录的用户进行(通过 OpenIdConnect,针对 Azure AD)。当我加载进行 Ajax 调用的页面时,API 会正确响应。
但是,经过一定时间后,必须重新授权用户,因此 ASP.NET Core 框架会调用 https://login.microsoftonline.com/ 以重新授权用户。该调用失败并出现以下错误:
无法加载https://login.microsoftonline.com/common/oauth2/authorize?[truncated]:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'https://my.website.com' 因此不允许访问。
我尝试使用此代码配置 CORS 标头,但这并不能解决我的问题:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// allow reconnection on API calls
app.UseCors(builder => builder
//.WithOrigins("https://login.microsoftonline.com")
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
);
app.UseMvc();
}
请注意,ASP.NET Core 1.0 版没有这个问题(尽管 ASP.NET MVC 5 有)。
【问题讨论】:
-
我不熟悉这里的细节,但确实实现了一次基于 CORS 的 SSO:CORS 请求的目标(在这种情况下为
login.microsoftonline.com)需要允许您的来源 -> 可以/您是否按照 Azure AD 端的许可输入了您的站点? -
据我所知,
login.microsoftonline.com不包含 CORS 标头,我认为这不会改变..
标签: c# cors asp.net-core-mvc asp.net-core-2.0