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

    一、单点登录流程

    =====客户端======


    1.拦截客户端的请求判断是否有局部的session

    2.1如果有局部的session,放行请求.

    2.2如果没有局部session

    2.2.1请求中有携带token参数

    2.2.1.1如果有,使用HttpURLConnection发送请求校验token是否有效.

    2.2.1.1.1如果token有效,建立局部的session.

    2.2.1.1.2如果token无效,重定向到统一认证中心页面进行登陆.

    2.2.1.2如果没有,重定向到统一认证中心页面进行登陆.

    2.2.2请求中没有携带token参数,重定向到统一认证中心页面进行登陆.


    =====服务端=====

    1.检测客户端在服务端是否已经登录了.(checkLogin方法)
    1.1获取session中的token.
    1.2如果token不为空,说明服务端已经登录过了,此时重定向到客户端的地址,并把token带上
    1.3如果token为空,跳转到统一认证中心的的登录页面,并把redirectUrl放入到request域中.

    2.统一认证中心的登录方法(login方法)
    2.1判断用户提交的账号密码是否正确.
    2.2如果正确
    2.2.1创建token(可以使用UUID,保证唯一就可以)
    2.2.2把token放入到session中,还需要把token放入到数据库表t_token中
    2.2.3这个token要知道有哪些客户端登陆了,存入数据库t_client_info表中.);
    2.2.4转发到redirectUrl地址,把token带上.
    2.3如果错误
    转发到login.jsp,还需要把redirectUrl参数放入到request域中.

    3.统一认证中心认证token方法(verifyToken方法),返回值为String,贴@ResponseBody
    3.1如果MockDatabaseUtil.T_TOKEN.contains(token)结果为true,说明token是有效的.
    3.1.1返回true字符串.
    3.1如果MockDatabaseUtil.T_TOKEN.contains(token)结果为false,说明token是无效的,返回false字符串.

    二、单点注销流程

    =====客户端======

    1.在登陆的按钮链接写上统一认证中心的登出方法即可.
    <a href=”http://www.sso.com/logOut”>退出</a>
    2.校验令牌信息的同时把客户端登出地址(clientUrl)和客户端会话id(jsession)一并的传到统一认证中心


    =====服务端=====

    1.编写logOut方法,调用session.invalidate()
    2.创建session的监听器,在session的监听器的销毁方法写如下逻辑
    2.1获取session中的token.
    2.2根据token获取所有客户端的登出地址和会话id
    2.3通过HttpUtil选项调用客户端的登出方法.

    三、开源软件CAS

    CAS(Central Authentication Service) 是 Yale (耶鲁)大学发起的开源的企业级单点登录系统。它的特点:

    Java (Spring Webflow/Spring Boot) 服务组件
    可插拔身份验证支持(LDAP,Database,X.509,MFA)
    支持多种协议(CAS,SAML,OAuth,OpenID,OIDC)
    跨平台客户端支持(Java,.Net,PHP,Perl,Apache等)
    与uPortal,Liferay,BlueSocket,Moodle,Google Apps等集成
    分为CAS Server服务端和CAS Client客户端:

    CAS Server:
    CAS Server 负责完成对用户的认证工作, CAS Server 需要独立部署,有不止一种 CAS Server 的实现, Yale CAS Server 和 ESUP CAS Server 都是很不错的选择。
    CAS Server 会处理用户名 / 密码等凭证 (Credentials) ,它可能会到数据库检索一条用户帐号信息,也可能在 XML 文件中检索用户密码,对这种方式, CAS 均提供一种灵活但同一的接口 / 实现分离的方式, CAS 究竟是用何种认证方式,跟 CAS 协议是分离的,也就是,这个认证的实现细节可以自己定制和扩展.

    CAS Client:
    CAS Client 负责部署在客户端(注意,我是指 Web 应用),原则上, CAS Client 的部署意味着,当有对本地 Web 应用的受保护资源的访问请求,并且需要对请求方进行身份认证, Web 应用不再接受任何的用户名密码等类似的 Credentials ,而是重定向到 CAS Server进行认证。
    目前, CAS Client 支持(某些在完善中)非常多的客户端,包括 Java 、 .Net 、 ISAPI 、 Php 、 Perl 、 uPortal 、 Acegi 、 Ruby 、VBScript 等客户端,几乎可以这样说, CAS 协议能够适合任何语言编写的客户端应用。

    第一二部分的源码:https://github.com/yyzmain/ssoDemo

    转自:https://blog.csdn.net/wolfcode_cn/article/details/80773274

    寻找撬动地球的支点(解决问题的方案),杠杆(Java等编程语言)已经有了。xkzhangsan
  • 相关阅读:
    触达项目涉及到的功能点
    NodeJS编程基础
    C#Socket通讯
    HTML转义字符大全
    C# 二进制,十进制,十六进制 互转
    浏览器的分类
    Prometheus设置systemctl管理
    第十五讲:Pagerduty的联用
    第十四讲:Prometheus 企业级实际使⽤二
    第十三讲:Prometheus 企业级实际使⽤
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/11349076.html
Copyright © 2011-2022 走看看