2013-05-26 39 views
2

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

我期待在这个例子中

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

我可以编码使用签名密钥字符串智威汤逊。

然后我就可以通过调用反序列化解码JWT回源字符串()。

但是,如果你看看代码 - 你注意到该方法不使用 SIGNING键来解码...但它确实解码正确。

困惑!

是智威汤逊字符串本身中的关键 - 这将没有任何安全感!

回答

0

声明:我一个一个Java开发,所以这是基于我的(非Java-DEV)读取源的.. 我也不使用你引用样品。

  • public String deserialize(String tokenString)从Base64编码解码串并
  • 它看起来像它的唯一这样做的有效载荷(String jwtPayloadSegment = pieces[1];)和
  • 没有为签名解析由private String[] splitTokenString(String tokenString)
  • (它本来 pieces[2]

如上所述,我不是一个Java开发我也不使用样本。代码如下所示(再次,注意我的声明),它仅适用于如何创建一个索取样品(发送给谷歌)作为处理程序,为您的侦听器,谷歌验证接收的回调。

的示例代码仍然应该这样做,由于验证时的过程是相似的有益的 - 重(重)建智威汤逊的签名,并将其与传入POST请求解析的签名进行比较。

貌似样本:

  1. 在index.jsp中,处理GET请求(Main_Servlet.java),并建立了智威汤逊
  2. 调用谷歌的方法来发送POST请求发起购买过程

样本中没有代码,我可以看到这是供听众处理来自Google的包含订单JWT的帖子 - 您需要编写该代码(并且您需要验证JWT来自Google)。

H个 - 如果我错了,我的源读,我很可能是。

3

不要混淆加密签名。

该密钥用于生成一个数字签名,稍后将用于验证智威汤逊的真实性。

请参阅下面的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

+0

是的,关于“后来辨别真伪” ......也没有被证明的JWT_Handler.java代码。 – Cheeso

1

当你说DECODE,你什么意思?

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

智威汤逊是一些魔术。但它不是,对于客户而言,它只是包含一些信息的普通标记。

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

这里:http://jwt.io/

你可以看到有头/信息的一部分/和哈希/签名。

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

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