amazon-cognito - 使用外部身份提供商静默登录 AWS Cognito
问题描述
我们使用 AWS Cognito 作为 AWS Amplify 随附的用户管理平台,用于我们的新项目。但我们也有 KeyCloak 作为组织的 SSO。因此,我们通过 OIDC 将 KeyCloak 作为外部 IdP 连接到 Cognito,以允许用户使用组织的 SSO 登录到我们的新系统。
我们试图实现的是当用户已经通过组织的 SSO 登录时。当他们无缝访问这个新站点时,他们应该处于登录状态。
但是,Auth.currentSession()
仅识别来自 Cognito 的登录会话,这意味着它不会识别用户已经登录到其他网站上的 KeyCloak。我提出的解决方案是尝试使用silentLogin
from oidc-client来检查用户访问时的登录状态。静默登录运行 iframe 以向身份验证链接发送请求。它首先将请求发送到https://xxxxx.auth.ap-southeast-2.amazoncognito.com/oauth2/authorize以prompt=none
避免显示 UI。但是当请求被重定向到 KeyCloak 时,它不会发送prompt=none
which 使它尝试加载登录 UI 并导致silentLogin
失败。
所以我想知道是否有任何方法可以编辑从 Cognito 到 KeyCloak 的重定向 url。或者可以提出任何实现我的目标的解决方案。
谢谢
解决方案
预期的行为应该是这样的——一些 UX 利益相关者可能不喜欢第二次重定向或认为它是无缝的,但它必须像这样发生:
- 用户通过 App A 登录并在浏览器中有 Keycloak IDP cookie
- 导航到 App B 会导致通过 Cognito 到 Keycloak 的顶级重定向,但由于 IDP cookie 没有身份验证提示。另请注意,这仅在存在用作用户手势的顶级浏览器重定向时才有效。
避免使用 prompt=none 技术,该技术现在已被弃用:
- 您将无法将消息从 Cognito 更改为 Keycloak,因为标准不允许这样做
- Cognito 从未支持 prompt=none
- Safari 浏览器将丢弃此类请求的 SSO cookie
相反,我会仔细查看 App B 重定向的 HTTP 消息:
- 是否发送了 Keycloak IDP cookie(在几个浏览器上进行测试并查看丢弃 cookie 的原因)
- 如果发送了 cookie,那么消息中是否有任何内容,例如 prompt=login 或可能需要每个应用程序进行身份验证的 Keycloak 会话设置?
推荐阅读
- python - 从弹性搜索supervisord文件中获取端口号
- python - 如何从 matplotlib 中的另一个散点图中复制散点图大小比例?
- prolog - 要转换列表,Prolog
- excel - 搜索整个工作簿 VBA
- flutter - 使用 Flutter intl 扩展在 Flutter 中组织 .arb 文件
- c - 在C中检查数字是否是阿姆斯壮数
- python - Python在矩阵动态规划中找到最大的正方形
- android - 以编程方式更新自定义视图自定义属性
- pandas - 使用 pandas.cut 对连续变量进行分箱
- python - sqlalchemy.exc.ArgumentError:无法加载插件:sqlalchemy.dialects:无