`
pcajax
  • 浏览: 2163736 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

单点登陆(SSO)组件的设计与实现一 【转】

阅读更多

 

更新:新增登录流程图:

[原创]单点登陆(SSO)组件的设计与实现二-登录流程图 


    先说几句废话,自我感觉此方案还不错,至少解决了安全性的问题,也实现了统一登出,能跨平台,跨服务期,跨域名,当然需要相应的联盟站点的支持,但从原理上绝对能跨平台。设计和具体实现的描述比较长,今天先介绍一部分


1引言

1.1 编写目的

详细说明单点登录组件(SSO)的设计思想和实现方法,是日后该组件维护和扩展工作的基本依据文档。预期读者是要实现单点登录(SSO)系统的系统设计人员,系统开发人员,系统维护人员。

1.2 背景

说明:

  1. 待开发软件系统的名称;jillzhang的SSO组件
  2. 本项目的任务提出者为jillzhang、开发者为jillzhang、用户为有用户整合需求平台的开发和设计人员。

1.3 定义

SSO是Single Sign On的缩写,该技术主要用于用户整合。
认证中心:认证中心是用户注册,成员站点管理,用户登录,验证登录信息,保存登录 信息,颁发登录认证的中心站点。 
成员站点: 成员站点是遵从认证中心规则,享用认证中心统一用户的站点。  
注册站点:如果想成为成员站点,必须先在认证中心进行站点登记,登记后,认证中心会保存注册站点的配置信息,并将该配置信息发给注册站点。注册站点也需保存这些配置信息,供日后与认证中心交互时候使用。  
联盟用户:指在认证中心注册的用户,这些用户能被所有的成员站点所共享。
登录请求:指成员站点向认证中心发出的带有站点配置的用户登录请求信息。
登出请求:只用户向认证中心发出的要求退出登录的请求。  
登录请求验证:指的是认证中心根据存储的站点信息对成员站点的登录请求信息进行来 源和真实性的验证。
登出请求验证:指认证中心在接受来自成员站点的登出请求的时候,对请求的来源和真实性进行的验证
登录答复:指认证中心对经过验证的登录请求作出的答复信息。该答复包含用户的登录信息。
在线联盟用户数:指的是在成员站点中,在线的联盟用户数量。  
在线联盟用户列表:指的是在成员站点中,在线的联盟用户的列表信息。 
登录站点清单:是由认证中心维护的用户的登录站点信息,当用户注销的时候,会遍历此清单,逐个登出。

1.4 参考资料

本组件的设计和实现参考了下面的系统和书籍

  1. 《数字签名技术原理及技术》

2 程序系统的结构

本组件包括下面几个应用接口,分别如下:

  1. ISite:ISite是用于描述和操作成员站点的接口
  2. IUser : IUser是用于描述和操作联盟用户的接口
  3. IServer:IServer是认证中心处理登录请求和登出请求的接口
  4. IClient: IClient是成员站点发出登录请求和处理登录答复的接口
  5. IUserLoginList:IUserLoginList是描述和操作用户登录站点清单的接口
  6. ILoginRequest:是记录和操作成员站点发送登录请求的接口。
  7. ILoginRequestContainer:用于保存和维护登录请求列表的接口
  8. IUserStateContainer:是联盟站点中保存用联盟用户登录信息的接口。

它们的定义如下:

组件的工作流程描述如下:

  1. 第一步,首先注册联盟站点,注册联盟站点用到接口ISite
  2. 第二步:注册好联盟站点之后,将认证中心产生的站点配置信息(包括站点编号,站点公钥,站点私钥,认证中心的登录地址,认证中心登出地址)存储到联盟站点本地。
  3. 在认证中心上注册一新用户,注册用户需要使用IUser接口
  4. 在联盟站点对认证中心发出登录请求
  5. 认证中心验证登录请求
  6. 在认证中心进行登录
  7. 登录成功后,保存登录票据,认证中心对联盟站点发送登录答复,并将此次登录记录到登录站点清单
  8. 联盟站点接收到登录答复后,先进性验证,正确后,根据登录答复中的信息产生用户登录票据,并且更新联盟用户登录数和登录列表
  9. 在联盟站点中发出登出请求
  10. 认证中心验证登出请求,正确的话,销毁认证中心用户登录票据,通过用户的登录站点清单,逐个调用联盟站点的登出页面
  11. 在认证中心回调联盟站点的登出页的时候,联盟站点会在登出页中销毁各个的登录票据,并更新在线用户数和用户列表。

 

3 ISite接口设计说明 

3.1 接口描述

ISite接口包括7个属性和2个方法,分别用于在认证中心用于描述和操作站点的配置

信息。














其中,各个属性的含义如下

属性名称

类型

含义

SiteID

string

站点编号,用于表示站点的唯一性。

HomePage

string

当登录请求中未提供来源网址项的时候,登录答复发送的地址

LogOutUrl

string

在进行统一登出的时候,回调的联盟站点页面地址,这个页面会负责销毁本站的登录票据信息。

PublicKey

string

用于数据交换时加密或签名用的公钥

PublicAndPrivateKey

string

用于数据交换时加密或签名用的私钥

FromUrlKey

string

用于指示联盟站点在发送登录请求和认证站点进行请求验证的时候来源网址存储位置。

UidField

string

用于指示联盟站点在发送登录请求和认证站点进行请求验证的时候用户信息的存储位置。

还包括两个方法,分别为:

方法名

含义和作用

Add

添加新的联盟站点。

Validate

验证联盟对象是否已经存在

3.2功能

该接口能在认证中心完成新联盟站点添加操作,添加之前可以验证站点是否存在。

3.3 默认实现

在SSO组件中,已经实现了一个默认的ISite对象。为DefaultServer/ DefaultSite.cs,它将放置在认证中心根目录下的sites.config文件作为存储介质,通过Add方法添加新联盟站点后的效果为:附件中的site.config文件,可自行下载文件后,看其结构。

 

 

4 IUser接口设计说明

4.1接口描述

IUser接口包括2个属性和2个方法,用于在认证中心端描和操作述联盟用户。

其中,各个属性的含义如下

属性名称

类型

含义

Uid

string

用户编号,是用户的标识

Pwd

string

用户密码

还包括两个方法,分别为:

方法名

含义和作用

Validate

验证用户是否存在

Register

添加新用户

4.2功能

该接口能在认证中心完成新联用户添加操作,添加之前可以验证用户是否存在。

4.3 默认实现

在SSO组件中,已经实现了一个默认的IUser对象。为DefaultServer/ DefaultUser.cs,它将放置在认证中心根目录下的users.config文件作为存储介质,通过Register方法添加新联盟用户的效果为:附件中的users.config文件,可自行下载文件后,看其结构。

 

 

5 IUserLoginList接口设计说明

5.1接口描述

IUserLoginList接口包括3个方法,用于在认证中心描述和操作用户登录的站点清单。

还包括三个方法,分别为:

方法名

含义和作用

Add

验证用户是否存在

GetLoginSites

获取用户的登录站点清单

DeleteUser

删除用户的登录站点清单数据

5.2功能

该接口在认证中心用于用户记录和维护用户登录的站点清单  

5.3 默认实现

在SSO组件中,已经实现了一个默认的IUserLoginList对象。为DefaultServer/ UserLoginLog.cs,它通过一个Collection对象来实现用户登录站点清单的维护工作。

 

 

6 IServer接口设计说明

6.1接口描述

IServer接口包括2个属性和5个方法,用于接收,验证登录请求,发送登录答复,接搜,验证登出请求,创建本地登录票据,维护用户登录清单。

两个属性为:

属性名称

类型

含义

Site

ISite

当前上下文处理请求和答复的站点对象

Uid

string

当前处理的上下文中的用户编号

 

还包括三个方法,分别为:

方法名

含义和作用

CheckUser

验证用户对象是否存在

CheckExistToken

验证登录票据已经存在

SaveToken

在认证中心本地保存登录票据

Jump

通过url跳转,发送登录答复

LogOut

统一登出。

6.2功能

该接口在认证中心,用于接收,验证登录请求,发送登录答复,接搜,验证登出请求,创建本地登录票据,维护用户登录清单

6.3 默认实现

在SSO组件中,已经实现了一个默认的IServer对象。为DefaultServer/ LoginRequest.cs。

 

 

7 ILoginRequest接口设计说明

7.1接口描述

ILoginRequest接口包括2个属性,用于记录和描述联盟站点的登录请求,这些信息在发出登录请求的时候创建,在收到登录答复的时候销毁。用于确保登录答复的不可复用性。

两个属性为:

属性名称

类型

含义

Identity

string

登录请求标志符,该标志符会发送给服务端,服务端在发送登录答复的时候会回传该标志,联盟站点会根据此标志来验证请求是否是伪造的。

TimeStamp

DateTime

请求的时间戳

7.2功能

该接口在联盟站点,用于记录和描述联盟站点的登录请求,这些信息在发出登录请求的时候创建,在收到登录答复的时候销毁。用于确保登录答复的不可复用性。7.3 默认实现

7.3 默认实现

在SSO组件中,已经实现了一个默认的ILoginRequest对象。为DefaultServer/ LoginRequest.cs。

 

8 ILoginRequestContainer接口设计说明

8.1接口描述

ILoginRequestContainer接口包括3个方法,用于在联盟站点中记录和维护登录请求

 

方法名

含义和作用

Add

添加登录请求信息

Check

检查登录请求是否存在

Remove

销毁存在的登录请求

8.2功能

该接口在联盟站点,用于在联盟站点中记录和维护登录请求

8.3 默认实现

在SSO组件中,已经实现了一个默认的ILoginRequestContainer对象。为DefaultServer/ LoginRequestContainer.cs。

 

9 IUserStateContainer接口设计说明

9.1接口描述

IUserStateContainer接口包括5个方法,用于在联盟站点中记录和维护在线联盟用户信息

 

方法名

含义和作用

Add

添加登录用户

GetList

获取在线用户清单

Check

检查某个用户是否已经在线

Remove

移除某个在线用户。

GetUserCount

获取在线用户个数

9.2功能

该接口在联盟站点,用于在联盟站点中记录和维护在线联盟用户信息

9.3 默认实现

在SSO组件中,已经实现了一个默认的IUserStateContainer对象。为DefaultServer/ UserState.cs。

 

 

10 IClient接口设计说明

10.1接口描述

IClient接口包括6个属性和2个方法,用于发出登录请求和登出请求

8个属性为:

属性名称

类型

含义

SiteID

string

站点编号

PrivateKey

string

数据交换时加密或者签名用的公钥

LoginAddress

string

认证中心登录地址

LogoutAddress

string

认证中心登出地址

Uid

string

登录的用户编号

TimeOut

int

登录答复的超时时间,单位s

UidField

string

登录登出请求中的用户信息的存储位置

FromUrlField

string

登录请求中的来源网址存储位置

2个方法为

方法名

含义和作用

Login

发出登录请求,并处理登录答复

LogOut

登出

10.2功能

该接口在联盟站点,用于发出登录请求和登出请求

10.3 默认实现

在SSO组件中,已经实现了一个默认的IClient对象。为DefaultServer/ DefaultClient.cs

 

11 本系统的安全性

11.1 登录请求的格式

联盟站点向认证中心发送的登录请求格式如下:

站点信息+登录请求编号+时间戳+空用户信息+对站点信息和登录清秋号的签名信息。
除了签名信息之外的全部信息均为明文传送,但因为重要的数据均经过数字签名,结果是站点信息和登录请求编号是不能被篡改的,保证了认证中心收到的登录请求的真实性。

11.2 登录答复的格式

认证中心发给联盟站点的登录答复格式如下

登录用户信息+登录请求编号+时间戳+对用户信息和登录请求号和时间戳的签名信息
其中登录用户信息是经过非对称加密的。请求号和时间戳因为经过签名,故也不能篡改,这样就可以保证联盟站点收到的登录答复的真实性和完整性。并且非正常联盟站点无法解密用户信息,也无法从中获取好处。  

篇幅太大,下面还有很长的内容要说,先发布以下,感兴趣的朋友可以先下载程序尝试使用。以后,我会逐渐添加Sql 和 Oracle的实现。您也可以根据接口规范,开发符合自己系统需求的SSO系统,今天先到这吧

程序文件:/Files/jillzhang/SSO.rar


更新:新增登录流程图:

[原创]单点登陆(SSO)组件的设计与实现二-登录流程图 

 

分享到:
评论

相关推荐

    [有源代码]单点登陆(SSO)组件的设计与实现

    在提供的"单点登陆(SSO)组件的设计与实现.doc"文档中,可能会详细介绍SSO组件的架构设计、实现步骤、技术选型,以及如何将这些组件集成到实际应用中的具体细节。同时,"SSO.rar"可能是源代码包,包含了SSO组件的实现...

    C#单点登陆组件源码SSO

    本项目提供了一款基于C#编写的SSO组件源码,其设计思路类似于微软的认证服务器和Web应用服务器,能够实现跨域和跨服务器的身份验证。 首先,理解C#中的SSO实现原理至关重要。SSO的核心在于票据(Ticket)的概念,当...

    CAS实现sso单点登录原理

    "CAS实现sso单点登录原理" CAS(Central Authentication Service)是Yale大学发起的一个企业级的、开源的...CAS实现sso单点登录原理为企业业务整合提供了一种可靠的解决方案,满足了企业对安全、可靠、灵活的需求。

    SSO单点登陆源代码用户控件

    在本资源中,"SSO单点登陆源代码用户控件"是针对Moss(Microsoft Office SharePoint Server)平台设计的,它能够帮助用户在Moss环境中实现单点登录功能。 Moss是微软提供的一款基于SharePoint的企业协作和内容管理...

    普元 sso 单点登陆集成指南

    普元SSO(Single Sign-On)单点登录集成指南是一份详细指导文档,它主要介绍普元信息技术股份有限公司提供的SSO组件的集成原理、集成方法和配置流程,目的是为了实现用户在多个应用系统间无需重复登录即可切换的体验...

    SSO Architecture(单点登陆架构)

    OpenSSO的目标是提供一套可扩展的身份服务基础设施实现,以方便Web应用实现单点登录(SSO)。SSO是一种身份管理技术,它允许用户在多个应用程序和服务之间仅使用一次登录凭据即可访问所有授权资源。这不仅提高了用户...

    java单点登录sso源码

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

    SSO单点登录解决方案

    SSO(Single Sign-On)单点登录是一种网络访问控制机制,允许用户在一次登录后,无需再次认证即可访问多个相互信任的应用系统。这种技术极大地提高了用户体验,减少了密码管理的复杂性,同时也为管理员提供了更高效...

    .net单点登录sso的实现

    .NET下的单点登录(Single Sign-On,简称SSO)是一种让用户在多个应用系统间自由切换,只需要一次登录验证的身份管理技术。它提升了用户体验,减少了密码管理的复杂性,尤其适用于企业内部或拥有多个子系统的环境。...

    单点登陆(SSO)案例(二)

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统或应用中登录后,无需再次输入凭证即可访问其他相互信任的系统或应用。它简化了用户的登录过程,提高了用户体验,同时也方便了企业...

    单点登录系统 SSO 设计说明书

    本文档旨在描述单点登录系统(SSO)的设计说明书,旨在提供一个完整、可行的解决方案,以满足集团网站的身份验证需求。单点登录系统的主要目标是提供一个统一的身份验证入口,实现成员网站之间的身份验证共享,提高...

    MVC SSO 单点登陆完整demo

    **SSO(Single Sign-On)单点登录**是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。在Web应用程序中,MVC(Model-View-Controller)架构常被用来构建SSO系统,因为它...

    sso单点登录

    单点登录(Single Sign-On,简称SSO)是一种网络访问控制机制,允许用户在一次登录后,无需再次认证即可访问多个相互信任的应用系统。这种方式极大地提高了用户体验,减少了用户记忆和输入多个账号密码的麻烦,同时...

    sso单点登录源代码

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

    单点登录系统(SSO)+权限管理

    单点登录系统(Single Sign-On,SSO)是一种网络身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。在SSO系统中,用户只需要记住一套登录凭据,提高了用户体验,同时减少了密码...

    sso demo 单点登录

    在这个"SSO demo 单点登录"示例中,我们看到使用了SSH(Spring、Struts2、Hibernate)框架来实现这一功能。SSH是一个常见的Java Web开发技术栈,它提供了模型-视图-控制器(MVC)架构、业务逻辑处理和数据持久化的...

    SSO单点登录SSO技术实现机制

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后即可访问多个相互信任的应用系统,无需多次输入凭证。SSO技术在现代企业中广泛应用,旨在简化用户登录过程,提高效率,同时增强安全性。以下...

    单点登录(SSO)-同域名、不同域名

    ### 单点登录(SSO)技术解析:同域名与不同域名下的实现 #### 背景介绍 在企业的早期发展阶段,所使用的内部系统数量有限,通常为一两个,每个系统都配备有自己的登录模块。这样的架构对于运营人员来说非常便捷,...

    SSO单点登陆

    SSO(Single Sign-On)单点登录是一种网络访问控制机制,允许用户在一次登录后,无需再次认证即可访问多个相互信任的应用系统。这种技术极大地提高了用户体验,减少了密码管理的复杂性,同时也为管理员提供了更高效...

    sso 单点登陆 java 动手写sso

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后,就能访问多个相互关联的应用系统,而无需再次进行身份验证。在Java中实现SSO,我们可以利用Spring Boot框架的强大功能,它提供了丰富的...

Global site tag (gtag.js) - Google Analytics