zoukankan      html  css  js  c++  java
  • 单点登录SSO原则的实现

    单点登录SSO(Single Sign On)简单地把它是下一个在多系统环境中共存,在用户登录,不要在其他系统上的登录。这是用户第一次登录得到所有其他系统的信任。

    单点登录在一个大型网站非常频繁使用,例如,网站,如阿里巴巴,该网站的背后,是数百子系统。或交易可能涉及到几十个子系统的协作。假设每一个子系统都须要用户认证。不仅用户会疯掉,各子系统也会为这种反复认证授权的逻辑搞疯掉。

    实现单点登录说究竟就是要解决怎样产生和存储那个信任。再就是其它系统怎样验证这个信任的有效性,因此要点也就下面几个:

    • 存储信任
    • 验证信任

    仅仅要攻克了以上的问题。达到了开头讲得效果就能够说是SSO。

    最简单实现SSO的方法就是用Cookie,实现流程例如以下所看到的:

    不然发现以上的方案是把信任存储在client的Cookie里。这样的方法尽管实现方便但立刻会让人质疑两个问题:

    • Cookie不安全
    • 不能跨域免登

    对于第一个问题一般都是通过加密Cookie来处理。第二个问题是硬伤。事实上这样的方案的思路的就是要把这个信任关系存储在client,要实现这个也不一定仅仅能用Cookie,用flash也能解决,flash的Shared Object API就提供了存储能力。

    一般说来。大型系统会採取在服务端存储信任关系的做法,实现流程例如以下所看到的:

    以上方案就是要把信任关系存储在单独的SSO系统(暂且这么称呼它)里。说起来仅仅是简单地从client移到了服务端,但当中几个问题须要重点解决:

    • 怎样高效存储大量暂时性的信任数据
    • 怎样防止信息传递过程被篡改
    • 怎样让SSO系统信任登录系统和免登系统

    对于第一个问题,一般能够採用相似与memcached的分布式缓存的方案。既能提供可扩展数据量的机制。也能提供高效訪问。

    对于第二个问题,一般採取数字签名的方法,要么通过数字证书签名。要么通过像md5的方式,这就须要SSO系统返回免登URL的时候对需验证的參数进行md5加密,并带上token一起返回,最后需免登的系统进行验证信任关系的时候。需把这个token传给SSO系统,SSO系统通过对token的验证就能够辨别信息是否翻。

    对于最后一个问题,可以通过白名单进行处理,对信托制度竞争力白名单要求简单点只有富有成效的关系,在白名单中唯一的类似系统的能力是免费登录。

    这些都只是一些简单的实现提供技术,但需要强调的是,这仅仅是技术实现的,只解决部分上述问题的。SSO本身并不是一个高科技,有了这样的认识更加有利于我们深入探索SSO

  • 相关阅读:
    10 种保护 Spring Boot 应用的绝佳方法
    Redis 如何分析慢查询操作?
    Spring Boot 主类及目录结构介绍
    Redis 再牛逼,也得设置密码!!
    Spring Data Redis 详解及实战一文搞定
    Spring Boot Redis Cluster 实战干货
    超详细的 Redis Cluster 官方集群搭建指南
    Redis Linux 安装运行实战全记录
    hdu 4790 Just Random (思路+分类计算+数学)
    poj 1328 Radar Installation(贪心)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4593013.html
Copyright © 2011-2022 走看看