首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET核心2:使用[授权]对API的Ajax调用使飞行前请求失败

ASP.NET核心2:使用[授权]对API的Ajax调用使飞行前请求失败
EN

Stack Overflow用户
提问于 2018-01-25 09:43:18
回答 1查看 1.7K关注 0票数 3

我有一个带有[Authorize]属性的API控制器,以确保所有调用都由正确登录的用户进行(通过OpenIdConnect,目标是Azure )。当我加载进行Ajax调用的页面时,API将正确地响应。

但是,在经过一定时间之后,用户必须重新授权,因此ASP.NET核心框架调用ASP.NET来重新定义用户。调用失败时会出现以下错误:

未能加载https://login.microsoftonline.com/common/oauth2/authorize?[truncated]:对飞行前请求的响应没有通过访问控制检查:请求的资源上没有“访问控制-允许-原产地”标题。因此,“https://my.website.com”源是不允许访问的。

我尝试用以下代码配置CORS头,但这并不能解决我的问题:

代码语言:javascript
运行
复制
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有这个问题)。

EN

回答 1

Stack Overflow用户

发布于 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超时,请执行以下操作:

代码语言:javascript
运行
复制
services.ConfigureExternalCookie(options =>
{
    options.ExpireTimeSpan = TimeSpan.FromDays(14);
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48439791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档