首页 > 解决方案 > C#如何通过代码生成在接下来的5分钟内有效的令牌

问题描述

在这里,我有生成 24 小时有效令牌的代码,但我正在寻找一个生成令牌编号的逻辑将在 5 分钟内有效。我搜索谷歌但发现不知道。所以请有人分享任何想法将不胜感激。谢谢

public static string GenerateToken()
{
    int month = DateTime.Now.Month;
    int day = DateTime.Now.Day;
    string token = ((day * 100 + month) * 700 + day * 13).ToString();
    return token;
}

标签: c#

解决方案


如果你使用身份。你可以实现这个

using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
...   
public class SomeTokenAuthenticationService : IAuthenticateService
{
    private readonly TokenManagement _tokenManagement;
 
    public SomeTokenAuthenticationService(IOptions<TokenManagement> tokenManagement)
        {
            _tokenManagement = tokenManagement.Value;
        }
    
public string GenerateToken(ClaimsIdentity identity){
                var now = DateTime.UtcNow;
                var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_tokenManagement.Secret));
                var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
        
                var jwtToken = new JwtSecurityToken(
                    _tokenManagement.Issuer,
                    _tokenManagement.Audience,
                    notBefore:now,
                    claims:identity.Claims,
                    expires: DateTime.Now.AddMinutes(_tokenManagement.AccessExpiration),
                    signingCredentials: credentials
                );
                var tokenjwt = new JwtSecurityTokenHandler().WriteToken(jwtToken);
        
                return $"Bearer {tokenjwt}";
            }}

您还需要在 appsettings.Development.json 中添加一个选项

"tokenManagement": {
    "secret": "Secret : in the 1eujsjjdjodjdjodfjodjojofjfdjdj 1234567891",
    "issuer": "test.user",
    "audience": "SampleAudience",
    "accessExpiration": 30,//minutes
    "refreshExpiration": 60
  }

推荐阅读