【问题标题】:Decode ThinkTecture Identity Server JWT token解码 ThinkTecture 身份服务器 JWT 令牌
【发布时间】:2014-05-23 18:43:44
【问题描述】:

我已设法使用 OAuth2 从 Identity Server 取回 JWT 令牌,并希望从令牌中提取声明。

当我使用诸如https://developers.google.com/wallet/digital/docs/jwtdecoder 之类的令牌解码器时,我可以窥视令牌内部并且看起来不错。

但是我不确定在 c# 中使用什么解密才能使用 Microsoft JwtSecurityTokenHandler.ValidateToken 来取回声明身份。

在身份服务器中,我使用了一个对称密钥,我已将其粘贴在我的代码中以供参考。 JWT 令牌也是有效的。

非常感谢您的帮助:

string token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vaWRlbnRpdHlzZXJ2ZXIudjIudGhpbmt0ZWN0dXJlLmNvbS90cnVzdC9jaGFuZ2V0aGlzIiwiYXVkIjoidXJuOndlYmFwaXNlY3VyaXR5IiwibmJmIjoxMzk3MTEzMDY5LCJleHAiOjEzOTcxNDkwNjksIm5hbWVpZCI6InN0ZWZhbiIsInVuaXF1ZV9uYW1lIjoic3RlZmFuIiwiYXV0aG1ldGhvZCI6Ik9BdXRoMiIsImF1dGhfdGltZSI6IjIwMTQtMDQtMTBUMDY6NTc6NDguODEyWiIsImh0dHA6Ly9pZGVudGl0eXNlcnZlci50aGlua3RlY3R1cmUuY29tL2NsYWltcy9jbGllbnQiOiJyZWx5aW5nIHBhcnR5IDMgdGVzdCBjbGllbnQgbmFtZSIsImh0dHA6Ly9pZGVudGl0eXNlcnZlci50aGlua3RlY3R1cmUuY29tL2NsYWltcy9zY29wZSI6InVybjp3ZWJhcGlzZWN1cml0eSJ9.cFnmgHxrpy2rMg8B6AupVrJwltu7RhBAeIx_D3pxJeI";

string key = "ZHfUES/6wG28LY+SaMtvaeek34t2PBrAiBxur6MAI/w=";

var validationParameters = new TokenValidationParameters()
{
    AllowedAudience = "urn:webapisecurity",
    SigningToken = new ????
    ValidIssuer = @"http://identityserver.v2.thinktecture.com/trust/changethis"
};

var tokenHandler = new JwtSecurityTokenHandler();
var principal = tokenHandler.ValidateToken(token, validationParameters);

我应该为 validationParameters.SigningToken 使用哪种 SigningToken ??

【问题讨论】:

    标签: token encryption-symmetric jwt thinktecture-ident-server thinktecture-ident-model


    【解决方案1】:

    您可以使用以下网站对令牌进行解码

    http://jwt.io/

    或者这里是使用 C# 解码 JWT 令牌的代码

     class Program
        {
            static void Main(string[] args)
            {
    
                string token ="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vaWRlbnRpdHlzZXJ2ZXIudjIudGhpbmt0ZWN0dXJlLmNvbS90cnVzdC9jaGFuZ2V0aGlzIiwiYXVkIjoidXJuOndlYmFwaXNlY3VyaXR5IiwibmJmIjoxMzk3MTEzMDY5LCJleHAiOjEzOTcxNDkwNjksIm5hbWVpZCI6InN0ZWZhbiIsInVuaXF1ZV9uYW1lIjoic3RlZmFuIiwiYXV0aG1ldGhvZCI6Ik9BdXRoMiIsImF1dGhfdGltZSI6IjIwMTQtMDQtMTBUMDY6NTc6NDguODEyWiIsImh0dHA6Ly9pZGVudGl0eXNlcnZlci50aGlua3RlY3R1cmUuY29tL2NsYWltcy9jbGllbnQiOiJyZWx5aW5nIHBhcnR5IDMgdGVzdCBjbGllbnQgbmFtZSIsImh0dHA6Ly9pZGVudGl0eXNlcnZlci50aGlua3RlY3R1cmUuY29tL2NsYWltcy9zY29wZSI6InVybjp3ZWJhcGlzZWN1cml0eSJ9.cFnmgHxrpy2rMg8B6AupVrJwltu7RhBAeIx_D3pxJeI";
                
                    var parts = token.Split('.');
                    string partToConvert = parts[1];
                    var partAsBytes = Convert.FromBase64String(partToConvert);
                    var partAsUTF8String = Encoding.UTF8.GetString(partAsBytes, 0, partAsBytes.Count());
               
                    //JSON.net required
                    var jwt = JObject.Parse(partAsUTF8String);
    
                     
                    Console.Write(jwt.ToString());
    
                Console.ReadLine();
    
            }
            }
    

    【讨论】:

      【解决方案2】:

      这是一个 BinarySecretSecurityToken - base64 解码字符串化密钥以使用它。

      【讨论】:

      • 对,我正在尝试使用Base64代码来解码JWT令牌字符串,但仍然没有成功,请您提供示例代码吗?
      • JWT 令牌是 base64Url 编码(Base64 的 URL 安全版本)
      猜你喜欢
      • 2017-03-08
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 2020-05-07
      • 2014-02-08
      • 2014-05-22
      • 2022-09-30
      相关资源
      最近更新 更多