Yuebon.NetCore/Yuebon.AspNetCore/Mvc/TokenProvider.cs

(开头部分) 9KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Text;
using Yuebon.Commons.Options;
using Yuebon.Security.IServices;
using Yuebon.Security.Models;

namespace Yuebon.AspNetCore.Mvc;

/// <summary>
/// Token令牌提供类
/// </summary>
public class TokenProvider
{
    JwtOption _jwtModel=Appsettings.GetService<JwtOption>();
    IRoleService _roleService = Appsettings.GetService<IRoleService>();
    IAPPService _appService = Appsettings.GetService<IAPPService>();
    /// <summary>
    /// 构造函数
    /// </summary>
    public TokenProvider() { }
    /// <summary>
    /// 构造函数,初花jwtmodel
    /// </summary>
    /// <param name="jwtModel"></param>
    public TokenProvider(JwtOption jwtModel)
    {
        _jwtModel = jwtModel;
    }
    /// <summary>
    /// 直接通过appid和加密字符串获取访问令牌接口
    /// </summary>
    /// <param name="granttype">获取access_token填写client_credential</param>
    /// <param name="appid">用户唯一凭证AppId</param>
    /// <param name="secret">用户唯一凭证密钥,即appsecret</param>
    /// <returns></returns>
    public TokenResult GenerateToken(string granttype, string appid, string secret)
    {
        var keyByteArray = Encoding.UTF8.GetBytes(secret);
        var expires = DateTime.UtcNow.Add(TimeSpan.FromMinutes(_jwtModel.Expiration));
        var tokenDescripor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(new Claim[] {
                new Claim(YuebonClaimConst.Audience,appid),
                new Claim(YuebonClaimConst.Issuer,_jwtModel.Issuer),
                new Claim(YuebonClaimConst.Subject, GrantType.ClientCredentials)
            }, granttype),
            Expires = expires,
            //对称秘钥SymmetricSecurityKey
            //签名证书(秘钥,加密算法)SecurityAlgorithms
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(keyByteArray), SecurityAlgorithms.HmacSha256Signature)
        };
        var tokenHandler = new JwtSecurityTokenHandler();
        var token = tokenHandler.CreateToken(tokenDescripor);
        var tokenString = tokenHandler.WriteToken(token);
        TokenResult result = new TokenResult();
        result.AccessToken = tokenString;
        result.ExpiresIn = (int)TimeSpan.FromMinutes(_jwtModel.Expiration).TotalMinutes;
        return  result;
    }
后面还有 172 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。