首页 > 解决方案 > 安全地使用 JSON Web 令牌以编程方式将用户从一个系统验证到另一个系统

问题描述

我和我的团队一直在为我们的客户开发一个使用 JSON Web 令牌进行身份验证和授权的 Web 应用程序。使用 Azure AD 作为我们的身份提供者,我们验证用户的身份并生成带有用户权限的签名 JWT。然后,JWT 将包含在对 API 的所有后续请求的授权标头中。就 JWT 而言,相当标准的东西。

我们现在被要求提供从另一个第三方 Web 应用程序直接链接到我们系统的功能,而无需强制用户重新进行身份验证。我试图弄清楚是否有一种方法可以做到这一点而不会造成巨大的安全漏洞。

我想象这个工作的方式是在我们的系统中实现一个用于编程身份验证的端点,它接受一个带有 API 密钥和用户 ID 或电子邮件地址的加密签名有效负载。第三方系统将有一个私钥用于签署有效载荷,我们将有一个公共密钥来验证签名。如果请求是合法的,我们会为指定的用户颁发一个令牌,他们可以使用它来链接到他们喜欢的任何东西。

我已经被至少一个人大喊大叫,从安全的角度来看,这完全是一个笑话,因为除其他外,它完全绕过了 AAD 身份验证。我相信有问题的第三方系统确实使用 AAD 进行身份验证,但这并不是真正相关的,因为无论他们是否对用户进行了身份验证,我们都隐含地信任他们。无论哪种方式,我都同意他的观点。

我不是安全专家,我不声称知道是否有适当的方法来做这种事情,但从我的角度来看,它似乎并不比任何其他身份验证机制安全得多和使用 JWT 的授权。真的吗?我们是不是连尝试都疯了?有没有更安全的方法?我应该知道哪些我显然不知道的信息?

在此先感谢您的帮助。至少我希望这能激发一些有益的对话。

标签: authenticationazure-active-directoryjwtauthorization

解决方案


单点登录 (SSO) 使用户能够输入他们的凭据一次以登录并建立一个会话,该会话可以在多个应用程序中重复使用,而无需再次进行身份验证。这为用户提供了无缝体验,并减少了重复提示凭据。Azure AD 通过在用户首次进行身份验证时设置会话 cookie 为应用程序提供 SSO 功能。MSAL.js 库允许应用程序以几种方式利用它。

MSAL 依靠会话 cookie 为不同应用程序之间的用户提供 SSO。

在本文档中阅读更多内容。


推荐阅读