gpt4 book ai didi

c# - 如何解密 Web API 2 JWT token ?

转载 作者:太空狗 更新时间:2023-10-29 21:22:16 24 4
gpt4 key购买 nike

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

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

在 Visual Studio 2013 中,如果您选择新建 ASP.NET 项目,然后选择具有个人用户帐户的 Web API 模板,您将获得一个包含 token 端点的示例项目。如果您启动该项目,则可以在内置网络服务器上向/token 发送请求“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 使用的 token 类型。 OAuthAuthorizationServerOptions 的文档说:

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

所以它可能是使用 MachineKey 编码的。没关系,我可以设置机器 key ,但如果我知道创建 token 的机器 key ,我该如何解密它?

最佳答案

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

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

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

如果您需要配置您的 AuthZ 服务器以颁发 JWT 签名 token ,以便您可以使用诸如 Google JWT 解码器之类的在线工具对它们进行解码;那么我建议您在这里阅读我关于 JSON Web Token in ASP.NET Web API 2 using Owin 的博文

关于c# - 如何解密 Web API 2 JWT token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26766530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com