.net jwt 代碼實現單點登錄
时间: 2024-09-17 21:00:27 浏览: 29
.NET JWT(JSON Web Tokens)实现单点登录(Single Sign-On, SSO)的一般流程如下:
1. **设置JWT服务**:
首先,在服务器端生成一个签发者(Issuer),这通常是应用的URL加上"/api/auth"这样的前缀。使用.NET Core的`Microsoft.IdentityModel.Tokens`库创建一个`JwtSecurityTokenHandler`。
```csharp
using Microsoft.IdentityModel.Tokens;
var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));
var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.NameIdentifier, "user_id"),
new Claim("sub", "username")
}),
Expires = DateTime.UtcNow.AddDays(7),
SigningCredentials = signingCredentials,
};
var token = tokenDescriptor.CreateToken(SecurityAlgorithms.HmacSha256);
var encodedToken = tokenHandler.WriteToken(token);
```
2. **用户登录**:
用户通过用户名和密码登录时,验证成功后,服务器会创建一个新的JWT并返回给客户端。
3. **存储和验证JWT**:
客户端收到JWT后,将其存储在浏览器的localStorage或sessionStorage中。每次请求时,将JWT放在HTTP头的Authorization字段中。
4. **验证JWT**:
服务器端在每个API请求的中间件中检查这个JWT。使用相同的`JwtSecurityTokenHandler`解码并验证它。
```csharp
tokenHandler.ReadToken(request.Headers.Authorization.Parameter).Validate();
```
5. **刷新令牌**:
如果JWT过期,可以提供一个刷新令牌到后台,后台再生成新的JWT并替换旧的。
阅读全文