我正在用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字符串本身内的密钥-这没有任何安全意义!
[请勿将签名与加密混淆。
密钥用于生成数字签名,稍后将用于验证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
[当您说DECODE时,您是什么意思?
您可以解码base64部分。它可以(通常是)用于承载信息。哪个客户端可以使用。用户名,角色和其他公共事物。
JWT被呈现为某种魔术。但这不是,因为客户只是带有某些包含信息的普通令牌。
服务器创建此令牌并使用仅在服务器端的密码/密钥对其进行签名。因此,服务器将创建令牌,并且只有服务器才能使用此密码来验证令牌。
您可以在其中看到标题/信息部分/和哈希/签名。
信息和标题是纯base64,您可以自由阅读它们。该网站上的演示显示了使用给定的SECRET密码生成的jwt。如果您修改信息部分,则将其辞职。只有知道此密码,您才能验证令牌。
我最喜欢的文章,带有漂亮的Java注释:http://blog.jdriven.com/2014/10/stateless-spring-security-part-2-stateless-authentication/
免责声明:我是not一个Java开发人员,所以这是基于我(非Java开发人员)对源代码的读取。。[[我也不使用您所引用的示例。
public String deserialize(String tokenString)
正在从Base64解码为字符串和String jwtPayloadSegment = pieces[1];
)和]执行此操作>pieces[2]
解析的签名(本来是private String[] splitTokenString(String tokenString)
的]如何创建请求(发送给Google)的示例],not
看起来像样本:
Main_Servlet.java
)并构建JWT我可以看到]中没有代码供您的听众处理来自Google的包含JWT顺序的帖子-您将需要编写该代码(是的,您需要验证JWT是从Google)。