JWT
约 248 字小于 1 分钟
2025-02-12
在 Mirage 工程中,引用 nuget 包:Mirage.IdentityModel.JWT.Authentication
生成 token
/// <summary>
/// 登录
/// </summary>
/// <param name="name">用户名</param>
/// <param name="password">密码</param>
/// <returns>身份令牌</returns>
public string Login(string name,string password)
{
if (name != "jack" || password != "123")
throw new ServiceException("用户名密码错误");
Claim[] claims = new Claim[] {
new Claim(ClaimTypes.NameIdentifier, name),
};
var jwtSecretKey = "~!@ab#wefwfe$2323%^232323&*()";
var expireTime = DateTime.Now.AddMinutes(20);//20分钟过期
//生成token
var token = JwtHelper.GenerateToken(claims, jwtSecretKey, expireTime);
return token;
}
身份验证
在 Program.cs 中,注入 JWT 身份验证服务:
var jwtSecretKey = "~!@ab#wefwfe$2323%^232323&*()";
services.AddJwtTokenAuthentication(jwtSecretKey,new string[] { "Authorization" });//指定客户端请求时,需要在Authorization头携带token
在需要身份验证的 Controller 上,加上 Mirage.Authorize 属性:
[Mirage.Authorize]
public class AdminController : BaseController
{
/// <summary>
/// 获取当前登录者的用户名
/// </summary>
/// <returns></returns>
public string GetMyName()
{
var claimsPrincipal = (ClaimsPrincipal)this.UserContent;
var userName = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier)?.Value;
return userName;
}
}
验证 IdentityServer4 颁发的 Token
如果您的 JWT Token 是用 IdentityServer4 颁发的,通过下面注入服务,来让 Controller 完成身份验证。
services.AddIdentityServerAndJwtAuthentication("http://yourIdentityServer4Server" , 60 , new string[] { "Authorization" });