【发布时间】:2015-01-02 04:41:51
【问题描述】:
我正在尝试使用 Web API 2 提供的 OAuth 不记名令牌,但我不知道如何解密它们或取出数据。
我真正想做的是为我从 Web API 获得的令牌找到或编写一个与此 Google 工具 https://developers.google.com/wallet/digital/docs/jwtdecoder 等效的工具。 Google 工具允许您粘贴代表 JWT 令牌的文本字符串,然后将其拆分并取消编码其中的 JSON。
在 Visual Studio 2013 中,如果您选择新建 ASP.NET 项目,然后选择带有单个用户帐户的 Web API 模板,您将获得一个包含令牌端点的示例项目。如果您启动项目,您可以向内置网络服务器上的 /token POST 请求“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 使用哪种令牌。 OAuthAuthorizationServerOptions 的文档说:
"用于保护访问令牌中包含的信息的数据格式。如果应用程序未提供默认数据保护提供程序,则取决于主机服务器。IIS 上的 SystemWeb 主机将使用 ASP.NET 机器密钥数据保护,并且 HttpListener 和其他自托管服务器将使用 DPAPI 数据保护。如果分配了不同的访问令牌提供程序或格式,则必须为资源服务器的 OAuthBearerAuthenticationOptions.AccessTokenProvider 或 OAuthBearerAuthenticationOptions.AccessTokenFormat 属性分配兼容的实例。"
所以它可能是使用 MachineKey 编码的。没关系,我可以设置机器密钥 OK,但是如果我知道创建令牌的机器密钥,我该如何解密呢?
【问题讨论】:
标签: c# asp.net asp.net-web-api oauth visual-studio-2013