zoukankan      html  css  js  c++  java
  • 单点登录

    单点登录的目的是为了一次登录,访问所有的应用系统,简单访问流程,同时增强安全性。
    根据不同的应用场景,单点登录可以有不同的设计方案:
    1. 统计登录入口,使用一套用户,或者各个系统的用户通过数据交换保持一致,访问任何一个系统,都会跳转到统一的登录入口进行登录。
    2. 可以通过统一的入口登录,也可以单独登录某个子系统,通过统一入口登录,则可以访问所有系统,通过子系统单独登录,则只能访问子系统。这种适合于有很多遗留系统,或者使用不同服务商的系统,很难整合的情况。
    如果能使用一套用户自然是最好的方案,但是这也面临一个问题,各个子系统的权限管理如何做?所以现实中这也不太可能,各个子系统通常都会有自己的用户表,因此我们必然需要一套方法来使得各个系统的用户保持统一。这自然就会要有一些约束条件,比如只能在门户中增删用户,然后通过一定的同步机制同步到各个子系统。
    单点登录的实现可以考虑使用开源的软件,比如cas,也可以自己实现
    cas默认是统一登录入口,所有子系统访问的时候如果没有登录就会跳转到cas的登录页,如果不想使用统一的登录页,则可以在子系统中让cas只拦截某一个请求,只有访问这个请求的时候才会去cas验证用户信息,在门户中配置这个请求则可实现单点登录,单独访问子系统的时候就不受cas的影响。
    自己实现也不是很难,下面是一个简单的流程
    1. 用户提供用户名密码登录
    2. 跳转到单点登录系统(SSO)中完成登录
    3. 写cookie到各个子系统的域中
    4. 跳转回到登录后的页面,完成登录
    5. 访问其它子系统
    6. 去SSO中查询是否登录
    7. SSO检查cookie信息,如果已登录则发放一个token
    8. 子系统拿到token再次请求SSO,完成二次握手,SSO返回用户名
    9. 子系统通过用户名去查询到完整的用户信息,完成登录。

    单点登录是否一定要使用LDAP呢?我觉得不一定,这要看具体的情况而定,LDAP的优势是跨平台,读取速度快,分布式,成本低,所以用来管理用户信息是很好的。不过使用LDAP也有一定的学习成本,对于习惯了关系数据的朋友来说,也要花一定的时间来学习和使用,所以如果你的项目紧急的话,直接使用关系数据库也是可以的,以后再按需求来确定是否要转成LDAP都可以。
    CAS本身对各种数据库都提供支持。

  • 相关阅读:
    WC2020「Illusory」
    WC2015-2019
    Java基础——数组
    Java基础——Java基础语法和使用
    完善README——MarkDown模板[EN]
    完善README——MarkDown模板[CN]
    完善README——Markdown语法概要总结
    Java基础——Java如何导入本地项目
    Java基础——Java的历史以及平台应用
    AndroidSDK——和风天气使用初体验
  • 原文地址:https://www.cnblogs.com/firejava/p/7550481.html
Copyright © 2011-2022 走看看