有效负载为空的JWT令牌如何工作?

时间:2019-01-04 22:37:41

标签: oauth jwt

我正在使用Snapchat API尝试使用其OAuth流登录应用。一旦用户通过Snapchat登录,我将尝试进行逆向工程(因为他们对此没有文档)如何为用户获取某种唯一的ID,以便将其与数据库中的本地用户相关联。这就是我以前使用Facebook之类的方法的方式。用户登录并通过Facebook Api获取访问令牌,然后我可以通过Facebook API为用户提取某种唯一ID。

Snapchat API仅允许您访问用户的显示名称和一些“ externalId”,但我不能保证不会更改。因此,我对Snapchat发行给我的JWT令牌进行了解码,这挑战了我对JWT令牌如何工作的理解。当我在http://jwt.io解码令牌时,我看到有效载荷为空,但是令牌在调用https://kit.snapchat.com/v1/me端点时有效。 snapchat服务器如何识别我是谁?我一直有一个理解,即JWT必须包含诸如sub之类的声明来标识用户。然后,服务器可以使用该信息来知道我是谁。

在这种情况下,我的JWT有效负载为空,但是上述端点仍返回我的用户数据。这是怎么回事当我的JWT令牌有一个空的有效负载时,服务器如何知道我是谁?对我来说,他们必须在服务器上存储我的JWT令牌的副本,这似乎是使用JWT令牌的不正确方法。也许我的理解是完全错误的。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

JWS的有效负载(签名令牌)可以通过其他方式分离并传输给听众。

此功能在规范的Appendix F中进行了描述。

在JWS紧凑序列化模式(最常见的格式)下,令牌看起来像THE_HEADER.THE_PAYLOAD.THE_SIGNATURE。对于分离的有效负载,其相同之处在于THE_PAYLOAD是一个空字符串:THE_HEADER..THE_SIGNATURE

签名的验证与附加的有效负载相同。接收者应该已经收到有效载荷,并且必须重新创建完整的输入,即THE_HEADER.THE_PAYLOAD

关于通过snapshat执行的标识,可以在令牌(令牌的第一部分)的标头参数中设置对分离的有效负载的引用,以允许Snapchat完全验证令牌。