AccountAuthorization/LKJCpowerSupplyOfficeSimula.../CompetitionAPI/TokenService.cs

39 lines
1.3 KiB
C#

using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
namespace CompetitionAPI
{
public class TokenService
{
private readonly string _secretKey;
private readonly string _issuer;
public TokenService(string secretKey, string issuer)
{
_secretKey = secretKey;
_issuer = issuer;
}
public string GenerateToken(string userId)
{
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_secretKey);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new[] { new Claim("userId", userId) }),
Expires = DateTime.UtcNow.AddHours(3), // Token 过期时间
Issuer = _issuer,
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
//注意:使用高版本下面这行代码会报错
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);
return tokenString;
}
}
}