/// <summary>
        /// 创建令牌
        /// </summary>
        /// <param name="claims">声明列表</param>
        /// <param name="options">Jwt选项配置</param>
        /// <param name="tokenType">Jwt令牌类型</param>
        private (string, DateTime) CreateToken(IEnumerable <Claim> claims, JwtOptions options,
                                               JsonWebTokenType tokenType)
        {
            var secret = options.Secret;

            if (secret == null)
            {
                throw new ArgumentNullException(nameof(secret));
            }
            var key         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
            var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature);
            var now         = DateTime.UtcNow;
            var minutes     = tokenType == JsonWebTokenType.AccessToken
                ? options.AccessExpireMinutes > 0 ? options.AccessExpireMinutes : 5 // 默认5分钟
                : options.RefreshExpireMinutes > 0
                    ? options.RefreshExpireMinutes
                    : 10080; // 默认7天
            var expires = now.AddMinutes(minutes);
            //var descriptor = new SecurityTokenDescriptor()
            //{
            //    Subject = new ClaimsIdentity(claims),
            //    Audience = options.Audience,
            //    Issuer = options.Issuer,
            //    SigningCredentials = credentials,
            //    NotBefore = now,
            //    IssuedAt = now,
            //    Expires = expires,
            //};
            //var token = _tokenHandler.CreateToken(descriptor);
            //var accessToken = _tokenHandler.WriteToken(token);
            var jwt         = new JwtSecurityToken(options.Issuer, options.Audience, claims, now, expires, credentials);
            var accessToken = _tokenHandler.WriteToken(jwt);

            return(accessToken, expires);
        }
Exemple #2
0
        /// <summary>
        /// 创建令牌
        /// </summary>
        /// <param name="tokenHandler">Jwt安全令牌处理器</param>
        /// <param name="claims">声明列表</param>
        /// <param name="options">Jwt选项配置</param>
        /// <param name="tokenType">Jwt令牌类型</param>
        public static (string token, DateTime expires) CreateToken(JwtSecurityTokenHandler tokenHandler, IEnumerable <Claim> claims,
                                                                   JwtOptions options, JsonWebTokenType tokenType)
        {
            var secret = options.Secret;

            if (secret == null)
            {
                throw new ArgumentNullException(nameof(secret));
            }
            var key         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
            var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature);
            var now         = DateTime.UtcNow;
            var minutes     = tokenType == JsonWebTokenType.AccessToken
                ? options.AccessExpireMinutes > 0 ? options.AccessExpireMinutes : 5 // 默认5分钟
                : options.RefreshExpireMinutes > 0
                    ? options.RefreshExpireMinutes
                    : 10080; // 默认7天
            var expires     = now.AddMinutes(minutes);
            var jwt         = new JwtSecurityToken(options.Issuer, options.Audience, claims, now, expires, credentials);
            var accessToken = tokenHandler.WriteToken(jwt);

            return(accessToken, expires);
        }