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

时间:2019-01-16 03:31:43

标签: java login single-sign-on logout forgerock

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

登录行为:

  1. 用户登录 app1 并开始在其中执行操作
  2. 打开新的标签/窗口匹配URL app2 网址。

因此,他现在不必再为 app2 要求登录信息,他应该直接进入app2的主页。对? 但是,同样发生这种情况的是,点击app2会如何将信息返回给用户已登录 app1 的app2?是通过浏览器的Cookie读取还是该系统/计算机的登录用户? 如果是,我们如何读取已登录用户,以及如果应用程序对外公开给互联网用户该怎么办?互联网用户可以访问吗?在这种情况下,登录用户的阅读可能没有意义,并且我们的某些应用程序已暴露于Internet。

注销行为

如果用户已经完成了在 app1 上的工作,并单击了注销,但是他正处于app2的工作中(例如表单提交或任何多步活动),也将其从app2中注销对他来说将是不公平的,因为他可能会失去迄今为止的工作。 但这是预期的工作方式吗?

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

1 个答案:

答案 0 :(得分:0)

经过大量研究,最终我发现:

登录行为:

对!如果用户登录到app1,然后在相同浏览器(非私有模式)的另一个标签/窗口中点击了app2的网址,则该用户应该已经登录了app2。 app2不需要单独的登录。

app2如何知道要登录的用户?

这是通过与SSO集成的所有应用通过cookie读取来完成的。 SSO实施将在用户的浏览器窗口中为特定域设置Cookie,该Cookie可供应用程序使用。该cookie将告诉应用程序哪个用户已登录。现在,应用程序知道谁是经过身份验证的用户,并且应用程序可以执行其特定的操作,例如检查授权和其他常用的东西。但是,如果用户对app1 chrome和app2 firefox使用不同的浏览器,则由于无法在此情况下为app2共享cookie,因此用户必须经过身份验证过程。无论应用程序是否暴露于互联网,这种行为都将保持不变。

注销行为:

人们可以选择不同的口味。没有硬性规定。如果您想从一个应用程序注销也应该暗示从所有其他应用程序注销,那么可以的。一种方法是在所有请求中的浏览器cookie中传递SSO实现设置的“令牌” 。如果在应用程序端收到有效令牌,则执行该请求,否则将其注销。

如果在注销一个应用程序的同时运行其他应用程序也没问题,那么您无需在每个请求中传递令牌,并且注销仅应在应用程序级别进行。请求SSO注销。