nAv*_*viD 0 c# jwt asp.net-core-webapi asp.net-core-identity
我在后端使用 ASP.NET Core Web API,并在 Blazor WASM 客户端的 httpClient 标头中使用 JWT 令牌(我不在 cookie 中存储 JWT 令牌)。
问题是,虽然用户已登录并且身份验证和授权工作没有问题,但在每个控制器(继承自ControllerBase)中始终:
HttpContext.User.Identity.IsAuthenticated是假的HttpContext.User.Identity.Name一片空白HttpContext.User.Claims一片空白但请求具有 JWT 令牌(Request.Headers["Authorization"][0]等于Bearer eyJhbGciOiJIUzI1...)并且[Authorize]属性正常工作。
这是我的startup.cs的样子:
services.AddIdentity()
services.AddSingleton<IAuthorizationPolicyProvider, AuthorizeExPolicyProvider>();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = false,
ValidateAudience = false,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(Configuration["jwt:key"])),
ClockSkew = TimeSpan.Zero
});
services.AddAuthorization(options =>
{
});
Run Code Online (Sandbox Code Playgroud)
我还按正确的顺序调用了中间件:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
Run Code Online (Sandbox Code Playgroud)
HttpContext.User仅当您启用了该方法的身份验证时才设置。
[Authorize]您可以通过在控制器或操作上进行设置来启用它,或者配置全局过滤器,以便默认情况下授权所有请求。