从SSO中的多个系统注销(单点登录)

时间:2019-02-10 05:42:21

标签: node.js express jwt

我正在为我们的系统实施SSO,以集中用户身份验证和授权,在该系统中,我们将拥有一个SSO服务器(用户和会话管理器),用户可以使用他/她的凭据进行登录,然后可以访问所有其他关联的系统。

SSO的实现:

  1. 首先,用户将获得会话(访问令牌+刷新令牌) 并将它们存储在客户端。
  2. 如果他重定向 到其他系统,SSO将生成一个(一次性令牌) 该系统的服务器
  3. 然后在系统上加载(一次使用 令牌)将与一对访问令牌和刷新交换 令牌,它们将存储在该特定客户端 系统
  4. 在每台服务器上请求会话(访问令牌+ 刷新令牌)将通过请求标头发送,以便 系统的服务器可以从SSO请求此用户的授权 服务器。

访问令牌的到期时间比刷新令牌少,并且它不存储在SSO服务器中,仅检查其签名是否获得授权,但存储刷新令牌,以便我们以后可以在需要时撤销它。 (由于我们稍后会收到大量授权请求,所以我不想存储访问令牌。)

问题是,如果用户要注销,则他/她的所有访问令牌都应该过期,但它们不会存储在数据库中,而仅存储在每个系统的客户端中,我只能撤消刷新令牌,因此令牌仍然存在有效期,直到到期时间过去,直到可以使用为止,这表示用户仍在登录。

我使用JWT进行令牌生成和验证。

这是我在这里的第一个问题,希望我已正确解释了该问题。 我将等待您的友好答复。

1 个答案:

答案 0 :(得分:0)

最好使用Cookie来存储令牌。用户注销后。只需清除cookie并返回即可。现在,用户没有访问令牌,因此不会通过身份验证。

注意:请确保制作安全的cookie。