关于c#:如何解密Web API 2 JWT令牌?

How to unencrypt Web API 2 JWT tokens?

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

我真正想做的是找到或写一个与此Google工具等效的工具https://developers.google.com/wallet/digital/docs/jwtdecoder,以获取从Web获得的令牌API。 Google工具可让您粘贴表示JWT令牌的文本字符串,然后将其拆分并对其内部的JSON取消编码。

在Visual Studio 2013中,如果选择"新建ASP.NET"项目,然后选择具有单个用户帐户的Web API模板,则会得到一个包含令牌终结点的示例项目。如果启动项目,则可以发布请求" grant_type = password


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

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

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

如果您需要配置AuthZ服务器以发布JWT签名令牌,以便可以使用诸如Google JWT解码器之类的在线工具对它们进行解密;那么我建议您在这里阅读有关使用Owin

在ASP.NET Web API 2中使用JSON Web令牌的博客文章