Asp.net Core、JWT 和 CORS 标头

     2023-03-04     291

关键词:

【中文标题】Asp.net Core、JWT 和 CORS 标头【英文标题】:Asp.net Core, JWT, and CORS Headers 【发布时间】:2016-05-02 11:24:00 【问题描述】:

当我在同一服务上同时启用 JWT 承载身份验证和 CORS 时,我在从服务器获取适当的 Access-Control-Allow-Origin 标头时遇到问题。 当我从配置中删除 UseJwtBearerAuthentication 时,一切正常。

public void ConfigureServices(IServiceCollection services)
    
        services.AddCors(options =>
        
            options.AddPolicy("AllowAllOrigins", builder =>
            
                builder.AllowAnyOrigin();
                builder.AllowAnyHeader();
                builder.AllowAnyMethod();
                builder.AllowCredentials();
            );
        );

        services.AddMvc();
    

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseJwtBearerAuthentication(options =>
        
            options.AutomaticAuthenticate = true;
            options.RequireHttpsMetadata = false;
            options.Audience = "c2cf422a-a432-2038-b183-cda64e16239e";
            options.Authority = "domain.com";
        );

        app.UseCors("AllowAllOrigins");

        app.UseIISPlatformHandler();

        app.UseMvc();
    

我尝试更改配置的顺序,但似乎没有任何效果。我还尝试将 [EnableCors("AllowAllOrigins")] 添加到我正在调用的控制器中。

我已根据 cmets 中的建议更改了配置顺序,并确定了导致问​​题的属性:

app.UseIISPlatformHandler();

        app.UseCors("AllowAllOrigins");

        app.UseJwtBearerAuthentication(options =>
        
            options.AutomaticAuthenticate = true;
            options.RequireHttpsMetadata = false;
            options.Audience = "c8cf662a-ac73-4050-b285-cda90e22992e";
            options.Authority = "iwdwk.com";
        );

        app.UseMvc();

在上面的代码中,下面的行似乎是导致问题的原因:

options.AutomaticAuthenticate = true;

不幸的是,我需要启用它,这样我才能通过 JWT 令牌进行授权...除非有其他方法可以做到这一点?

【问题讨论】:

嗯。我们是否 100% 确定这不仅仅是订购问题?我相信正确的顺序应该是日志记录,然后是UseIISPlatformHandler,然后是UseCors,然后是UseJwtBearerAuthentication,最后是UseMvc。可以试试吗? 不确定...我觉得我尝试了所有的组合,但我没有系统地完成它们。今天早上上班的时候我会试试你的建议。 仍然不行...我正在更新问题,因为我确实发现了导致问题的属性。 【参考方案1】:

我猜,来自浏览器的 OPTIONS 调用被身份验证拒绝,因为它们可能不包含不记名令牌。我不确定,但必须有一种方法可以在调用 UseJwtBearerAuthentication 时跳过 OPTIONS 调用的身份验证。如果您希望在此之前确认这一点,请尝试从邮递员调用您的端点,因为它会跳过 OPTIONS 调用并查看您是否获得了实际 GET/POST 调用的访问控制标头

【讨论】:

【参考方案2】:

如果服务器抛出异常,它们会清除标头,因此您只会看到 CORS 错误。我过去查看实际情况的方法是首先使用 Chrome 开发工具从我的一个失败请求中获取Bearer Token

接下来,我复制了该令牌并粘贴到 Postman 作为请求中授权标头的值。当我这样做时,我终于收到了那个很好的开发人员异常页面,它准确地告诉我我做错了什么。那就是我使用的是 ClientId GUID Azure AD 给出的,而不是 App URI

因此,如果您使用的是 Azure AD,那么您的 JWT 选项应如下所示:

    app.UseJwtBearerAuthentication(options =>
    
        options.AutomaticAuthenticate = true;
        options.AutomaticChallenge = true;
        options.Authority = "https://login.microsoftonline.com/yourtenant.onmicrosoft.com"
        options.Audience = "https://yourtenant.onmicrosoft.com/AppURI"
    );

【讨论】:

【参考方案3】:

