我有一个带有[Authorize]
属性的API控制器,以确保所有调用都由正确登录的用户进行(通过OpenIdConnect,目标是Azure )。当我加载进行Ajax调用的页面时,API将正确地响应。
但是,在经过一定时间之后,用户必须重新授权,因此ASP.NET核心框架调用ASP.NET来重新定义用户。调用失败时会出现以下错误:
未能加载https://login.microsoftonline.com/common/oauth2/authorize?[truncated]:对飞行前请求的响应没有通过访问控制检查:请求的资源上没有“访问控制-允许-原产地”标题。因此,“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核心版本1.0没有这个问题(尽管ASP.NET MVC 5有这个问题)。
发布于 2018-01-25 16:45:13
我找到了解决问题的办法。
我没有解决飞行前请求CORS问题。login.microsoftonline.com
不包括CORS头,所以我甚至不确定它是否能被解决。
然而,我找到了一种方法来增加cookie超时,以减少重新定义用户的需要。
当使用Microsoft.AspNetCore.Identity
时,有几个cookie:
IdentityConstants.ApplicationScheme
曲奇IdentityConstants.ExternalScheme
曲奇IdentityConstants.TwoFactorRememberMeScheme
曲奇IdentityConstants.TwoFactorUserIdScheme
曲奇AJAX请求使用的是IdentityConstants.ExternalScheme
cookie,默认设置为5分钟后过期(您可以看到github上的默认值)。
若要增加外部cookie超时,请执行以下操作:
services.ConfigureExternalCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromDays(14);
});
https://stackoverflow.com/questions/48439791
复制相似问题