我正在考虑创建一个位于 Cognito 之上的身份验证服务器,用于管理分布在不同域中的各种应用程序的用户会话。目标是单点登录体验,这样如果您通过域 A 登录,域 B 和 C 将共享同一会话。
这可以通过重定向到 Auth 服务器进行登录来完成,该服务器又重定向到 Cognito。身份验证成功后,Cognito 会重定向到身份验证服务器,该服务器能够抓取刷新令牌并将其粘贴到安全的 httponly cookie 中。最后,身份验证服务器重定向到请求使用访问权限和 ID 令牌(如果适用)登录的域。
经过身份验证后,来自任何域的请求(通过 COR 强制)可用于获取服务器端 API 的访问令牌、获取用户信息、租户信息等,而无需显式向身份验证服务器发送任何令牌本身。只要刷新令牌有效,这就允许从同一浏览器中的所有域进行静默登录。
Cognito 使用密钥对 JWT 进行签名,因此伪造 JWT 非常困难。
这是否是一种处理访问令牌的安全方法,同时提供跨多个域的无缝 SSO 体验?对于这样的架构,我应该注意什么安全问题吗?有更好的方法吗?
谢谢!
Cookie 安全:
Secure
标志和正确 SameSite 设置的安全 httponly cookie。令牌验证:
CORS:
令牌过期和刷新:
错误处理和日志记录:
OAuth 2.0 和 OIDC:
联合身份和 SSO 提供商:
多重身份验证 (MFA):
持续监控和安全审计:
总而言之,虽然您的架构可以提供无缝 SSO,但请确保实施这些安全措施,并考虑利用既定标准和托管解决方案来增强安全性、可扩展性和可靠性。