我正在开发一个实现登录系统的 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)?
如果您对我的方法有任何见解或建议,我将不胜感激!
我的目标是满足 2 个要求:
首选解决方案
理想情况下,使用 OAuth 2.0 和 OpenID Connect 等标准协议,其中授权服务器提供单点登录功能来实现上述功能。
替代解决方案
另一种选择是围绕一次性使用令牌(通常称为随机数)设计解决方案。这些 URL 可以安全地传递,因为它们的生命周期很短并且只能使用一次。解决方案可能如下所示:
A站
B 站
此类解决方案通常需要您更改站点 B 的令牌发行方式。例如,如果站点 B 使用身份系统,您可以将基于随机数的身份验证作为插件实现。