82 lines
2.9 KiB
C#
82 lines
2.9 KiB
C#
using System.IdentityModel.Tokens.Jwt;
|
|
using System.Security.Claims;
|
|
using Microsoft.IdentityModel.Tokens;
|
|
|
|
namespace Bunny.Common.Utils.Jwt;
|
|
|
|
public static partial class JwtUtil
|
|
{
|
|
/// <summary>
|
|
/// 生成token
|
|
/// </summary>
|
|
/// <param name="data">实体类数据</param>
|
|
/// <param name="day">多少天之后过期</param>
|
|
/// <returns>生成好的token</returns>
|
|
public static string GenerateJwt<T>(T data, int day = Day)
|
|
{
|
|
if (data == null) return "";
|
|
// 初始化字典
|
|
var propertyInfos = data.GetType().GetProperties();
|
|
var claims = (from propertyInfo in propertyInfos
|
|
let name = propertyInfo.Name
|
|
let value = propertyInfo.GetValue(data)?.ToString()
|
|
select value.IsNullOrEmpty() ? new Claim(name, "") : new Claim(name, value!)).ToList();
|
|
|
|
// 生成token
|
|
var token = new JwtSecurityToken(expires: DateTime.UtcNow.AddDays(day), claims: claims);
|
|
|
|
return new JwtSecurityTokenHandler().WriteToken(token);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 生成token
|
|
/// </summary>
|
|
/// <param name="claims">负载,放入你的内容</param>
|
|
/// <param name="day">多少天之后过期</param>
|
|
/// <returns>生成好的token</returns>
|
|
public static string GenerateJwt(IEnumerable<Claim>? claims = default, int day = Day)
|
|
{
|
|
var token = new JwtSecurityToken(expires: DateTime.UtcNow.AddDays(day), claims: claims);
|
|
|
|
return new JwtSecurityTokenHandler().WriteToken(token);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 生成token
|
|
/// </summary>
|
|
/// <param name="jwtKey">生成JWT的key</param>
|
|
/// <param name="claims">负载,放入你的内容</param>
|
|
/// <param name="day">多少天之后过期</param>
|
|
/// <returns>生成好的token</returns>
|
|
public static string GenerateJwt(string jwtKey = JwtKey, IEnumerable<Claim>? claims = default, int day = Day)
|
|
{
|
|
var token = new JwtSecurityToken(
|
|
expires: DateTime.UtcNow.AddDays(day),
|
|
claims: claims,
|
|
signingCredentials: Credentials(jwtKey));
|
|
|
|
return new JwtSecurityTokenHandler().WriteToken(token);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 生成token
|
|
/// </summary>
|
|
/// <param name="issuer">授权</param>
|
|
/// <param name="audience">认证</param>
|
|
/// <param name="jwtKey">生成JWT的key</param>
|
|
/// <param name="claims">负载,放入你的内容</param>
|
|
/// <param name="day">多少天之后过期</param>
|
|
/// <returns>生成好的token</returns>
|
|
public static string GenerateJwt(string issuer, string audience, string jwtKey = JwtKey,
|
|
IEnumerable<Claim>? claims = default, int day = Day)
|
|
{
|
|
var token = new JwtSecurityToken(
|
|
issuer,
|
|
audience,
|
|
expires: DateTime.UtcNow.AddDays(day),
|
|
claims: claims,
|
|
signingCredentials: Credentials(jwtKey));
|
|
|
|
return new JwtSecurityTokenHandler().WriteToken(token);
|
|
}
|
|
} |