【问题标题】:ASP.NET 4.7.2 OWIN JWT Bearer Authentication Bearer prefixASP.NET 4.7.2 OWIN JWT Bearer Authentication Bearer 前缀
【发布时间】:2021-02-06 13:24:56
【问题描述】:

问题是我的 ASP.NET Owin Bearer 令牌认证如果按照规范实现,则无法工作,所以在授权头中:“Bearer ey........”。它仅在直接发送令牌时有效,格式为:“ey....”。当我根据规范使用 Bearer 时,如果 JwtTokenHandler 正在调用 CanReadToken(string token) 方法,它将返回 false。

我希望能够根据规范以“Bearer ey...”格式使用 Bearer 令牌。

我正在使用所有最新的 NuGet 包: 微软.Owin - 4.1.1 Microsoft.AspNet.WebApi.Owin - 5.2.7 欧文 - 1.0.0

这是我的 startup.cs 代码:

        // Get openid configuration to validate bearer tokens
        var openIdConfigManager = new ConfigurationManager<OpenIdConnectConfiguration>("https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration", new OpenIdConnectConfigurationRetriever());
        var openIdConfig = openIdConfigManager.GetConfigurationAsync().Result;

        // Clear defaultinboundclaimtypemaps 
        JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

        // Add bearer token authentication
        var audience = ConfigurationManager.AppSettings["TokenAudience"];
        var issuer = ConfigurationManager.AppSettings["TokenIssuer"];

        app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
        {
            AuthenticationMode = AuthenticationMode.Active,
            TokenValidationParameters = new TokenValidationParameters
            {
                ValidateLifetime = true,
                ValidAudiences = new List<string> { $"api://{audience}" },
                ValidIssuer = $"https://sts.windows.net/{issuer}/",
                IssuerSigningKeys = openIdConfig.SigningKeys,
                RoleClaimType = "roles"
            },
            TokenHandler = new RemoveLeadingBearerJwtTokenHandler()
        });

我在控制器上有一个简单的[Authorize] 属性。

我尝试了 AuthenticationType 设置,例如将其设置为“ExternalBearer”。我尝试将 Realm 设置为“Bearer”。

唯一对我有用的是创建一个自定义 JwtTokenHandler 删除“Bearer”前缀并将其设置为 TokenHandler。然而,这种解决方案并不可取。

【问题讨论】:

    标签: c# asp.net jwt asp.net-web-api2 bearer-token


    【解决方案1】:

    好吧,所以我很尴尬,但为了防止其他人进一步尴尬;问题是,如果您对 Postman 使用 Bearer 身份验证选项,则会自动添加“Bearer”部分。您可以通过手动添加身份验证标头来检查这一点。

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 2018-07-10
      • 1970-01-01
      • 2023-03-20
      • 2018-07-14
      • 2018-11-13
      • 2021-09-03
      • 1970-01-01
      • 2018-06-14
      相关资源
      最近更新 更多