单点登录落地实现技术
单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要 登录一次 就可以访问所有相互信任的应用系统(一次访问,到处运行)。
单点登陆通俗的讲就是要解决如何产生和存储那个信任,以及其他系统如何验证这个信任的有效性;
单点登录的要点:1.存储信任;2.服务器生产以及验证信任;3.拿到之后服务器再次验证;
SSO原理
SSO体系中的角色
- User(多个)
- Web应用(多个)
- SSO认证中心(1个)
SSO实现模式的原则
- 所有的认证登录都在SSO认证中心进行;
- SSO认证中心通过一些方法来告诉Web应用当前访问用户究竟是不是已通过认证的用户;
- SSO 认证中心和所有的 Web 应用建立一种信任关系,也就是说 web 应用必须信任认证中心。(单点信任)
SSO主要实现方式
共享cookies
基于共享同域的cookie是Web刚开始阶段时使用的一种方式,它利用浏览同域名之间自动传递cookies机制,实现两个域名之间系统令牌 传递问题;另外,关于跨域问题,虽然 cookies本身不跨域,但可以利用它实现跨域的SSO。如:代理、暴露 SSO 令牌值等。
Broker-based(基于经纪人)
在 这种解决方案中,有一个自动地为不同的应用程序认证用户身份的代理程序。这个代理程序需要设计有不同的功能。比如,它可以使用口令表或加密密钥来自动地将 认证的负担从用户移开。代理人被放在服务器上面,在服务器的认证系统和客户端认证方法之间充当一个 “ 翻译 “。例如 SSH 等。
Agent-based(基于代理人)
在 这种解决方案中,有一个自动地为不同的应用程序认证用户身份的代理程序。这个代理程序需要设计有不同的功能。比如,它可以使用口令表或加密密钥来自动地将 认证的负担从用户移开。代理人被放在服务器上面,在服务器的认证系统和客户端认证方法之间充当一个 “ 翻译 “。例如 SSH 等。
Token-based
例如 SecureID,WebID,现在被广泛使用的口令认证,比如 FTP 、邮件服务器的登录认证,这是一种简单易用的方式,实现一个口令在多种应用当中使用。
基于网关
基于 SAML
SAML(Security Assertion Markup Language ,安全断言标记语言)的出现大大简化了 SSO ,并被 OASIS 批准为 SSO 的执行标准 。开源组织 OpenSAML 实现了 SAML 规范。
主要常见技术
CAS(单点登录)
OAuth2(第三方登录授权:QQ登录)
JWT(客户端token:原生)
安全控制框架:
- Spring-Security
- Shiro
CAS(单点登录)
简介
CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。
结构体系
主要特性
- 开源、多协议的SSO解决方案;Protocols :Custom、Protocol、CAS、OAuth、OpenID、RESTful API、SAML1.1、SAML2.0 等;
- 支持多种认证机制:Active Directory、JAAS、JDBC、LDAP、X.509 Certificates 等;
- 安全策略:使用票据( Ticket )来实现支持的认证协议;
- 支持授权:可以决定哪些服务可以请求和验证服务票据(Service Ticket);
- 提 供高可用性:通过把认证过的状态数据存储在 TicketRegistry 组件中,这些组件有很多支持分布式环境的实现, 如: BerkleyDB、Default、EhcacheTicketRegistry、JDBCTicketRegistry、JBOSS TreeCache、JpaTicketRegistry、MemcacheTicketRegistry 等;
- 支持多种客户端: Java 、 .Net 、 PHP 、 Perl 、 Apache, uPortal 等。
解决问题
多个系统只需要登录一次,无需重复登录
原理
授权服务器,被授权客户端CS架构
- 授权服务器保存了全局的一份session,客户端(多个)格子保存自己的session;
- 客户端登录时判断自己的session是否已登录,若未登录,则(告诉浏览器)重定向到授权服务器;(参数带上自己的地址,用于回调)
- 授权服务器判断全局的session是否已登录,若未登录则定向到登录页面,提示用户登录,登录成功后,授权服务器重定向到客户端(参数带上ticket[一个凭证号]);
- 客户端收到ticket后,请求服务器获取用户信息;
- 服务器同意客户端授权后,服务端保存用户信息至全局session,客户端将用户保存至本地session;
- 默认不支持http请求,仅支持https,生成整数keytools;
缺点:CAS单点登录技术适用于传统应用的场景比较多,官方示例也是以JavaWeb为准,对微服务化应用,前后端分离应用,支持性较差。
参考地址:
- https://juejin.cn/post/6844904155161559048
- https://juejin.cn/post/6844904038555729927
- https://blog.csdn.net/u012702547/article/details/105699777
- https://www.toutiao.com/i6765428664424202763/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1×tamp=1609846862&app=news_article&utm_source=weixin&utm_medium=toutiao_ios&use_new_style=1&req_id=20210105194102010130036140440A5C55&group_id=6765428664424202763