单点登录落地实现技术有哪些,有哪些流行的登录方案搭配?

代码狂魔 2019-12-04 13:26:11 ⋅ 675 阅读
原文:https://www.toutiao.com/a6765428664424202763

实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效

性,因此要点也就以下两个:1、存储信任 ;2、服务器生产~验证信任 ;3、拿到服务器再次验证。




单点登录的常见落地实现技术有哪些?

身份认证技术:




1. cas(单点登录)

2. Spring Security OAuth2(第三方登录授权:QQ登陆)

3. jwt (客户端token:原生)

安全控制框架:

1. spring-security

2. shiro:

cas(单点登录)




解决问题:多个系统只需登录一次,无需重复登录

原理:授权服务器,被授权客户端 CS架构

1. 授权服务器(一个)保存了全局的一份session,客户端(多个)各自保存自己的session

2. 客户端登录时判断自己的session是否已登录,若未登录,则(告诉浏览器)重定向到授权服务器

(参数带上自己的地址,用于回调)

3. 授权服务器判断全局的session是否已登录,若未登录则定向到登录页面,提示用户登录,登录成

功后,授权服务器重定向到客户端(参数带上ticket【一个凭证号】)

4. 客户端收到ticket后,请求服务器获取用户信息

5. 服务器同意客户端授权后,服务端保存用户信息至全局session,客户端将用户保存至本地session

6. 默认不支持http请求, 仅支持https 。生成证书 keytools

缺点:cas单点登录技术适用于传统应用的场景比较多, 官方示例也是以javaWeb为准, 对微服务化应

用,前后端分离应用,支持性较差。

oauth2(第三方登录授权)





解决问题:第三方系统访问主系统资源,用户无需将在主系统的账号告知第三方,只需通过主系统的授

权,第三方就可使用主系统的资源

如:APP1需使用微信支付,微信支付会提示用户是否授权:取消,用户授权后,APP1就可使用微信支

付功能了。

OAuth2是用来允许用户授权第三方应用访问他在另一个服务器上的资源的一种协议,它不是用来做单

点登录的,但我们可以利用它来实现单点登录。

原理:主系统,授权系统(给主系统授权用的,也可以跟主系统是同一个系统),第三方系统。

1. 第三方系统需要使用主系统的资源,第三方重定向到授权系统

2. 根据不同的授权方式,授权系统提示用户授权

3. 用户授权后,授权系统返回一个授权凭证(accessToken)给第三方系统【accessToken是有有效

期的】

4. 第三方使用accessToken访问主系统资源【accessToken失效后,第三方需重新请求授权系统,以

获取新的accessToken】

Resource Server: 被授权访问的资源

Authotization Server:OAUTH2认证授权中心

Resource owner : 资源拥有者

Client:使用API的客户端(如Android 、IOS、web app)


jwt (客户端token)


难度较大,需要你了解很多协议~

Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC

7519).

该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用

来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增

加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

基于JWT认证协议,自己开发SSO服务和权限控制。

SpringSecurity




springSecurity 是spring家族的安全控制框架, 功能非常完善。

Spring Security是能够为J2EE项目提供综合性的安全访问控制解决方案的安全框架。

它依赖于Servlet过滤器。这些过滤器拦截进入请求,并且在应用程序处理该请求之前进行某些安全处

理。

Shiro




spring-boot-starter-springsecurity

特征 spring-security + oauth2 shiro + cas jwt

依赖 jdk、jwt、redis redis、jdk、jwt --

自定义

权限

支持,用户登录后将用户的权限列表

写入认证服务器

支持 , 用户登录后将用户

的权限列表写入客户端 支持

认证服

务集群 -- CAS支持 支持

共享

session

支持 支持 支持

前后端

分离 支持,参数始终携带access_token

支持不够友好,需要改造

CAS服务端 支持

Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理

和加密。

以下是 Apache Shiro 可以做的事情:




1. 验证用户来核实他们的身份

2. 对用户执行访问控制

3. 判断用户是否被分配了一个确定的安全角色

4. 判断用户是否被允许做某事

5. 在任何环境下使用 Session API,即使没有 Web 或 EJB 容器。

6. 在身份验证,访问控制期间或在会话的生命周期,对事件作出反应。

7. 聚集一个或多个用户安全数据的数据源,并作为一个单一的复合用户“视图”。

8. 启用单点登录(SSO)功能。内置了jasig-cas

9. 为没有关联到登录的用户启用"Remember Me"服务。



市面主流的技术搭配


搭配方案一


搭配方案二