我遇到了类似的问题。当进行 POST/GET 并且浏览器触发带有 OPTIONS 请求的 Preflight 时,我的 Angular 应用程序无法理解这是 401 响应。它返回为 0 - 未知错误。

我的问题是我的服务顺序。我所要做的就是在 Startup.cs 文件中的 Configure 方法中,更改顺序。我首先添加了 CORS 配置,然后是 JWT 中间件,然后是 UseAuthentication

【讨论】:

【参考方案4】:

意识到这个问题已经过时了,但这可能是因为您正在使用 AllowCredentials=true 和 AllowAnyOrigin=true 跨 CORS 执行身份验证。这是不允许的。尝试指定一个特定的来源。

【讨论】:

Jwt 和 ASP.NET CORE 授权 AspNetRoleClaims

】Jwt和ASP.NETCORE授权AspNetRoleClaims【英文标题】:JwtandASP.NETCOREAuthorizationAspNetRoleClaims【发布时间】:2021-10-0512:42:29【问题描述】:如何使用ASP.NETCORE授权AspNetRoleClaims和Angular实现Jwt令牌?例如,我有以下默认角色(用户类型):管... 查看详情

Asp.Net Core、JWT 和 OpenIdConnectServer

】Asp.NetCore、JWT和OpenIdConnectServer【英文标题】:Asp.NetCore,JWTandOpenIdConnectServer【发布时间】:2016-06-1719:48:48【问题描述】:我正在尝试了解有关Asp.NetCore中JWT令牌的所有这些内容。在因大量误解而流血工作后,我陷入了困境。我的... 查看详情

ASP.NET Core 和 JWT 令牌生命周期

】ASP.NETCore和JWT令牌生命周期【英文标题】:ASP.NETCoreandJWTtokenlifetime【发布时间】:2018-12-2301:11:43【问题描述】:我使用ASP.NETCore2.1.1有趣的是,只有在bothClockSkew-在Startup.csand中才考虑过期时间JwtSecurityTokenHandler.TokenLifetimeInMinutes-... 查看详情

从我的自定义中间件返回到角度时,asp .net core api cors 问题

】从我的自定义中间件返回到角度时,asp.netcoreapicors问题【英文标题】:asp.netcoreapicorsissuewhenreturningfrommycustommiddlewaretoangular【发布时间】:2020-01-1723:26:35【问题描述】:我正在为我的Angular应用程序构建一些.netcoreapi我想同时使... 查看详情

ASP .NET CORE 2.2 JWT 和声明网站的身份验证

】ASP.NETCORE2.2JWT和声明网站的身份验证【英文标题】:ASP.NETCORE2.2JWT&ClaimsidentityAuthenticationforWebsite【发布时间】:2019-09-0120:17:09【问题描述】:我有一个.netcore2.2api,它生成(在成功登录时)一个JWT令牌,其中包含一个声明身... 查看详情

ASP.NET Core AWS 无服务器和 CORS

】ASP.NETCoreAWS无服务器和CORS【英文标题】:ASP.NETCoreAWSServerlessandCORS【发布时间】:2020-03-1717:40:50【问题描述】:我正在使用VisualStudio将ASP.NETCore2.1应用程序发布到AWSLambda(无服务器)。无论我尝试了什么,我都无法让CORS工作。... 查看详情

ASP.NET Core 为特定控制器禁用 CORS

】ASP.NETCore为特定控制器禁用CORS【英文标题】:ASP.NETCoreDisableCORSforspecificcontrollers【发布时间】:2019-03-0304:51:00【问题描述】:我的应用程序中有不同的控制器集(比如说A和B)。需要为B控制器启用和禁用A控制器的CORS。我通过... 查看详情

ASP.NET Core JWT 身份验证受众属性

】ASP.NETCoreJWT身份验证受众属性【英文标题】:ASP.NETCoreJWTAuthenticationAudienceProperty【发布时间】:2021-10-2723:00:11【问题描述】:我是ASP.NETCore的新手。我正在使用JWT对Webapi进行身份验证。在大多数在线教程的JWT代码中,我们可以找... 查看详情

如何在 asp.net core 2.2 中实现 Cookie 基本身份验证和 jwt?

