`
天上掉下个喜欢编程的榕哥哥
  • 浏览: 28885 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

简单Web单点登录SSO

阅读更多

       最近在写一个Web的单之间点登录模块,所谓的单点登录就是使多个互相信任的应用系统之间只需要登录一次,就可以在访问所有这些系统。这里要强调的就是一个信任问题,直接判断session或者cookie么?要知道session是维持在一个会话里的,不同会话是无法直接就取到相同的session的,也即session的跨域问题;cookie也存在跨域的问题,一开始我想cookie不是存在浏览器的吗?同一个浏览器不就能够取得到?但是如果当我们两个系统的域不相同的时候,也是无法直接取到在其他域里设置的cookie的。比如现在有A跟B系统,它们的域不同,现在在A系统登录并设置cookie,访问B系统,判断是否存在cookie,这时候是永远取不到在A系统设置的cookie的,虽然就在同一个浏览器上。所以自己在做这个单点登录的时候首先考虑的就是如何解决各系统应用之间的共同凭证以及凭证的安全性,做的相对比较简单。

       我的做法跟网上大多的做法一样的地方是单独独立出一个单点登录的认证中心系统,由该系统来做判断,访问其他系统需要登录验证的话都会在该认证中心进行认证是否登录,并返回一个认证结果。下面简单讲下自己的认证过程:

 

      1、 我给每个系统都增加了几个负责与SSO认证系统交互的中间代理类(其实就是Servlet),但我们访问某个系统的时候,如果判断此时的session为null则将会跳转到一个中间代理类,该类负责跳转(response.sendRidrect)至SSO系统的登陆验证,注意跳转前需要再次判断是否当前会话中的session是否为null(防止一些非法访问),不为空则返回来源页面。跳转的时候,需要封装一个对象,里面包含的属性有一个随机产生的id以及用户的一些信息如user_id,这时只需要给随机id赋值,便于后面返回的时候验证是否是同一个对象,而不是伪造的对象,将对象加密为字符串cert(使用RSA加密),取得来源页面路径url,将cert与url作为参数随着跳转传到SSO系统。

 

      2、SSO登录验证中心(其实也是个Servlet),当接受到请求的时候需要分析几种情况:

           当前系统下是否存在登录设置过的cookie(cookie名是已经规定好了)

           ·如果存在,将cert取出解密为对象,再将cookie中带有的用户信息封装到对象中,再次加密成cert作

             为参数跳转回A系统负责验证cert的代理类。

           ·如果不存在则需要判断是否有表单传参,有表单传参以为着是从登录页面登录提交的请求,对表单

              数据进行验证并封装cert返回,否则就会跳转至SSO的登录页面。

 

      3、SSO中心不管是哪种情况最终处理完了都会封装好对应的证书返回到源系统的负责验证证书的路径。

            该验证类负责验证证书中的cert所对应的对象是否跟之前的对象中的随机id一致,如果是则设置

             session并返回源页面,否则其他跳转到对应的出错页面。

 

简单的流程图:



 该方案还不是很完善,只是一种可行的方案!

  • 大小: 16.1 KB
分享到:
评论

相关推荐

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

    单点登录的工作原理可以通过一个简单的类比来理解:假设一个大型公园内有多个独立的景点,游客可以在各个景点入口分别购票,但这种方式非常不便。因此,大多数游客会选择在公园入口处购买一张通用门票(通票或套票)...

    SSO 单点登录(java)

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后,能够访问多个相互关联的应用系统,而无需再次输入凭证。在Java环境下实现SSO,通常涉及以下几个核心知识点: 1. **原理**:SSO的核心思想...

    基于WEB服务单点登录设计与实现

    本文还对SSO的分类进行了讨论,包括AD单点登录、WEB单点登录和企业单点登录。AD单点登录是建立在Microsoft Windows Active Directory(AD)服务上的Windows Integrated Security。WEB单点登录是专门针对Web应用程序...

    SSO单点登录

    ASP.NET跨域单点登录源码 asp.net 跨域单点登录实现原理: 当用户第一次访问web应用系统1的时候,因为还没有登录,会被引导到认证中心进行登录; 根据用户提供的登录信息,认证系统进行身份效验,如果 通过效验,...

    WEBSSO-单点登录

    此项目"WEBSSO-单点登录"可能是对SSO实现的一个实例化,涵盖了从设计到实现的全过程,对于理解SSO的工作原理和开发流程具有很高的参考价值。通过学习和研究该项目,开发者可以掌握SSO系统的构建方法,提高在多应用...

    关于SSO单点登录的简单实现

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。这个过程提高了用户体验,同时也简化了安全管理。在本文中,我们将探讨SSO的基本原理...

    web-sso单点登录源码

    从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现、源代码和详细讲解;还从安全和性能的角度对现有的实现技术进行进一步分析,指出相应的风险和需要改进的方面。本文除了从...

    基于JWT实现SSO单点登录流程图解

    基于JWT实现SSO单点登录流程图解是指使用JSON Web Token(JWT)来实现单点登录(SSO)的机制。在这种机制中,用户只需要登录一次,就可以访问多个应用服务器上的资源,而不需要再次登录。下面是基于JWT实现SSO单点...

    java单点登录sso源码

    Java单点登录(Single Sign-On,SSO)是一种网络访问控制机制,允许用户在一次登录后,无需再次认证即可访问多个应用系统。SSO的核心思想是:用户只需要在一个可信的身份认证中心(Identity Provider,IdP)进行身份...

    统一认证单点登录系统SSO解决方案.doc

    单点登录(Single Sign-On,简称SSO)是一种网络身份认证机制,允许用户在一个系统中登录后,无需再次认证即可访问其他相互信任的系统。在企业级应用环境中,多个独立的系统常常需要集成,以便提高用户体验和管理...

    单点登录SSO的参考资料

    单点登录(Single Sign-On,简称SSO)是一种身份验证机制,它允许用户在一个系统上登录后,无需再次输入凭证即可访问多个相互关联的系统。SSO的主要目标是提高用户体验,减少用户记忆多个密码的负担,同时也能提高...

    SSO单点登录源码

    SSO(Single Sign-On)单点登录是一种网络应用的认证技术,它允许用户在一个系统或应用中登录后,无需再次输入凭证即可访问其他相互信任的系统。这种技术简化了用户的登录流程,提高了用户体验,同时也降低了管理多...

    单点登录sso-shiro-cas-maven

    spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的...

    单点登录sso

    单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。这种技术极大地提升了用户体验,减少了用户记忆和管理多套用户名和密码的负担,...

    sso单点登录源代码

    SSO(Single Sign-On)单点登录是一种网络认证机制,允许用户在一次登录后,就能访问多个相互关联的应用系统,而无需再次输入凭证。这种技术极大地提升了用户体验,减少了记忆和输入多个用户名和密码的麻烦,同时也...

    CAS实现sso单点登录原理

    CAS(Central Authentication Service)是Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于Web SSO)。CAS开始于2001年,并在2004年12月正式成为JA-SIG的一个项目。...

Global site tag (gtag.js) - Google Analytics