java解码JWT

问题描述 投票:2回答:3

我正在用Java编码/解码JWT字符串...专门用于应用内购买。

我正在看这个例子

https://code.google.com/p/gwdg-java/source/browse/src/java/com/google/iapsample/JWT_Handler.java

我可以使用SIGNING键将字符串编码为JWT。

然后我可以通过调用deserialize()将JWT解码回源字符串。

但是,如果您查看代码,则会注意到该方法未使用SIGNING键可以解码...但是可以正确解码。

困惑!

是JWT字符串本身内的密钥-这没有任何安全意义!

android-pay jwt
3个回答
3
投票

[请勿将签名与加密混淆。

密钥用于生成数字签名,稍后将用于验证JWT的真实性。

请参见下面的JWT规范以获取示例:

http://tools.ietf.org/id/draft-jones-json-web-token-08.html#rfc.section.3.1

您还可以使用下面的JWT解码器来测试您的集成:

https://developers.google.com/commerce/wallet/digital/docs/jwtdecoder


1
投票

[当您说DECODE时,您是什么意思?

您可以解码base64部分。它可以(通常是)用于承载信息。哪个客户端可以使用。用户名,角色和其他公共事物。

JWT被呈现为某种魔术。但这不是,因为客户只是带有某些包含信息的普通令牌。

服务器创建此令牌并使用仅在服务器端的密码/密钥对其进行签名。因此,服务器将创建令牌,并且只有服务器才能使用此密码来验证令牌。

这里:http://jwt.io/

您可以在其中看到标题/信息部分/和哈希/签名。

信息和标题是纯base64,您可以自由阅读它们。该网站上的演示显示了使用给定的SECRET密码生成的jwt。如果您修改信息部分,则将其辞职。只有知道此密码,您才能验证令牌。

我最喜欢的文章,带有漂亮的Java注释:http://blog.jdriven.com/2014/10/stateless-spring-security-part-2-stateless-authentication/


0
投票

免责声明:我是not一个Java开发人员,所以这是基于我(非Java开发人员)对源代码的读取。。[[我也不使用您所引用的示例。

    [public String deserialize(String tokenString)正在从Base64解码为字符串和
  • 似乎仅对有效载荷(String jwtPayloadSegment = pieces[1];)和]执行此操作>
  • 不是用于pieces[2]解析的签名(本来是private String[] splitTokenString(String tokenString)的]
  • 如上所述,我不是Java开发人员,也不使用示例。代码看起来像(再次,请注意我的免责声明),它只是

    如何创建请求(发送给Google)的示例],not

作为处理程序,供您的监听者验证传入的来自Google的回调。 示例代码仍将对此有所帮助,因为验证过程相似-re:(重新)构建JWT签名并将其与传入的POST请求中的解析签名进行比较。

看起来像样本:

    在index.jsp中,处理GET请求(Main_Servlet.java)并构建JWT
  1. 调用Google方法发送POST请求以启动购买过程
  2. 示例

    我可以看到]中没有代码供您的听众处理来自Google的包含JWT顺序的帖子-您将需要编写该代码(是的,您需要验证JWT是从Google)。

  3. Hth-如果我对源的阅读有误,则可能是。
© www.soinside.com 2019 - 2024. All rights reserved.