在OpenID Connect Session(问题时的草案 23)中,它指出
在注销端点处,OP 应该询问最终用户是否也想注销 OP。如果最终用户说“是”,那么 OP 必须注销最终用户。
因此,如果用户单击“是”,那么我们仍然处于 OP 领域,我们或许可以将它们带回欢迎屏幕。但是,如果用户单击“否”,则未定义行为。
我猜它会是这样的:
- 设为
state
用户在按下 RP 应用程序上的注销按钮之前所访问的最后一个已知页面。 - RP 的注销将使用令牌撤销端点销毁用户在 OP 上为 RP 拥有的任何凭据(如果 RP 需要重新同意)
- 然后它将重定向到 end_session_endpoint 传递
state
- 一旦到达 OP end_session_endpoint 用户碰巧选择“否”
- 那么用户没有从 OP 中注销。
- 然后用户被重定向回 post_logout_redirect_uri 并带有已通过的状态。
- 然后,RP 上的 post_redirect_uri 会将用户重定向回具有状态的 authentication_endpoint
- 因为用户仍然在 OP 中登录并且假设仍然存在同意,它应该将用户重定向回 RP 回调,其状态就像用户没有离开应用程序一样,但现在有一组全新的 id_token
为防止重定向循环,RP 应确保注销不需要有效身份,以防万一不再存在。否则会有一个重定向循环。