コード例 #1
0
        public (string, DateTime) BuildJwtToken(Claim[] claims, JwtOptions options)
        {
            options.NotNull(nameof(options));
            claims.NotNull(nameof(claims));
            if (options.SecretKey.IsNullOrEmpty())
            {
                throw new AppException("密钥不能为空!!");
            }
            DateTime           now         = DateTime.UtcNow;
            SecurityKey        key         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(options.SecretKey));
            SigningCredentials credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature);
            double             minutes     = options.ExpireMins <= 0 ? 5 : options.ExpireMins;

            DateTime expires = now.AddMinutes(minutes);


            SecurityTokenDescriptor descriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(claims),
                Audience           = options.Audience ?? "Destiny",
                Issuer             = options.Issuer ?? "Destiny",
                SigningCredentials = credentials,
                NotBefore          = now,
                IssuedAt           = now,
                Expires            = expires
            };


            SecurityToken token = _tokenHandler.CreateToken(descriptor);

            return(_tokenHandler.WriteToken(token), expires);
        }