通常情况下,scheme应该填写在Startup.cs文件的ConfigureServices()方法中所添加的认证方案名称。例如,如果在Startup.cs文件中添加了如下代码:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["JwtIssuer"],
ValidAudience = Configuration["JwtAudience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtSecurityKey"]))
};
});
则在使用AuthenticationHttpContextExtensions.AuthenticateAsync()时,应该填写“JwtBearer”作为scheme:
var result = await HttpContext.AuthenticateAsync("JwtBearer");
完整示例代码:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["JwtIssuer"],
ValidAudience = Configuration["JwtAudience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtSecurityKey"]))
};
});
...
[HttpGet]
public async Task
if (result.Succeeded)
{
var claims = result.Principal.Claims;
// ...
}
else
{
// ...
}
}