当你使用
AddIdentity<TUser, TRole>
source
):
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
options.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
在你的
Startup.ConfigureServices
,您有以下内容
也
设置默认身份验证方案:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
因为这是定义的顺序(
AddIdentity
是
之后
AddAuthentication
),默认值是从Jwt更改为Identity,以便在使用
[Authorize]
,身份验证过程现在希望使用标识,而不是Jwt。
要解决这个问题,最简单的方法是切换
额外性
和
添加身份验证
,因此JwtBearer调用排在最后,因此“获胜”。您还需要更明确地设置两者
DefaultAuthenticateScheme
和
DefaultChallengeScheme
:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(...);
[授权]
属性,呼叫
要使用的身份验证方案,如以下两行之一:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Authorize(AuthenticationSchemes = IdentityConstants.ApplicationScheme)]
第一个选项似乎最适合您的用例,但是当您进一步了解身份时,如果您需要第二个选项(还有更多选项,例如使用策略),那么最好知道第二个选项是存在的。