单点登录

单系统登录

多系统登录

什么是单点登录?

SSO是指在多系统应用中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,

包括单点登录与单点注销两部分。跟redis做的tomcat集群的session共享不是一回事。

单点登录原理

相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。

原理简图

场景:你去爬长城,开始的时候没买票,守门的大爷没让你进,于是你找卖票的买票。买完票之后,再去找守门的大爷,他拿着你的票问卖票的:“这个票是真的吗?”,卖票的说,是真的,于是才放你进门。

实现过程简述

sso采用客户端/服务端架构,我们先看sso-client与sso-server要实现的功能,分以下两部分。

第一,sso-client部分

拦截子系统未登录用户请求,跳转至sso认证中心;

接收并存储sso-server认证中心发送的令牌;

与sso-server通信,校验令牌的有效性;

建立局部会话;

拦截用户注销请求,向sso-server认证中心发送注销请求;

接收sso认证中心发出的注销请求,销毁局部会话。

第二,sso-server部分

验证用户的登录信息;

创建全局会话;

创建授权令牌;

与sso-client通信发送令牌;

校验sso-client令牌有效性;

系统注册;

接收sso-client注销请求发给sso-server,注销所有会话。

备注:

java拦截请求的方式有servlet、filter、intrecepter三种方式,我们采用filter。

最佳实践

实际开发中,使用统一认证中心方案,其中CAS就是基于该方案的开源单点登录系统,

下载地址:https://github.com/apereo/cas/releases

1.CAS 具有以下特点:

①开源的企业级单点登录解决方案。

②CAS Server 为需要独立部署的 Web 应用,例如为cas server。

③CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl,例如为app1和app2。部署过程参考:https://blog.csdn.net/qq_24708791/article/details/78535565

https://blog.csdn.net/postnull/article/details/69262537

2.部署结构

单点登录涉及sso认证中心与众子系统(例如www.126.com, www.163.com, epay.163.com都是子系统),子系统必须集成sso的客户端,sso认证中心则是sso服务端,整个单点登录过程实质是sso客户端与服务端通信的过程。部署图如下:

3.如何部署?

在客户端程序中引入相应的jar包,并修改web.xml。

4.测试

打开app1 url —-> 跳转cas server 验证 —-> 登录成功app1的应用 —->

打开app2 url —-> 显示app2 应用 —-> 注销cas server —->

打开app1/app2 url —-> 重新跳转到cas server 验证.

总结

从结构上看,SSO包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。单点登录涉及sso认证中心与众子系统,子系统与sso认证中心需要通信以交换令牌、校验令牌及发起注销请求,sso认证中心则是sso服务端,整个单点登录过程实质是sso客户端与服务端通信的过程。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值