首页 > 解决方案 > JWT 的验证如何区分令牌类型之间的差异?

问题描述

我正在构建一个自定义 Oauth2/OpenID 库,并且正在考虑验证令牌。

我只对所有令牌类型(访问、刷新和 ID)使用 JWT,但我在想;资源服务器将如何验证 ex。访问令牌,并确保仅接受来自发行者的访问令牌,而不是刷新或 ID 令牌,因为它们也是有效的,因此它们来自同一个受信任的发行者?

同样,如何确保通过刷新授权发送的令牌不仅仅是一个有效的访问令牌,因为它也将被验证......

我知道一个简单的解决方法就是提出一个自定义声明,描述它是什么类型的令牌,或者为每个令牌使用不同的签名,但是有没有“正确”的方法呢?

标签: validationoauth-2.0tokenopenid

解决方案


将 ID 令牌与 Access 令牌分开的一种方法是查看JWT-header中的typ声明。

一些 IdentityProviders 使用 at+jwt 类型来指示令牌是遵循某些规则的访问令牌。但这不是必须遵循的。

{
  "typ":"at+JWT",
  "alg":"RS256",
  "kid":"RjEwOwOA"
}

否则,他们可以查看令牌内的声明以确定它是访问令牌还是 ID 令牌。令牌签名本身不能用于确定令牌类型。

您可以在此处此处阅读有关访问令牌标准的更多信息

刷新引用令牌通常不是 JWT 格式,而是更像是一个随机字符串。


推荐阅读