【发布时间】: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