加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何解密Web API 2 JWT令牌?

发布时间:2020-12-15 08:26:23 所属栏目:百科 来源:网络整理
导读:我正在尝试使用OAuth bearer令牌Web API 2供应,但我不知道如何解密它们或获取数据. 我真正想要做的就是找到或写一个与Google Tool https://developers.google.com/wallet/digital/docs/jwtdecoder相同的工具来获取我从Web API获得的令牌. Google工具允许您粘
我正在尝试使用OAuth bearer令牌Web API 2供应,但我不知道如何解密它们或获取数据.

我真正想要做的就是找到或写一个与Google Tool https://developers.google.com/wallet/digital/docs/jwtdecoder相同的工具来获取我从Web API获得的令牌. Google工具允许您粘贴表示JWT令牌的文本字符串,然后将其拆分并取消对JSON内的JSON编码.

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

{
"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使用的令牌类型. OAuthAuthorizationServerOptions的文档说:

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

所以它可能使用MachineKey进行编码.没关系,我可以设置机器密钥,但如果我知道创建令牌的机器密钥,我该如何解密?

解决方法

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

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

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

如果您需要配置AuthZ服务器以发布JWT签名令牌,那么您可以使用某些线路工具(如Google JWT解码器)对其进行解除;那么我建议你在这里阅读关于JSON Web Token in ASP.NET Web API 2 using Owin的博文

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读