我正在构建一个ASP.Net Core API并使用JWT进行身份验证。
我有以下配置:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthentication(option =>
{
option.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
option.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(cfg =>
{
cfg.RequireHttpsMetadata = false;
cfg.SaveToken = true;
cfg.TokenValidationParameters = new TokenValidationParameters()
{
ValidateAudience = true,
ValidateIssuer = true,
ValidateActor = false,
ValidateLifetime = false,
ValidateIssuerSigningKey = true,
ValidIssuers = Global.Issuers,
ValidAudiences = Global.Audiences,
IssuerSigningKey = Global.symmetricSecurityKey
};
});
}
如您所见,我想使用JWT和仅 JWT。
几个小时后,我拉着头发试图找出为什么我在[Authorize]
属性的任何操作上不断获得401。
我终于尝试了[Authorize(AuthenticationSchemes = "Bearer")]
并且它有效了!
那是什么给了什么?!
我如何弄清楚其他认证方案面临的挑战?
我是否必须明确禁用默认方案(cookie)?
我希望避免在我的所有AuthenticationSchemes
代码上指定Authorize
。
谢谢!