首页 > 编程知识 正文

sso单点登录token实现(单点登录如何实现)

时间:2023-05-06 20:49:50 阅读:95614 作者:2248

单点登录和权限,我很久以前写过,都很简单,所以今天具体谈谈,进入下一步

1、web单一系统APP应用

早期开发的web APP应用程序是将所有包合并成一个war包放入tomcat容器中执行的。 所有功能、所有业务、后台管理和门户界面都由这一个war支持。 这种单一的APP装置也被称为巨石APP装置。 因为扩展和分割非常困难。

在巨石APP下,用户登录和权限非常简单,用户登录成功后,将相关信息放入会话,HTTP维护该会话,并在每次用户请求服务时验证该会话即可。 大致可以用下图表示。

如上图所示,这个会话是一个会话,保持着用户的状态。 所谓的HTTP有状态协议,经常在浏览器中查看JSESSIONID。 这就是维持这种关系的key

据此,每次请求时用拦截器拦截当前用户的登录状态和批准状态即可。

引入集群概念后,可以将该单APP分别部署到3台tomcat上,使用nginx实现反向代理。 在这种情况下,这三个tomcat无法共享此会话,从而导致用户信息丢失。 (这里不推荐不考虑粘性和非粘性的session。 )

2、用多APP构建的分布式集群系统

从巨石应用的发展到现在,我们有SOA,有微服务。 其道理都一样。 都可以将业务分割分解为多个系统,多个系统完全解除结合,分别部署在不同的服务器上。 项目之间通过rpc或rest风格实现相互通信。 举个栗子:

order.abc.com

cart.abc.com

服务. ABC.com

既然有这样三个系统,并且位于不同的第2级域名下,那么用户每次登录不同的系统时都会登录吗? 这不合理。 我们不能因为系统的复杂性而让用户变得复杂。 对使用者来说,一套产品是完整的APP。 登录一次就可以了,不需要多次登录。

如上所述,session不适用,但在这个地方引入单点登录,维持用户和服务端之间的无状态协议,生成token,使用token这个令牌在各个系统之间来回移动。

那么,把这个token放在浏览器的cookie里就行了。 到期时间必须与redis的expire一致。 如果需要,只要用户登录一次,就可以在任何系统上使用。 然后,当用户帐户在其他位置登录时,会推出上一个用户。

(需要注意的是,这个cookie需要设置辅助域名作为第一个cookie,如果要穿越域,则需要设置第三方cookie,或者使用JWT进行,但这一点就不多说了)

3、单点登录SSO (单点登录) ) )。

对于分布式系统,需要一个单点登录系统,如sso,其域名可以独立部署在一个web服务器(如login.abc.com)中。 所有其他web服务的登录都可以使用此sso登录,APP也可以调用登录

如果所有token都由sso管理,则该token可以通过浏览器保存到第一个cookie或第三方。 也可以在ios和安卓上保存。 每次访问服务时放入headers,让中心进行验证即可。 此外,该token还可以扩展以创建权限。

4、手机方面的单点登录

这就像微信一样,很容易理解,同一用户只能在同一手机端登录。 这可以通过token缓存实现,如果应用上述拦截器,就不用写很多代码就可以实现。

五、代码的实现和部署

关于这个,在这个时间写一个简单的小项目,放在github上开源。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。