public class Jwt
{
/// <summary>
/// 返回jwt模型
/// </summary>
/// <returns></returns>
public static JwtOption GetOption()
{
JwtOption option = ConfigureProvider.BuildModel<JwtOption>("jwtOption");
return option;
}
/// <summary>
/// 返回SymmetricSecurityKey
/// </summary>
/// <returns></returns>
public static SymmetricSecurityKey GetSymmetricSecurityKey()
{
JwtOption option = GetOption();
return GetSymmetricSecurityKey(option.Secret);
}
/// <summary>
/// 返回SymmetricSecurityKey
/// </summary>
/// <returns></returns>
public static SymmetricSecurityKey GetSymmetricSecurityKey(string secret)
{
return new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
}
/// <summary>
/// 返回token参数模型
/// </summary>
/// <returns></returns>
public static TokenValidationParameters GetTokenValidation()
{
JwtOption option = GetOption();
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = GetSymmetricSecurityKey(option.Secret),
ValidateIssuer = true,
ValidIssuer = option.Issuer,
ValidateAudience = true,
ValidAudience = option.Audience,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero,
RequireExpirationTime = true,
};
return tokenValidationParameters;
}
/// <summary>
/// 获取jwt的token参数
/// </summary>
/// <param name="claims"></param>
/// <returns></returns>
public static JwtSecurityToken GetJwtParameters(Claim[] claims,JwtOption option=null)
{
if (option == null)
option = GetOption();
var jwt = new JwtSecurityToken(
issuer: option.Issuer,
audience: option.Audience,
claims: claims,
notBefore: DateTime.Now,
expires: DateTime.Now.Add(TimeSpan.FromMinutes(option.ExpireMinutes)),
signingCredentials: new SigningCredentials(GetSymmetricSecurityKey(option.Secret), SecurityAlgorithms.HmacSha256)
);
return jwt;
}
/// <summary>
/// 获取jwt
/// </summary>
/// <param name="claims"></param>
/// <returns></returns>
public static JwtToken GetToken(JwtSecurityToken tokenParameters)
{
JwtOption option = GetOption();
string token=new JwtSecurityTokenHandler().WriteToken(tokenParameters);
return new JwtToken(token, option.ExpireMinutes);
}
/// <summary>
/// 获取jwt
/// </summary>
/// <param name="claims"></param>
/// <returns></returns>
public static JwtToken GetToken(Claim[] claims)
{
JwtOption option = GetOption();
JwtSecurityToken jwtSecurityToken = GetJwtParameters(claims,option);
string token = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
return new JwtToken(token, option.ExpireMinutes*60);
}
}
public class JwtToken
{
public string Token { get; set; }
public int ExpireSeconds { get; set; }
public JwtToken(string token,int expireSeconds)
{
Token = token;
ExpireSeconds = expireSeconds;
}
}
public class JwtOption
{
public string Issuer { get; set; }
public string Audience { get; set; }
public int ExpireMinutes { get; set; }
public string Secret { get; set; }
}