ForgeRock(用于 SSO)登录和注销的预期行为

Expected Behaviour of ForgeRock (for SSO) login and logout

我的公司已经使用 ForgeRock 实现了 SSO。我们已经集成了 两个 应用程序(比如 app1 和 app2)登录,并且应用程序的数量将会增长。对预期工作的查询:

登录行为:

  1. 用户登录 app1 并开始在其中执行某些操作,
  2. 打开新的 tab/window 点击 URL app2 url.

所以现在他不需要再次为 app2 请求登录凭据,他应该直接登陆到 app2 的主页。正确的? 但是对于这种情况,点击 app2 如何将用户登录 app1 的信息传递回 app2?是通过浏览器的 cookie 读取还是那个 system/computer 的登录用户? 如果是,我们如何读取登录用户以及如果应用程序在外部暴露给互联网用户怎么办?网民可以上网吗?在这种情况下,读取登录用户可能没有意义,我们的一些应用程序会暴露在互联网上。

注销行为:

如果用户完成了他在 app1 上的工作并单击了注销,但他正在 app2 中工作(例如,表单提交或任何多步骤活动),则记录他退出 app2 对他也不公平,因为他可能会失去他到目前为止所做的一切。 但这是预期的工作方式吗?

从一个应用程序中注销用户应该让他从与同一 SSO 集成的所有应用程序中注销吗? 如果是这样,那就意味着不要在应用程序端使会话无效,同时向 SSO 服务器发送注销请求。 但这也意味着所有应用程序都需要检查每个请求是否用户已注销?我认为这要求太高了。 对于已经登录用户的应用程序发出的每个请求,我还需要检查他是否已退出 SSO?它应该如何工作?

经过大量研究,我终于弄明白了:

登录行为:

对了!如果用户登录 app1,然后在 相同浏览器(非隐私模式) 的另一个 tab/window 中点击 app2 的 url,那么他应该已经登录在应用程序 2 中。 app2 不需要单独登录。

app2如何知道登录哪个用户?

这是通过与 SSO 集成的所有应用读取 cookie 来完成的。 SSO 实施将在用户浏览器 window 中为应用程序可用的特定域设置 cookie。这个 cookie 会告诉应用程序哪个用户已经登录。现在应用程序知道谁是经过身份验证的用户,应用程序可以做他们特定的事情,比如检查授权和其他常见的事情。但是,如果用户使用 不同的浏览器 ,例如 app1 chrome 和 app2 firefox,那么在这种情况下,app2 无法共享 cookie,用户必须再次通过身份验证过程。无论应用程序是否暴露在互联网上,此行为都将保持不变。

注销行为:

有多种口味可供选择。没有硬性规定。如果你想从一个应用程序注销也应该意味着从所有其他应用程序注销那么是的,它可以完成。一种方法是在所有请求的浏览器 cookie 中传递由 SSO 实现设置的 "token"。如果在应用程序端收到有效令牌,则满足该请求,否则将他注销。

此外,如果在一个应用程序已注销时您可以让其他应用程序正常工作,那么您不需要在每个请求中传递令牌,并且 注销应该只在应用程序级别完成。 无需请求 SSO 进行注销。