63 lines
2.2 KiB
C#
63 lines
2.2 KiB
C#
using Microsoft.Extensions.Options;
|
||
using Microsoft.IdentityModel.Tokens;
|
||
using System;
|
||
using System.IdentityModel.Tokens.Jwt;
|
||
using System.Security.Claims;
|
||
using System.Text;
|
||
|
||
namespace ZhaoXi._001.NET5Demo.Practice.WebApi.Utility.Jwt
|
||
{
|
||
/// <summary>
|
||
/// 对称可逆加密
|
||
/// </summary>
|
||
public class CustomHSJWTService : ICustomJWTService
|
||
{
|
||
#region Option注入
|
||
private readonly JWTTokenOptions _JWTTokenOptions;
|
||
public CustomHSJWTService(IOptionsMonitor<JWTTokenOptions> jwtTokenOptions)
|
||
{
|
||
this._JWTTokenOptions = jwtTokenOptions.CurrentValue;
|
||
}
|
||
#endregion
|
||
|
||
/// <summary>
|
||
/// 用户登录成功以后,用来生成Token的方法
|
||
/// </summary>
|
||
/// <param name="UserName"></param>
|
||
/// <param name="password"></param>
|
||
/// <returns></returns>
|
||
public string GetToken(string UserName, string password)
|
||
{
|
||
#region 有效载荷,大家可以自己写,爱写多少写多少;尽量避免敏感信息
|
||
var claims = new[]
|
||
{
|
||
new Claim(ClaimTypes.Name, UserName),
|
||
new Claim("NickName",UserName),
|
||
new Claim("Role","Administrator"),//传递其他信息
|
||
new Claim("ABCC","ABCC"),
|
||
new Claim("ABCCDDDDD","ABCCDDDDD"),
|
||
new Claim("Student","甜酱油")
|
||
};
|
||
|
||
//需要加密:需要加密key:
|
||
//Nuget引入:Microsoft.IdentityModel.Tokens
|
||
SymmetricSecurityKey key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_JWTTokenOptions.SecurityKey));
|
||
|
||
SigningCredentials creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
|
||
|
||
//Nuget引入:System.IdentityModel.Tokens.Jwt
|
||
JwtSecurityToken token = new JwtSecurityToken(
|
||
issuer: _JWTTokenOptions.Issuer,
|
||
audience: _JWTTokenOptions.Audience,
|
||
claims: claims,
|
||
expires: DateTime.Now.AddMinutes(5),//5分钟有效期
|
||
signingCredentials: creds);
|
||
|
||
string returnToken = new JwtSecurityTokenHandler().WriteToken(token);
|
||
return returnToken;
|
||
#endregion
|
||
|
||
}
|
||
}
|
||
}
|