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
Refresh 和 reference 标记通常不是 JWT 格式,相反它们更像是一个随机字符串。
我正在尝试构建自定义 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
Refresh 和 reference 标记通常不是 JWT 格式,相反它们更像是一个随机字符串。