.NET Core Web API HttpContext.User.Claims 和 HttpContext.User.Identity 在控制器中始终为 null

.NET Core Web API HttpContext.User.Claims and HttpContext.User.Identity are always null in Controllers

我正在为 back-end 使用 ASP.NET Core Web API 并在 Blazor WASM 客户端的 httpClient header 中使用 JWT 令牌(我不存储cookie 中的 JWT 令牌)。

问题是虽然用户登录并且身份验证和授权没有问题,但是在每个控制器(继承自ControllerBase)中总是:

但请求具有 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 =>
            {
            });

而且我还按正确的顺序调用了中间件:

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });

HttpContext.User 仅在启用方法身份验证时设置。

您可以通过在您的控制器或操作上设置 [Authorize] 来启用它,或者配置一个全局过滤器,以便默认授权所有请求。