全部评论: 0

    我有话说:

    登录原理与简单实现

    一、系统登录机制 1、http无状态协议   web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器每一次请求,服务器会独立处理,不与之前或之后请求

    微服务架构:搭建网站扫码登录功能设计

    微信扫码登录大家都是应用比较多登录方式了,现在大购物网站像京东、淘宝等都支持使用APP扫码登录网站了。今天就用APP扫码登录网站实例来举例说明微服务架构搭建过程。

    消息队列常见问题(二):消息队列产生大量消息堆积怎么解决?

    上一节列举了生产上消息队列产生大量消息堆积会哪些后果,那相对应解决方法哪些呢?1、消息被丢弃情况如果要实现防止消息过期问题,最好不要设置过期时间!那设置了过期时间导致消息丢失怎么补救呢?答案

    纯JS实现复制功能三种方式踩坑

    业余时间写了一个在WX里面分享X宝优惠券小工具,里面用到复制T口令功能,当时以为实现起来很....

    消息队列常见问题(一):生产上消息队列产生大量消息堆积会什么后果?

    大多数消息堆积原因是Consumer出现了问题,并且没有被运维/开发监控到即使修复问题,导致大量消息都积压在 MQ 中,那么会造成哪些后果呢?1、消息被丢弃例如 RabbitMQ 中一条消息设置

    DDD 微服务实战

    PS:让我们把DDD思想真正落地,从数据库设计到代码实战演练,从电商、在线订餐 到智慧医疗全方位展示如何运用DDD 在微服务+人工智能、嵌入式+物联网项目中进行业务建模、系统规划与设计实践

    推荐一款功能强大,开源免费H5可视化编辑器

    H5-Dooring 是一款功能强大,开源免费H5可视化页面配置解决方案,致力于提供一套简单方便、专业可靠、无限可能H5页最佳实践技术栈以react为主, 后台采用nodejs开发. 预览

    SpringBoot 整合SpringSecurity示例实现前后分离权限注解+JWT登录认证

    一.说明 SpringSecurity是一个用于Java 企业级应用程序安全框架,主要包含用户认证和用户授权两个方面.相比较Shiro而言,Security功能更加强大,它可以很容易扩展以满足

    高并发核心技术-幂等实现方案

    幂等性应该是合格程序员一个基因,在设计系统时,是首要考虑问题,尤其是在像支付宝,银行,互联网金融公司等涉及都是钱系统,既要高效,数据也要准确,所以不能出现多扣款,多打款等问题......

    如何实现服务器300万个长连接

    试验过单机能抗300万个长连接操作?分享一下

    40亿条/秒!Flink流批一体在阿里双11首次背后

    来源:王峰(莫问) Flink 中文社区原文:https://mp.weixin.qq.com/s/BTzulif0LPEbUiv2aikscA 导读:今年双 11,实时计算处理流量洪峰创纪录

    「转载」蘑菇街消息系统上云实践

    小编又来啦~本周要推荐给大家是一篇跟中间件上云相关技术文章,这里面详细记录了,蘑菇街自研消息系统上云全过程,也是市面上开放出来为数不多企业自研组件上云实践相关需求同学可以好好学习下

    GitHub竟然基于SpringCloud“网约车”项目,附源码

    有人问小编开源“网约车”项目源码,并且最好是采用微服务架构设计,这样可以投入技术团队进行二次开发。 小编在GitHub上还真找到了这个项目,接下来一起看一看吧! 项目介绍 该项目是一款标准且

    【收藏】18 个 Java8 日期处理实践,太用了!

    来源:https://juejin.im/post/5a795bad6fb9a0634f407ae5 Java 8 日期处理 Java 8 推出了全新日期时间API,在教程中我们将通过一些简单

    Web前端:页应用部署时缓存策略

    前端网站采用Vue + Nginx方式进行生产环境部署。发现登录系统之后,出现页面空白问题,刷新几次后显示正常。

    Beeorder 3.6.0 发布,餐饮餐小程序

    项目简介 beeorder是餐饮餐商城微信小程序,针对餐饮行业推出一套完整餐饮解决方案实现了用户在线餐下、外卖、叫号排队、支付、配送等功能,完美使餐饮行业更高效便捷! 新增:1. 增加

    手把手教你用Spring Cloud + Redis 是实现赞功能,包教包会

    原文:https://www.toutiao.com/i6791466166662464007 经常刷微博或者刷某条人都会看见在页面各个地方都功能,like this:@  

    8 种最坑 SQL 错误用法,你踩过坑?

    编写复杂SQL语句要养成使用 WITH 语句习惯。简洁且思路清晰SQL语句也能减小数据库负担 。

    架构实战篇(十一):Spring Boot 集成企业级搜索引擎 SolrCloud

    Solr是以Lucene为基础实现文本检索应用服务。Solr部署方式单机方式、多机Master-Slaver方式、Cloud方式