【发布时间】:2021-10-21 05:53:28
【问题描述】:
我和我的团队一直在为我们的客户开发一个使用 JSON Web 令牌进行身份验证和授权的 Web 应用程序。使用 Azure AD 作为我们的身份提供者,我们验证用户的身份并生成带有用户权限的签名 JWT。然后,JWT 将包含在对 API 的所有后续请求的授权标头中。就 JWT 而言,这是相当标准的东西。
我们现在被要求提供从另一个第三方 Web 应用程序直接链接到我们的系统的功能,而无需强制用户重新进行身份验证。我正在尝试弄清楚是否有一种方法可以做到这一点而不会造成巨大的安全漏洞。
我想象这项工作的方式是在我们的系统中实现一个用于编程身份验证的端点,该端点接受带有 API 密钥和用户 ID 或电子邮件地址的加密签名有效负载。第三方系统将有一个私钥用于签署有效载荷,我们将有一个公共密钥来验证签名。如果请求是合法的,我们会为指定的用户颁发一个令牌,他们可以使用它来链接到他们喜欢的任何内容。
我已经被至少一个人大喊大叫,从安全的角度来看,这完全是个玩笑,因为除其他外,它完全绕过了 AAD 身份验证。我相信有问题的第三方系统确实使用 AAD 进行身份验证,但这并不是真正相关的,因为无论他们是否对用户进行了身份验证,我们都隐含地信任他们。无论哪种方式,我都同意他的观点。
我不是安全专家,我不声称知道是否有适当的方法来做这种事情,但从我的角度来看,它并没有比其他任何安全性低多少使用 JWT 的身份验证和授权机制。真的吗?我们是不是连尝试都疯了?有没有更安全的方法?我应该知道哪些我显然不知道的信息?
提前感谢您的帮助。至少我希望这能激发一些有益的对话。
【问题讨论】:
标签: authentication azure-active-directory jwt authorization