`

Sso 登陆实现初步方案

    博客分类:
  • SSO
阅读更多

用户中心SSO流程和设计说明

一.名词解释

 

IDS        用户SSO中心,用户注册和登陆和检测都在这里实现

 

协作应用    其它Web应用,用户的所有功能依靠IDS来实现

 

 

二.基本架构

 

 

(图1

 

 

(图2

 

所有的协作应用只有在首次访问时从IDS进行登陆检测,之后都是在完成本地登陆检测

 

 

三.流程描述

SSO流程主要有以下几种形式,下面分别进行说明。

 

n         匿名访问

用户没有登陆,就访问协作应用的页面。

 

用户打开浏览器,访问协作应用地址 A,过滤器生成coSessionid,然后检查是否本地session,从而判断是否登陆,这种情况都是没有登陆。然后过滤器通过socket通信检查在IDS上是否存在与coSessionid对应的用户,这种情况下,也会没有。接着过滤器将跳转到IDS全局登陆地址:BB主要是生成gSeesionid。在B处理完之后将会跳回到A地址,这时会将gSessionid作为参数传递过来,同时还有匿名访问的参数。这个时候,过滤器不会生成新的coSessionid,然后检查本地session,以判断登陆。这个时候,依然没有登陆,过滤器会检查参数,是否是匿名访问。完成匿名访问的本地Cookie标识。流程结束。下次用户在此访问这个协作应用时,就可以直接从本地Cookie里判断了。

 

这里值得注意,如果用户在同一浏览器访问另外一个协作应用的话,gSessionId会一致。要深刻理解Jseesionid原理才能对这个问题理解透彻(Jsessionid,其实是浏览器与web应用之间的识别桥梁),当协作应用A跳转到B时,相当于当前浏览器窗口与B产生了一个新的Jsessionid,而不是协作应用AB产生了新的Jsessionid,所以以后只要在当前浏览器再此访问B时,都会是同一个Jsessionid。就算是其它协作应用通过跳转的方式访问BJsessionid也不变。因为当前浏览器与访问的web应用只会生成一个Jseesionid,当然这种情况与在协作应用里用程序请求B不一样,后面这种情况每次请求都会产生一个新的Jsessionid

 

还有其实Jsessionid对于协作应用来说,意义不大,主要是在IDS中心用来判断。

 

附:附匿名模式下流程图:

 

 

 

 

 

 

 

 

n      登陆访问

用户先登陆,然后访问协作应用的页面。

 

用户登陆时,用户名和密码正确登陆成功,会创建一个GlobalSession.然后在同一浏览器访问协作应用地址 AA的过滤器生成新coSessionid,然后检查本地session,是否登陆。这里结果是没有。然后过滤器通过socket通信检查在IDS上是否存在与coSessionid对应的用户,这种情况下,找不到,返回为空的登陆对象。过滤器跳转至IDS LoginServlet,LoginServlteGlobalSession中判断是否存在对应的coSession,没有的话就添加一个。然后跳转回写作应用地址AA的过滤器再次判断用户对象是否加载到本地Session中。这里结果是没有。然后过滤器通过socket通信检查在IDS上是否存在与coSessionid对应的用户,这种情况下,能找到,返回对应的用户对象SSOUser,执行本地Actor,将SSOUser对象加载到本地的session中。

流程结束。

 

附件:登陆模式下的SSO流程。

 

 

 

 

 

 

总结一下:

 

1.首次访问协作应用是,过滤器会执行两次。

 

2.浏览器与IDSJsessionid不变

 

 

n         登出流程

IDS接收退出请求,IDS将根据对应的gSessionid,遍历所有已经登陆并且没有失效的协作应用登陆记录。然后用HTTP方式请求通知每个协作应用指定的一个页面,这个页面没有任何功能但是必须被过滤器作用。这里注意发出请求时,必须将coSessionId作为cookie传给协作应用。这样在协作应用里才能找到对应的Session,并且将Session失效,完成退出请求。

四.对象描述

u        CoSession 单个协作应用对象

 一个用户登陆session的最小存储单元包括一下属性和方法

String  coAppName;  协作应用名

String  coSessionId;Session的标识

String  coUserName; 登陆用户名

boolean timeoutFlag;登陆超时标识

long    loginTime;  登陆的时间

String  sessCookieName; 保存的sessioncookie名字

String  loginIP;   登陆的IP

 

u        GlobalSession 维护用一个用户的CoSession 对象列表,因为一个用户可以在好几个协作应用上登陆,这里用coSessions Map对象来维护。

GlobalSession的主要属性是

    private String globalId;

    private long creationTime;  创建时间

    private long lastAccessTime; 最后一次时间

    private boolean loginFlag;

    private int loginBy;

    private String loginUserName;

    private User loginUser;     //用户信息对象

    private Map coSessions;

    private Set coAppNames;

private HttpSession idsHttpSession;

GlobalSession对象我们可以知道一个用户是否登陆,是否超时,在哪几个协作应用上登陆过,协作应用名是什么等其它信息。

 

 

u       SessionManager 管理和维护GlobalSession 对象主要提供一下方法

    public boolean login(String gSessionId, String coAppName, String coSessionId, int userId, String passwd, String clientIP)

该方法分为如下几个步骤

1.       在数据库取得user的信息。

2.       获得一个GlobalSession对象gSessionGlobalSession gSession = createSSO(gSessionId, coAppName, coSessionId, authedUser.getUserName(), clientIP, user, "用户全局登录", 0);

3.       赋值CoSession,并且将gSession对象添加到SessionManager Map对象:coSessionIndexs   public boolean addCoLogin(String coAppName, String coSessionId, GlobalSession gSession, String coUserName)

4.       将登陆请求发给其它协作应用,请求appurl,并将会话标识coSessionIdcookie的方式传递给协作应用。

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 63 KB
  • 大小: 47.5 KB
分享到:
评论

相关推荐

    SSO单点登陆解决方案

    SSO单点登录解决方案 SSO(Single Sign-On)单点登录解决方案旨在提供一个统一的身份验证入口,满足集团多个成员网站的身份验证需求。该方案的主要目标是实现单点登录,提高用户体验,降低成员网站的登录负载,并...

    SSO的简单实现SSO的简单实现

    以下是对SSO简单实现的详细说明: 在实现SSO时,有多种方法可以选择: 1. **商业软件**:一些大型公司如 Netgrity(Siteminder)、Novell(iChain)、RSA(ClearTrust)等提供专门的SSO解决方案。这些软件通常具备...

    SSO个人实现方式

    在本文中,我们将探讨SSO的原理,以及如何通过提供的压缩包文件实现个人SSO系统。 SSO的核心思想是将用户认证过程集中管理,当用户成功登录到一个“认证中心”后,可以在其他已集成的系统中无缝漫游。这减少了用户...

    sso解决方案汇总

    本文将深入探讨SSO的几种常见实现方案,包括虚拟目录的主应用与子应用之间的SSO、不同验证机制下的SSO、同一域名或不同域名下子域名间SSO的实现,以及不同.NET版本和混合身份验证模式下的SSO解决方案。 ### 虚拟...

    CAS框架SSO的实现

    CAS框架SSO的实现

    spring boot 实现SSO单点登陆

    spring boot整合spring security 实现SSO单点登陆 完整DEMO. 1、配置本地hosts 127.0.0.1 sso-login 127.0.0.1 sso-resource 127.0.0.1 sso-tmall 127.0.0.1 sso-taobao windows系统的路径在C:\WINDOWS\system...

    SSO单点登录实现方案

    单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 本示例简单的实现了SSO认证系统,...

    SSO 单点登录解决方案 设计流程图

    该解决方案的设计流程图将会详细介绍 SSO 的实现机制、时序图、数据库设计、程序实现和修改、Cookie 和 Redis 的使用、相关 API 提供给其他业务的需要等方面的知识点。 设计流程图 SSO 单点登录解决方案的设计流程...

    单点登录SSO解决方案之SpringSecurity+JWT实现.docx

    ### 单点登录SSO解决方案之SpringSecurity+JWT实现 #### 一、单点登录(SSO)概述 单点登录(Single Sign-On,简称SSO)是一种认证机制,允许用户仅通过一次登录就能访问同一域下的多个应用程序和服务。这种机制...

    一个sso的解决方案

    在本方案中,我们将探讨如何实现一个基于Redis的SSO解决方案。 首先,我们需要理解SSO的工作原理。SSO的核心是中央认证服务(CAS),它负责处理用户的登录请求并生成一个安全的票据(Ticket Granting Ticket, TGT)...

    SSO解决方案大全 Single Sign-On for everyone

    保护用户凭证的安全,防止会话劫持和跨站请求伪造(CSRF)攻击是设计SSO解决方案时必须解决的问题。此外,还应考虑故障恢复和审计跟踪,以确保系统的可靠性和合规性。 总之,SSO的实现涉及多个层面的技术,包括但不...

    单点登录SSO的实现原理

    单点登录SSO的实现原理 单点登录(SSO)是一种常见的技术实现原理,在多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。实现单点登录说到底就是要...

    java web sso 实现

    Java Web SSO(Single Sign-On)实现是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需多次输入凭证。本教程将基于提供的博文链接进行讲解,但请注意,由于没有直接提供具体内容,这里会...

    .net单点登录sso的实现

    下面将详细介绍.NET环境下SSO的实现原理和步骤。 一、SSO的基本原理 SSO的核心是用户只需在一个地方登录,然后可以在所有关联的应用系统中自动登录或免密登录。这通常通过共享身份验证令牌(如Cookie)来实现。当...

Global site tag (gtag.js) - Google Analytics