.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
)中总是:
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 =>
{
});
而且我还按正确的顺序调用了中间件:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
HttpContext.User
仅在启用方法身份验证时设置。
您可以通过在您的控制器或操作上设置 [Authorize]
来启用它,或者配置一个全局过滤器,以便默认授权所有请求。
我正在为 back-end 使用 ASP.NET Core Web API 并在 Blazor WASM 客户端的 httpClient header 中使用 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 =>
{
});
而且我还按正确的顺序调用了中间件:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
HttpContext.User
仅在启用方法身份验证时设置。
您可以通过在您的控制器或操作上设置 [Authorize]
来启用它,或者配置一个全局过滤器,以便默认授权所有请求。