首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解密Web API 2 JWT令牌?

如何解密Web API 2 JWT令牌?
EN

Stack Overflow用户
提问于 2014-11-06 04:29:44
回答 1查看 2.9K关注 0票数 6

我正在尝试使用WebAPI2提供的OAuth持有者令牌,但我不知道如何解密它们或获取数据。

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

在Visual Studio2013中,如果您选择新建ASP.NET项目,然后选择具有单个用户帐户的Web API模板,您将获得一个包含令牌端点的示例项目。如果你开始这个项目,然后你可以在内置的get服务器上向/token发布一个请求"grant_type=password&username=joe&password=joe“,然后你就会得到一个令牌:

代码语言:javascript
复制
{
"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使用哪种令牌。OAuthAuthorizationServerOptions的文档中写道:

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

所以它可能是使用MachineKey编码的。这很好,我可以设置机器密钥OK,但是如果我知道创建令牌时使用的机器密钥,我如何解密它?

EN

回答 1

Stack Overflow用户

发布于 2014-11-06 07:33:22

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

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

代码语言:javascript
复制
string token = "Your token goes here";
Microsoft.Owin.Security.AuthenticationTicket ticket= Startup.OAuthBearerOptions.AccessTokenFormat.Unprotect(token);

如果您需要配置您的AuthZ服务器来发布JWT签名的令牌,这样您就可以使用在线工具(比如Google JWT decoder)对它们进行解码;那么我建议您阅读我在这里发表的关于JSON Web Token in ASP.NET Web API 2 using Owin的博客文章。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26766530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档