我正在致力于将 AWS Cognito 与我的前端 Web 应用程序集成,使用 Google Workspace 作为 SAML Idp。我正在使用带有 PKCE 的身份验证代码流程,并且我能够成功身份验证并检索我的 id + 访问 + 刷新令牌。
我遇到的问题是,当我到达
<user-pool-domain>/logout
端点(使用 client_id
和 logout_uri
)时,注销流程似乎成功并重定向到我的注销回调。但是,如果我随后尝试再次登录,它会绕过 Google Workspace 并立即成功进行身份验证。因此,无论出于何种原因,注销流程都无法正确结束用户与 Google Workspace 的会话...
如果我尝试
<user-pool-domain>/saml2/logout
(再次传入 client_id
和 logout_uri
作为 url 参数),那么我会得到一个错误页面,仅显示“请求的页面遇到错误”
我已在 Cognito 中的 Idp 配置下启用了
Signout flow
。
我是否缺少额外的配置?有什么想法如何调试这个吗?
花了周末的时间研究这个问题后,我找到了一个可以接受的解决方案:
/oauth2/revoke
向 AWS Cognito 发送请求以撤销用户的令牌(请参阅 https://docs.aws.amazon.com/cognito/latest/developerguide/replication-endpoint.html )/logout
(请参阅 https://docs.aws.amazon.com/cognito/latest/developerguide/logout-endpoint.html)虽然这不会使用户退出 Google(因为 Google 不支持 SAML2 单点注销流程...),但它会正确结束 AWS Cognito 与 Google 的会话,这样如果您注销 Google,然后尝试再次登录通过重定向到 AWS Cognito
/login
端点,用户将被迫通过 Google 重新进行身份验证!
为什么 AWS Cognito 在调用标准
/logout
端点时还没有撤销用户的令牌,我不知道...似乎是 AWS 方面的错误...如果这是预期的行为,则可能应该在某处记录。