![](/img/trans.png)
[英]ASP.Net Core JWT Login not setting HttpContext.User.Claims
[英].NET Core Web API HttpContext.User.Claims and HttpContext.User.Identity are always null in Controllers
我在后端使用 ASP.NET Core Web API,并在 Blazor WASM 客户端的 httpClient 的 header 中使用 JWT 令牌(我不将 88468485588 存储在 cookie 中)。
问题是虽然用户已登录并且身份验证和授权没有问题,但在每个 controller (继承自ControllerBase
)中总是:
HttpContext.User.Identity.IsAuthenticated
为假HttpContext.User.Identity.Name
是 nullHttpContext.User.Claims
是 null 但是请求具有 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
仅在启用方法身份验证时设置。
您可以通过在您的 controller 或操作上设置[Authorize]
来启用它,或者配置一个全局过滤器,以便默认授权所有请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.