如何解密Web API 2 JWT令牌

本文关键字:API JWT 令牌 Web 何解密 解密 | 更新日期: 2023-09-27 18:29:13

我正在尝试使用Web API 2提供的OAuth承载令牌,但我不知道如何对它们进行解密或将数据取出。

我真正想做的是为自己找到或编写一个与谷歌工具等效的工具https://developers.google.com/wallet/digital/docs/jwtdecoder对于我从Web API获得的令牌。Google工具允许您粘贴表示JWT令牌的文本字符串,然后将其拆分并在其中对JSON进行编码。

在Visual Studio 2013中,如果选择"新建ASP.NET项目",然后选择具有单个用户帐户的Web API模板,则会获得包含令牌终结点的示例项目。如果你启动了这个项目,你可以在内置的Web服务器上向/token发送一个请求"grant_type=password&username=joe&password=joe",然后你会得到一个令牌:

{
"access_token":"x3vHm40WUXBiMZi_3EmdmCWLLuv4fsgjsg4S5Ya8kppDY_-2ejn7qF5Y_nbQ0bYVIKl6MNzL2GtXv-MAuwjippAAv5VDaxoKdxEVxeFrQ_eXsKNaQK7IvmVs1rIZ9eeRfRGK2AQ59wWQcyTtYO0dPJx9K7PGrSKz4ADAZ9SEZqQ4IesVhYbRCwToyxoyU5L9qdU8jXdHumkIrULRQhf68rIaBrEA_Be-V0rzWJ644fRLvv3z69XoHs3Az7PineILyNwbDck9uU2jkaXnwxoCTa4qlK8bR-lEI9-VXPNdbCvfgb5H9wfYsJcw2CMzNxNhV8v9YVZEt90evylwtTCEpXq4T3zRCQvrpbCvZrXqJ8uvlFeqCsvvhlIkSfPhBY8nm2ocWtBGPZm58zLe5FMi1jept0B54U38ZxkZlrGQKar47jkmnc6gpLrkpDBp7cWz",
"token_type":"bearer",
"expires_in":1209599,
"userName":"joe",
".issued":"Fri, 01 Aug 2014 16:16:02 GMT",
".expires":"Fri, 15 Aug 2014 16:16:02 GMT"
}

我想了解的是access_token的格式以及包含的信息。

我发现的一个线索是:您可以通过在Startup.Auth.cs中设置OAuthAuthorizationServerOptions.AccessTokenFormat属性来选择Web API使用哪种令牌

"用于保护访问令牌中包含的信息的数据格式。如果应用程序未提供,则默认的数据保护提供程序取决于主机服务器。IIS上的SystemWeb主机将使用ASP.NET计算机密钥数据保护,HttpListener和其他自主控服务器将使用DPAPI数据保护。如果分配了不同的访问令牌提供程序或格式ible实例必须分配给资源服务器的OAuthBearerAuthenticationOptions.AccessTokenProvider或OAuthBeaerAuthenticationOptions.AccessTokenFormat属性。"

所以它可能是用MachineKey编码的。没关系,我可以将机器密钥设置为OK,但如果我知道创建令牌时使用的机器密钥,我该如何解密它?

如何解密Web API 2 JWT令牌

您对令牌的生成是正确的。此令牌是加密或签名的字符串,包含已登录用户的所有声明和票证属性的反序列化版本。如果处于IIS模式(SystemWeb),则通过machineKey节点中的"decryptionKey"answers"validationKey"键值进行加密和签名。如果作为自主机OWIN应用程序运行,则加密使用DPAPI来保护它,而这实际上使用3DES算法。

要解密它,您需要在API控制器操作方法中调用此代码(不需要,但如果您想查看加密令牌中的内容):

string token = "Your token goes here";
Microsoft.Owin.Security.AuthenticationTicket ticket= Startup.OAuthBearerOptions.AccessTokenFormat.Unprotect(token);

如果你需要将你的AuthZ服务器配置为发布JWT签名的令牌,这样你就可以使用某人行工具(如谷歌JWT解码器)对其进行解密;然后,我建议您阅读我的博客文章,了解使用Owin的ASP.NETWebneneneba API 2中的JSON Web令牌