You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.4 KiB

using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
namespace HuiXin.Gateway.Ocelot
{
public class JWTUtil
{
/// <summary>
/// 创建token
/// </summary>
/// <returns></returns>
public static string CreateJwtToken(IDictionary<string, object> payload, string secret, IDictionary<string, string> extraHeaders = null)
{
//IJwtEncoder encoder = new JwtEncoder(new HMACSHA256Algorithm(), new JsonNetSerializer(), new JwtBase64UrlEncoder());
//var token = encoder.Encode(extraHeaders,payload, secret);
//return token;
Claim[] claims = new Claim[]
{
new Claim("Id", "aaa"),
new Claim("Name", "bbb"),
new Claim("Email", "ccc"),
};
var securityKey = new SymmetricSecurityKey(Convert.FromBase64String("GcTdqSZdpRxBtdtgwvDHBzS427VGTQzbM+JD1CBbUZY="));
var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var header = new JwtHeader(signingCredentials);
//header.Add("typ", "JWT"); // 默认情况下,typ通常是"JWT",但你可以明确设置它
//header.Add("kid", "MyKey");
//header.Add("key", "MyKey");
//header.Add("keyid", "MyKey");
// 设置JWT载荷(payload)
var payload1 = new JwtPayload
{
//{ "kid", "MyKey" },
//{ "key", "MyKey" },
//{ "keyid", "MyKey" },
{ "issuer",""},
{ "sub", "1234567890" },
{ "name", "测试用户" },
{ "role", new []{"test","admin" } },
{ "scope",new []{"all" } },
{ "iat", ToUnixTime(DateTime.Now)},
{ "exp", ToUnixTime(DateTime.Now.AddDays(1)) }
};
// 创建JwtSecurityToken实例并结合header和payload
var jwt = new JwtSecurityToken(header, payload1);
return new JwtSecurityTokenHandler().WriteToken(jwt);
}
private static long ToUnixTime(DateTime dt)
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return (long)(dt.ToUniversalTime() - epoch).TotalMilliseconds;
}
}
}