】如何在asp.netcore2.2中实现Cookie基本身份验证和jwt?【英文标题】:HowcaniimplementCookiebaseauthenticationandjwtinasp.netcore2.2?【发布时间】:2019-09-2907:52:12【问题描述】:我想在我的程序中同时使用基于cookie的身份验证和jwt,使用身份验... 查看详情

ASP.Net Core - 使用 WebAPI 和 MVC 前端的 JWT 身份验证不起作用

】ASP.NetCore-使用WebAPI和MVC前端的JWT身份验证不起作用【英文标题】:ASP.NetCore-JWTAuthenticationwithWebAPIandMVCFrontendnotworking【发布时间】:2018-11-2022:24:20【问题描述】:项目由两部分组成:ASP.NetCoreAPIASP.NetCoreMVC前端基本上,我想做的... 查看详情

在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)

】在ASP.Net5/Core中启用跨域资源共享(CORS)【英文标题】:Enablecross-originresourcesharing(CORS)inASP.Net5/Core【发布时间】:2016-05-0112:54:53【问题描述】:如何将CORS标头添加到我的MVC6应用程序?我对全局和按操作感兴趣。似乎ASP.NetvNext/5/Cor... 查看详情

在 ASP.Net Core 5 WebAPI 中启用 CORS

】在ASP.NetCore5WebAPI中启用CORS【英文标题】:EnableCORSinASP.NetCore5WebAPI【发布时间】:2021-04-0906:31:40【问题描述】:有数以百万计的文章和问题与此问题相关,但我找不到我的代码有什么问题。我有Startup、StartupProduction和StartupDevelop... 查看详情

ASP.net Core 2.0 JWT 令牌刷新

】ASP.netCore2.0JWT令牌刷新【英文标题】:ASP.netCore2.0JWTTokenRefresh【发布时间】:2018-03-3007:54:24【问题描述】:我已经实现了JWTBearerAuth和IdentityCookieAuth,一个用于UI,另一个用于.NETCore2.0项目中的RESTAPI。到目前为止,一切都适用于JW... 查看详情

ASP.NET Core 中的 Jwt 令牌身份验证

】ASP.NETCore中的Jwt令牌身份验证【英文标题】:JwttokenauthenticationinASP.NETCore【发布时间】:2021-12-1711:55:34【问题描述】:我正在构建一个ASP.NETCoreWeb应用程序和Angular,我想使用基于令牌的身份验证来保护它。我对身份验证机制相... 查看详情

Asp.net core 2.0 Jwt 不会忽略 AllowAnonymous

】Asp.netcore2.0Jwt不会忽略AllowAnonymous【英文标题】:Asp.netcore2.0Jwtdoesn\'tignoreAllowAnonymous【发布时间】:2018-05-1923:02:28【问题描述】:我正在使用.netcore2.0和jwt不记名身份验证(https://github.com/aspnet/Security)制作一个小型新项目这是我的... 查看详情

ASP.NET Core AWS Cognito JWT

】ASP.NETCoreAWSCognitoJWT【英文标题】:【发布时间】:2018-10-1420:42:48【问题描述】:在ASP.NETCore中,当JWT令牌传递不同的声明时,如何标准化可用的用户信息AuthorizationHandlerContext.User?AWSCongito有两种令牌类型,访问令牌和id令牌。Id... 查看详情

无法在 ASP.NET Core 和 React 中创建包含 jwt 的 httponly cookie

】无法在ASP.NETCore和React中创建包含jwt的httponlycookie【英文标题】:CannotcreatehttponlycookiecontainingjwtinASP.NETCoreandReact【发布时间】:2020-01-2615:17:21【问题描述】:我正在尝试在我的应用中实施身份验证方案。控制器,更具体地说是方... 查看详情

ASP.NET Core Jwt 实现 signinmanager 声明

】ASP.NETCoreJwt实现signinmanager声明【英文标题】:ASP.NETCoreJwtimplementsigninmanagerclaims【发布时间】:2019-04-1420:04:12【问题描述】:我已经实现了Jwt作为对我的用户进行身份验证的一种方式。但是,我被困在如何在我的应用程序上针对... 查看详情