예제 #1
0
        /// <summary>
        /// 解析JWT令牌
        /// </summary>
        /// <param name="token">JWT令牌</param>
        /// <param name="claim">Claim名称</param>
        /// <returns>返回指定的Claim值,解析失败返回null</returns>
        public object Parse(string token, JwtClaimNames claim)
        {
            if (string.IsNullOrWhiteSpace(token))
            {
                throw new ArgumentException(nameof(token));
            }

            // 令牌解密
            string jwtStr;

            if (_useAes)
            {
                var jwtBytes = JwtBase64Url.Decode(token);               // 解码
                jwtStr = Encoding.UTF8.GetString(Aes.Decrypt(jwtBytes)); // 解密
            }
            else
            {
                jwtStr = token;
            }

            var parts = jwtStr.Split('.');

            if (parts.Length != 3)
            {
                throw new ArgumentOutOfRangeException(token, "令牌必须由3个由点分隔的部分组成");
            }

            // 解码负载
            var payloadDecode = JwtBase64Url.Decode(parts[1]);
            var json          = Encoding.UTF8.GetString(payloadDecode);
            var claims        = Json.Json.Deserialize <IDictionary <string, object> >(json);

            if (claims != null && claims.TryGetValue(claim.ToStr(), out var result))
            {
                return(result);
            }
            return(null);
        }
예제 #2
0
 /// <summary>
 /// 增加Claim
 /// </summary>
 /// <param name="name">Claim名称</param>
 /// <param name="value">Claim值</param>
 /// <exception cref="ArgumentNullException" />
 /// <returns>返回当前构造器实例</returns>
 public JwtBuilder AddClaim(JwtClaimNames name, object value)
 {
     AddClaim(name.ToStr(), value);
     return(this);
 }
예제 #3
0
 /// <summary>
 /// 获得JwtClaimNames当前枚举值
 /// </summary>
 public static string ToStr(this JwtClaimNames value)
 {
     return(GetDescription(value));
 }