JWT:多客户端身份验证服务器,停止在不同客户端之间使用 jwt?
Posted
技术标签:
【中文标题】JWT:多客户端身份验证服务器,停止在不同客户端之间使用 jwt?【英文标题】:JWT: Multi client auth server, stopping the use of jwt's between different clients? 【发布时间】:2019-10-27 08:13:12 【问题描述】:谁能帮忙?
我有一个多客户端身份验证服务器,它的工作是为特定客户端(客户端是服务或应用程序)创建 JWT。每个客户端(服务)都有一个clientID和ClientSecret。
身份验证服务器使用相同的令牌密钥对所有 JWT 进行签名。例如,我想停止在系统 B 上从系统 A 使用 JWT。从技术上讲,所有 JWT 都使用相同的密钥进行签名,因此这是一个潜在问题。
我想知道我是否可以利用受众和发行人?
发行者将是身份验证服务器,对吗?因此,对于两个不同的令牌,发行者将是相同的 - 所以这可能不是我想要的。
另一件事是观众,我可以用它来识别 JWT 属于谁 - 即.. 系统 A 或系统 B - 这意味着我可以知道天气一个试图在另一个上使用并拒绝它。
我不知道这是否是最好的方法?此外,观众的格式是一个字符串,但通常包含系统的 url - 这是正确的吗?
实际上,我正计划使用受众来区分访问令牌和刷新令牌。
我对实现这一点的最佳方式有点困惑。
我的意思是,我可以继续创建自己的自定义声明,但我会考虑使用内置声明 - 如果这是正确使用的话。
有人有这方面的经验吗?
所以总结一下。
如果将令牌提供给系统 A 或系统 B,它应该能够被识别
如果一个令牌是访问令牌或刷新令牌,它也应该是有目的的。
有什么想法吗?
提前感谢您提供任何见解。
【问题讨论】:
【参考方案1】:我会为此使用受众 (aud
) 作为目标系统。它可以是任何字符串,规范并不关心它是否是 URL。您只希望服务器强制匹配受众(大多数库默认执行此操作,但请查看您的文档)。
对于刷新与访问令牌,您有几个选择。
1) 使用发行者。同样,这只是一个字符串,因此它可以是主机 +“访问”或主机 +“刷新”,并确保验证发行者符合您的预期。
2) 使用自定义声明。 JWT 可以包含任何类型的 JSON,因此可以使用“访问”与“刷新”创建“类型”声明或类似声明(或仅将其用于“访问”令牌)。您必须手动验证
3) 使用不同的密钥签署刷新和访问令牌。这意味着您将无法验证错误类型令牌的签名,即使在您进行声明检查之前也是如此。
可能还有比这更多的选择。
【讨论】:
以上是关于JWT:多客户端身份验证服务器,停止在不同客户端之间使用 jwt?的主要内容,如果未能解决你的问题,请参考以下文章