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



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

SSO的实现:

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

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

问题是,如果用户想注销,他/她的所有访问令牌都应该过期,但它们不会存储在数据库中,只存储在每个系统的客户端中,我只能撤销刷新令牌,这样令牌在过期时间过去之前一直有效,在过期时间到来之前可以使用,这意味着用户仍然在登录。

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

这是我在这里的第一个问题,我希望我已经正确地解释了这个问题。我将等待你的善意回应。

最好使用cookie来存储您的代币。当用户已注销时。只需清除cookie并返回即可。现在,用户没有访问令牌,也不会进行身份验证。

注意:一定要制作一个安全的cookie。

最新更新