.net core 获取 jwt 用户身份信息
时间: 2023-10-01 14:03:34 浏览: 328
在 .NET Core 中,可以通过 Microsoft.AspNetCore.Authentication.JwtBearer 包来实现 JWT 认证。以下是获取 JWT 用户身份信息的步骤:
1. 在 Startup.cs 文件的 ConfigureServices 方法中添加以下代码,来启用 JwtBearer 认证:
```csharp
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
```
2. 在 Configure 方法中添加以下代码,来启用认证中间件:
```csharp
app.UseAuthentication();
```
3. 在需要获取用户身份信息的地方,可以使用以下代码来获取:
```csharp
var identity = HttpContext.User.Identity as ClaimsIdentity;
var userId = identity.FindFirst("userId")?.Value;
```
上述代码会从当前请求的 HttpContext 中获取用户的身份信息,然后从中提取出 userId 的值。
需要注意的是,在生成 JWT 令牌时,需要将用户的身份信息添加到 Claims 中。例如:
```csharp
var claims = new List<Claim>
{
new Claim("userId", user.Id.ToString()),
new Claim(ClaimTypes.Name, user.UserName),
// 其他用户信息的 Claim
};
var token = new JwtSecurityToken(
issuer: Configuration["Jwt:Issuer"],
audience: Configuration["Jwt:Audience"],
claims: claims,
expires: DateTime.UtcNow.AddMinutes(30),
signingCredentials: new SigningCredentials(
new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])),
SecurityAlgorithms.HmacSha256));
```
上述代码中,将 userId 添加到了 claims 列表中,生成 JWT 令牌时会将该信息加密存储,后续可以通过 HttpContext.User.Identity 获取到该信息。
阅读全文