【问题标题】:Securely using JSON web tokens to programmatically authenticate a user from one system into another安全地使用 JSON Web 令牌以编程方式将用户从一个系统验证到另一个系统
【发布时间】: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


    【解决方案1】:

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

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

    documentation 中了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2011-03-04
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多