我在启动时像这样设置DefaultAuthenticateScheme
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme;
});
所以,我应该使用这样的东西:
[Authorize]
public IEnumerable<UserViewModel> Get()
{
return someData;
}
但是我不得不编写这段代码
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public IEnumerable<UserViewModel> Get()
{
return somedata;
}
我用谷歌搜索这个问题,我注意到在启动时使用AddCookie或在AddMVC()之后使用AddAuthentication()时应该会发生,但这不是我的情况。
答案 0 :(得分:1)
默认情况下,它将使用基于cookie的身份验证方案,直到您明确指定为止。由于Asp .Net Core允许使用AuthenticationSchemes
的组合。您需要稍微修改startup.cs
才能从Authorize属性中删除AuthenticationSchemes
。
services
.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(cfg =>
{
cfg.RequireHttpsMetadata = false;
cfg.SaveToken = true;
cfg.Audience = "http://localhost:5111/";
cfg.TokenValidationParameters = new TokenValidationParameters
{
// token config
};
});
这行代码cfg.Audience = "http://localhost:5111/";
将设置您为该特定受众(主机)设置的默认身份验证方案。
但是,
[Authorize]
属性指定要使用的一种或多种身份验证方案,而不管是否配置了默认值。例如
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
它将为特定的控制器使用指定的AuthenticationSchemes
,而不管其默认设置如何。