当前位置: 首页 > 知识库问答 >
问题:

如何解密 Web API 2 JWT 令牌?

傅峰
2023-03-14

我正在尝试使用Web API 2提供的OAuth不记名令牌,但我不知道如何解加密它们或获取数据。

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

在Visual Studio 2013中,如果您选择“新建ASP.NET项目”,然后选择带有个人用户帐户的Web API模板,您将获得一个包含令牌endpoint的示例项目。如果你开始这个项目,你可以发布一个请求“grant_type=password

{
"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的格式和包含哪些信息。

我发现的一个线索是:您可以通过设置OAuthAuthorizationServerOptions来选择Web API使用的令牌类型。Startup.Auth.cs中的AccessTokenFormat属性。OAuthAuthorizationServerOptions的文档说明:

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

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

共有1个答案

轩辕华辉
2023-03-14

您对令牌的生成是正确的。此令牌是一个加密或签名的字符串,包含已登录用户所有声明和票证属性的反序列化版本。如果在IIS模式(SystemWeb)下,加密和签名是通过机器密钥节点中的“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解码器之类的某人行工具对其进行反编码;那么我建议你阅读我在这里关于ASP中JSON Web令牌的博客文章。NET Web API 2使用Owin

 类似资料:
  • 问题内容: 创建公司使用的平台的开发人员不再为我们工作,而且我不知道如何从自定义PHP应用程序中检索密码。 当我查看PHPmyAdmin时,密码已加密(例如* 2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19) 如何更改或检索这些? 问题答案: 如果使用正确的加密方法,将无法轻松检索它们。 只需使用新密码重置即可。 编辑: 字符串看起来像它正在使用:

  • 我有一个经常更新需要解密的加密测量数据的第三方来源。我知道如何使用mcrypt库在perl或ruby中解密数据。 为了留档和方便访问,我想记录如何使用命令行工具解密密文。我试过mcrypt和openssl命令行工具,似乎无法使用命令行工具正确解密密文。 数据在模式 ecb 中使用 rijndael-128 进行加密。这超出了我的控制范围。 给定以下最小示例: 加密数据存储在二进制文件“./密文”中

  • 问题内容: 我需要使用以下命令在JAVA中解密在UNIX中加密的文件: 我必须像在UNIX中一样在Java中解密 有人可以给我一个Java代码来执行此操作吗? 问题答案: OpenSSL通常使用自己的基于密码的密钥派生方法,该方法在中指定EVP_BytesToKey,请参见下面的代码。此外,它会在多行中隐式地将密文编码为base 64,以便在邮件正文中发送密文。 因此,结果是伪代码: 因此解密为:

  • 本文向大家介绍如何在Linux上使用gpg命令加密和解密文件,包括了如何在Linux上使用gpg命令加密和解密文件的使用技巧和注意事项,需要的朋友参考一下 有很多选择可以保护您的数据。但是,GPG的另一个优势是可以优先加密您的数据并通过Internet安全地传输它们。本文介绍有关–如何在Linux上使用GPG命令加密和解密文件。 要获取有关GPG的更多信息,请使用以下命令– 样本输出应如下所示–

  • 我正在使用HMACSHA512对用户登录密码进行加密(散列),使用(PasswordToHash(_salt,passwordText,iterations)),并存储在数据库中。我想知道如何解密密码。

  • 我不明白这个图书馆是如何工作的。你能帮帮我吗? 以下是我的简单代码: 这是错误: 字符串需要采用紧凑的JSON格式,格式为:Base64UrlEncodedHeader。Base64UrlEndcodedPayload。可选,Base64UrlEncodedSignature'。 如果你复制流在jwt.io网站,它的作品罚款:)