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

Bra*_*rad 5 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 令牌的不正确方法。也许我的理解是非常错误的。有什么想法吗?

Flo*_*lli 4

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

该功能在规范的附录 F中进行了描述。

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

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

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