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

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)

Nis*_*isd 9

HttpContext.User仅当您启用了该方法的身份验证时才设置。

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