在 Angular 应用程序之间使用令牌身份验证进行重定向:优点和缺点?

问题描述 投票:0回答:1

我正在开发一个实现登录系统的 Angular 应用程序(站点 A)。 用户登录后,我想将他们重定向到另一个 Angular 应用程序(站点 B),同时传递站点 A 生成的身份验证令牌。 目标是让站点 B 识别用户已登录,而不需要他们再次登录。

我的方法:

成功登录站点 A 后,我生成一个 JWT 令牌。 我使用令牌作为 URL 参数将用户重定向到站点 B(例如,https://siteB.com?token=YOUR_TOKEN)。 在站点 B 上,我从 URL 中提取令牌并验证它。

优点:

无缝的用户体验:用户无需额外登录即可在应用程序之间移动。 简单实现:通过 URL 参数发送令牌非常简单。

缺点: 安全风险:在 URL 中发送令牌可能会使它们面临浏览器历史记录或服务器日志的潜在拦截。 令牌过期:管理令牌有效性和刷新令牌可能会增加复杂性。

问题:

通过 URL 参数发送令牌的安全隐患是什么?如何降低风险?

通过对站点 A 进行 API 调用来验证站点 B 上的令牌是否更好,还是可以在本地完成?

是否有其他方法可以在单独的 Angular 应用程序之间实现单点登录 (SSO)?

如果您对我的方法有任何见解或建议,我将不胜感激!

authentication security single-sign-on
1个回答
0
投票

我的目标是满足 2 个要求:

  • 避免在 URL 中传递令牌,这是一种糟糕的安全做法
  • 每个应用程序都会获得自己的数据访问令牌,该令牌可以具有不同的权限

首选解决方案

理想情况下,使用 OAuth 2.0 和 OpenID Connect 等标准协议,其中授权服务器提供单点登录功能来实现上述功能。

替代解决方案

另一种选择是围绕一次性使用令牌(通常称为随机数)设计解决方案。这些 URL 可以安全地传递,因为它们的生命周期很短并且只能使用一次。解决方案可能如下所示:

A站

  • 调用实用程序 API 并发送其 ID 令牌作为证明
  • 实用程序 API 验证 ID 令牌,发出随机数(如 UUID)并写入包含其他详细信息的数据库行,如 1 分钟到期时间和 ID 令牌中的用户 ID
  • 站点 A 然后调用 https://siteb.com/?nonce=FH23EU94HURT...

B 站

  • 接收随机数并调用实用程序 API 进行内省
  • 实用程序 API 在其数据库中查找随机数并检查其是否已过期,然后为具有相同用户身份但可能不同数据权限的站点 B 颁发令牌
  • 实用程序 API 然后删除其数据库行

此类解决方案通常需要您更改站点 B 的令牌发行方式。例如,如果站点 B 使用身份系统,您可以将基于随机数的身份验证作为插件实现。

© www.soinside.com 2019 - 2024. All rights reserved.