CSharp-Single-EFCore/Bunny.Common/Utils/Jwt/JwtGenerateUtil.cs

82 lines
2.9 KiB
C#
Raw Normal View History

2024-08-08 22:23:36 +08:00
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);
}
}