/// <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); }
/// <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); }