ASP.NET 4.7.2 OWIN JWT承载身份验证承载前缀

时间:2020-10-23 13:10:23

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

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

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

我正在使用所有最新的NuGet软件包: Microsoft.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,该自定义JwtTokenHandler删除“ Bearer”前缀并将其设置为TokenHandler。但是,这种解决方案不是可取的。

1 个答案:

答案 0 :(得分:0)

好的,所以我很尴尬,但是要防止其他人感到进一步的尴尬;问题是,如果对邮递员使用承载身份验证选项,则会自动添加“承载”部分。您可以通过手动添加身份验证标题来进行检查。