JWT 验证如何区分令牌类型之间的差异?

How does validation of JWT distinguish difference between token types?

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

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

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

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

将 ID 令牌与访问令牌分开的一种方法是查看 JWT-header 中的 typ 声明。 =12=]

一些IdentityProvider使用at+jwt typ来表示token是遵循一定规则的access token。但这不是强制性的。

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

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

您可以阅读有关访问令牌标准的更多信息here and here

Refreshreference 标记通常不是 JWT 格式,相反它们更像是一个随机字符串。