问题描述
问题是,如果按照规范实现标头,则我的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()
});
我尝试了AuthenticationType设置,例如将其设置为“ ExternalBearer”。我曾尝试将Realm设置为“ Bearer”。
对我唯一有效的方法是创建一个自定义JwtTokenHandler,该自定义JwtTokenHandler删除“ Bearer”前缀并将其设置为TokenHandler。但是,这种解决方案不是可取的。
解决方法
好的,所以我很尴尬,但是要防止其他人感到进一步的尴尬;问题是,如果对邮递员使用承载身份验证选项,则会自动添加“承载”部分。您可以通过手动添加身份验证标题来进行检查。