海纳百川,有容乃大
善于总结,积累软财富
posts - 157,  comments - 428,  trackbacks - 63
说明】  
  本文是  单点登录系统(SSO)详细设计说明书(上篇)的续篇,为了更好地了解该系统请先阅读上篇


3.3
输入输出要求

解释各输入输出数据的类型,并逐项对格式、数值范围、精度等作出准确定义。对软件的数据输出及必须标明的控制输出量进行解释并举例,包括对硬拷贝报告(正常结果输出、状态输出及异常输出)以及图形或显示报告的描述。

3.4 流程逻辑

      3.4.1注册流程图

      3.4.2
会员登录流程图

      3.4.3
会员登出流程图    

      3.4.4 会员修改密码流程图 

       3.4.5 会员找回密码流程图 

       3.4.6 成员网站间跳转流程

          假设从成员网站A跳转到成员网站B,网站A提供网站B的入口链接即可。导航到网站B后,其流程与会员登录流程一样。         
            
          
    流程图使用Visio制作,浏览不方便。特别生产了HTML格式的文档,请从这里下载http://files.cnblogs.com/david-weihw/passport.rar,到本地查看。 


休息一下进广告:
 

3.5对性能的规定

3.5.1精度 

3.5.2灵活性

设计时需要充分考虑功能的扩展,使功能模块具有很强的灵活性。

灵活性因素:

a.操作方式上的变化;

b.运行环境的变化;

c.同其他软件的接口或其他软件对该模块的集成;

d.精度和有效时限的变化;

e.计划的变化或改进。 

3.6 数据管理

3.6.1数据管理能力要求

说明需要管理的文卷和记录的个数、表和文卷的大小规模,要按可预见的增长对数据及其分量的存储要求做出估算。比如,在数据库中设计中会员ID,若采用自增型变量要估算会员的数量级,确定采用(int)数据类型,还(bigint)数据类型。 

3.6.2数据库设计(Passport服务器)

           1.Pass_Member(会员表) 

字段名称

数据类型

说明

备注

mPassID

Bigint

会员ID

自增型,PK(主键)

mName

Nvarchar(64)

会员名

Email作为会员名(创建索引

mPwd

Nvarchar(32)

会员密码

数据库中保存MD5运算的结果

mGBPwd

Nvarchar(32)

会员找回密码

会员找回密码时,生成的密码,会员激活后覆盖会员密码

mWake

Tinyint

会员唤醒

当和成员网站建立映射关系后,唤醒该会员

mMapWebsite

Nvarchar(128)

会员映射的成员站点

建立会员映射关系的成员网站串

mRegDT

Datetime

会员注册时间

 

mAreaCode

Nvarchar(8)

区域代号

 

mBack

Nvarchar(64)

预留字段

预留扩展

注意:成员网站的会员表,需要通过mPassID字段建立与Pass_Member表中会员的映射关系。

       备注:60-11-20添加两个字段(红色高亮)

           2).Member_WebSite(成员网站表)

字段名称

数据类型

说明

备注

mWebID

int

成员网站ID编号

PK(主键)

mWebName

Nvarchar(32)

成员网站名称

 

mWebURL

Nvarchar(32)

成员网站URL

 

mWebIP

Nvarchar(16)

成员网站IP

 

mWebManager

Nvarchar(16)

成员网站管理员

成员网站故障时,便于维护

mWMTel

Nvarchar(16)

成员管理员电话

 

mBack

Nvarchar(64)

预留字段

预留扩展

      3).Member_Ticket(会员票据表)

字段名称

数据类型

说明

备注

mTicketID

Nvarchar(240)

验证票编码

PK(主键)

mPassID

Bigint

会员ID

FK(关联Pass_MembermPassID

issueDT

Datetime

票签发日期时间

 

availDT

datetime

票有效日期时间

 

digitalSign

Nvarchar(32)

票的数字签名

用于保证票的安全

mBack

Nvarchar(64)

预留字段

预留扩展

     

      4).Member_SignRecord(会员登录记录表)

字段名称

数据类型

说明

备注

ID

Bigint

记录ID

PK(主键)

mPassID

Bigint

会员ID

FK(关联Pass_MembermPassID

signinDT

Datetime

登录日期时间

 

signinWebID

int

登录网站ID编号

FK(关联Member_WebSite)

signoutDT

Datetime

登出日期时间

 

signoutWebID

int

登出网站ID编号

FK(关联Member_WebSite)

mBack

Nvarchar(64)

预留字段

预留扩展

     

3.6.3数据处理

       创建作业

1、定时把验证票的记录导入的备份表中,供统计分析使用。

2、定时把一天以上没有激活的会员删除

3.7 Passport服务器与成员网站接口规范

      3.7.1 Passport服务器入口及调用接口

           a.注册入口

            重定向规范:

       成员网站注册重定向地址:http://passport.david.cn/register.aspx

        成员网站入口参数:AppID                成员网站ID

                                      Redirect                         Passport重定向地址

 

        Passport回传参数: Ticket                           cookie验证票加密串

                                          PassID                         会员ID

                                          UserName                    会员名称(Email)

        举例:

              假设AppID=1Redirect=http://www.woall.com/index.aspx

                      Ticket= 53D2FD484DC6FAD75E82 UserName=david@gmail.com

                      PassID=1234

              成员网站重定向地址为:

http://passport.david.cn/register.aspx?AppID=1&Redirect=http://www.woall.com/register.aspx

                    

                     Passport重定向地址为:

http://www.woall.com/index.aspx?Ticket=53D2FD484DC6FAD75E82&PassID=1234&UserName=david@gmail.com

             

             

              Web Service通信规范:

              若用户从成员网站A重定向到Passport服务器注册会员时,Passport调用成员网站Web Service接口,建立Passport数据库与网站A数据库中会员的关联,关联字段为Pass_Member表中的mPassID

              Web Service名称: pass_user_related

              所有者:成员网站

              调用者:Passport服务器

              输入参数PassID:字符串,表示会员ID                        

              输出参数:Flag:布尔型,表示是否成功建立关联

 

              b.登录接口

              验证cookieWeb Service规范:成员网站本地域存在cookie验证票时,使用的接口。

              Web Service名称:web_ticket_auth

              所有者:Passport服务器

              调用者:成员网站

              输入参数:TicketCode 字符串   验证票字符串

                             AppID        字符串 成员网站ID

             

              输出参数:Flag:布尔型,表示验证票是否合法

              验证逻辑:只要数据库中存在该验证票,且在有效期内,即合法。

      

              HTTP[本接口改为了重定向的方式,请参考下面的部分] 请求通信接口规范:成员网站域不存在cookie验证票,查看Passport域是否存在。

              Passpport提供的URLhttp://passport.david.cn/pass_ticket_exist.aspx

              输入参数:无

              输出参数:XML格式的文本(符合RSS2.0标准),XML包含节点

                            Flag:表示是否存在合法的验证票

Ticket:表示验证票字符串

PassID:表示会员ID

UserName:表示Email地址

 

备注:Http请求,从成员网站域,向Passport域发送请求时,并不能访问到在Passport域中向客户端写的cookie值。现改成重定向的方式

       重定向接口规范:

              Passport提供的重定向地址:http://passport.david.cn/pass_ticket_exist.aspx

              输入参数:Redirect    字符串  Passport重定向到成员网站的地址

                    AppID       字符串   成员网站ID

         回传参数:Ticket       字符串   验证票编号

                    PassID       字符串   会员ID

                    UserName     字符串   会员名称

 

     举例:

              假设: Redirect= http://www.woall.com/Public/Login_State.aspx

                                    AppID=1

                                    

                                   Ticket=53D2FD484DC6FAD75E82

                                   PassID=1234

                                   UserName= david@gmail.com

 

                            则:则 成员网站重定向地址为:

http://passport.david.cn/pass_ticket_exist.aspx?AppID=1&Redirect=http://www.woall.com/Public/Login_State.aspx

                                  

                                   Passport重定向地址为:

http://www.woall.com/Public/Login_State.aspx? Ticket=53D2FD484DC6FAD75E82&PassID=1234&UserName=david@gmail.com

 

 

              登录框提交接口规范:成员网站输入Email和密码提交到Passport的地址。

              提交到Passport的地址:http://passport.david.cn/pass_login.aspx

              成员网站入口参数:Email                会员名

                                           Pwd                  会员密码

                                           AppID               成员网站ID

                                           Redirect             Passport重定向地址

 

       Passport回传参数: Ticket               字符串,cookie验证票加密串

                                             PassID             字符串,会员ID

                                             UserName        字符串,会员名称(Email)

Flag               登录成功与否标识 2-成功(会员存在)3-失败(会员名不存在)4-密码不正确,5-数据库错误

              举例:

                     假设:Passport重定向地址为http://www.woall.com/default.aspx

                     则,Passport服务器重定向到成员网站的地址是

http://www.woall.com/default.aspx?Ticket=53D2FD484DC6FAD75E82&PassID=1234&UserName=david@gmail.com&Flag=1

 

 

              c.登出接口

              重定向规范:

              成员网站登出重定向地址:http://passport.david.cn/Public/logout.aspx

              成员网站入口参数:AppID        字符串,成员网站ID

                                           Ticket         字符串,cookie验证票

                                           Redirect      字符串,Passport重定向地址

 

Passport回传参数: Flag           字符串,1-表示成功从Passport登出;0-票不合法;-1-失败(数据库错误)

                                               

              举例:

              假设AppID=1Redirect=http://www.woall.com/index.aspx

                      Ticket= 53D2FD484D

                      Flag=1

              则,成员网站重定向到Passport的地址为

http://passport.david.cn/Public/logout.aspx?AppID=1&Ticket=53D2FD484D&Redirect=http://www.woall.com/index.aspx

 

                            Passport服务器重定向到成员网站的地址为:

http://www.woall.com/index.aspx?Flag=1

 

              d.修改密码接口

              重定向规范:

              成员网站修改密码重定向地址:http://passport.david.cn/Public/pwd_mod.aspx

              成员网站入口参数:AppID        字符串,成员网站ID

                                           Ticket         字符串,cookie验证票

                                           Redirect      字符串,Passport重定向地址

 

       Passport回传参数: Flag    字符串,1-成功;0-验证票不合法;-1-数据库错误

             

              举例:

              假设AppID=1Redirect=http://www.woall.com/index.aspx

                      Ticket= 53D2FD484D

                      Flag=1

              则,成员网站重定向到Passport的地址为

http://passport.david.cn/Public/pwd_mod.aspx?AppID=1&Ticket=53D2FD484D&Redirect=http://www.woall.com/index.aspx

 

                            Passport服务器重定向到成员网站的地址为:

http://www.woall.com/index.aspx?Flag=1


 

 

       e.找回密码接口

       重定向规范:

       成员网站找回密码重定向地址:http://passport.david.cn/Public/getback_pwd.aspx

              成员网站入口参数:AppID        字符串,成员网站ID

                                           Ticket         字符串,cookie验证票

                                           

Passport回传参数: Passport服务器发送密码激活地址(其中有验证票字符串)到会员邮箱,供激活密码。

                                             激活地址:

http://passport.david.cn/pwd_awake.aspx?Ticket=53D2FD484D

              举例:

              假设AppID=1Ticket= 53D2FD484D

                      

              则,成员网站重定向到Passport的地址为

http://passport.david.cn/getback_pwd.aspx?AppID=1&Ticket=53D2FD484D

                    

3.8故障处理要求

列出可能的软件、硬件故障以及对各项性能而言所产生的后果和对故障处理的要求。

 

3.9其他专门要求

如用户单位对安全保密的要求,对使用方便的要求,对可维护性、可补充性、易读性、可靠性、运行环境可转换性的特殊要求等。

 

4、运行环境规定

4.1设备

列出运行该软件所需要的硬设备。

说明其中的新型设备及其专门功能,包括:

a.处理器型号及内存容量;

b.外存容量、联机或脱机,设备的型号及数量;

c.输入及输出设备的型号和数量,联机或脱机;

d.数据通信设备的型号和数量;

e 功能键及其他专用硬件

 

4.2支持软件

           暂时不采用第三方插件或其它软件。

 

 

4.3控制

说明控制该软件的运行的方法和控制信号,并说明这些控制信号的来源。

总结
               按照系统的说明书,本人已经实现了该系统,并且实施过程的修改都作了说明。
      平台环境:
                        1、win2003, IIS6.0, MS SQL 2000,VS.NET  C# 1.1 
                        2、wind2003,Apache2.2.4, MySql5.0, PHP5.1 
              
     重点:
        验证票的生成,在各个网站所在的域中共享验证票,验证票的安全(3DES,数字签名,验证票时间戳)


关键词
  单点登录系统, 单一登录系统, SSO系统, cookie验证票,IPO表, Visio,3DES加密,数字签名 MD5,Web Service
                 
    
      
  
posted on 2007-01-29 14:58 海纳百川 阅读(6213) 评论(32)  编辑 收藏 所属分类: 互联网WEB开发/.NET

FeedBack:
2007-01-29 15:27 | onekey      
不错,我最近也要实现SSO登录 先谢谢了。Visio下载不下来

另外你的接口表达没有必要写那么繁琐吧,把页面都搞乱了

b.登录接口
//TicketCode 字符串 验证票字符串
//AppID 字符串 成员网站ID
bool web_ticket_auth(string TicketCode,string AppID)

这样写大家也能看明白的。
  回复  引用  查看    
2007-01-29 15:36 | 亚历山大同志      
呵呵,提个建议,这个系统貌似无法复用,当你下次还需要SSO的时候,只能够改代码咯
  回复  引用  查看    
2007-01-29 15:47 | 亚历山大同志      
PS一下,这个系统详细说明书还不够详细阿,如果根据SPP的简化模板都还差很多东西啊:},多写点,辛苦鸟
  回复  引用  查看    
#4楼 [楼主]
2007-01-29 15:53 | 海纳百川      
To 亚历山大同志,

请说清楚一点好吗?下次SSO的时候,怎么要修改代码呢?
  回复  引用  查看    
2007-01-29 16:49 | 亚历山大同志      
http://www.cnblogs.com/Alexander-Lee/archive/2007/01/29/633595.html
这个样子的组件才能复用嘛
  回复  引用  查看    
2007-01-29 19:55 | 高海东      
有完整的项目例子吗
  回复  引用  查看    
#7楼 [楼主]
2007-01-30 08:48 | 海纳百川      
To 高海东,

本人认为说明书比项目代码来的更重要。完整的项目例子是有,但由于涉及到公司的利益是万万不能提供给你的,请谅解。不明白的地方我们可以讨论,这样带给你的帮助会更大的。
  回复  引用  查看    
2007-01-31 00:19 | yunhuasheng      
好!!
  回复  引用  查看    
2007-02-04 16:02 | Anders Cui      
请问,不用验证票直接对PassId加密可以吗?
感觉验证票作用不大
  回复  引用  查看    
#10楼 [楼主]
2007-02-04 21:22 | 海纳百川      
To Anders Cui ,

单点登录系统的本质是登录状态在各个网站间的共享(指web 应用程序)。登录状态具体用什么方式来实现都是可以的。所以说用PassId加密作为身份验证的令牌是可以的。利用验证票,用户的其它的信息可以保存到验证票中,更方便一些。
  回复  引用  查看    
2007-02-05 15:41 | Anders Cui      
多谢了
  回复  引用  查看    
2007-02-05 16:03 | hii [未注册用户]
问一个,很多SSO系统都要实现在登陆服务器down掉的情况下,各成员站点要能照常使用,这个方案这一点能实现吗?

另外该SSO系统能否实现保留原来各成员站点的登陆界面,只要在任一成员站点登陆,便可贯通该登陆用户所有有权限的成员站点?

怎样能够很好的实现这一点呢?
  回复  引用    
#13楼 [楼主]
2007-02-06 10:29 | 海纳百川      
To hii ,

当登录服务器宕机时,只是不能登录,各个成员网站能照常使用,但是以访客的身份浏览。

因为登录服务器与各个成员网站存在用户的映射关系,用户个性信息,比如皮肤,选择的模块等等,是保存到成员网站数据库中的,故可以保留登陆界面。



  回复  引用  查看    
2007-02-06 15:30 | hii [未注册用户]
@ 海纳百川
----故可以保留登陆界面。
但按这个方案似乎保留在那也没什么意义了。好象要登陆系统就一定得从SSO的新做的登陆界面登陆啊。。。。。
  回复  引用    
2007-02-08 15:34 | Anders Cui      
请问,注销的时候,怎样将已登录的网站一一注销?
  回复  引用  查看    
#16楼 [楼主]
2007-02-10 09:17 | 海纳百川      
To Anders Cui,

两种办法:
1、利用重定向注销,重定向到各个网站删除cookie验证票
2、修改数据库中cookie验证票,使其失效。
  回复  引用  查看    
2007-02-12 10:24 | Anders Cui      
@海纳百川
谢谢:)
我本来想用重定向的方法的
比如获得一个已登录网站的列表
如果在for循环中逐一注销的话,
如何在这些页面间传递信息,for循环如何完成?
  回复  引用  查看    
2007-02-12 13:25 | 臭石头      
呵呵,同意Anders Cui。

我们公司的SSO没有保存工作票,所以,注销的时候,只要任意一个站点注销就可以了
  回复  引用  查看    
#19楼 [楼主]
2007-02-12 13:45 | 海纳百川      
To Anders Cui,

假设:有成员网站A、B、C、D

SSO->A->SSO->B->SSO->C->SSO->D->SSO
或者
SSO-A->B->C->D->SSO

重定向的接口由你自己定义,或者成员网站域中的cookie不保存验证票,只保存到数据库中,当任何一个成员网站注销时,使数据库中的验证票失效即可。

  回复  引用  查看    
2007-02-12 14:23 | 臭石头      
如果是把工作票保存在数据库,你的意思是不是多个成员站点共用一个库?那这样做SSO意义就不大了。
  回复  引用  查看    
#21楼 [楼主]
2007-02-12 15:55 | 海纳百川      
To 臭石头,

成员网站不会使用同一个数据库的,SSO数据库中只保存用户的基本信息(验证信息),用户的验证票是保存在成员网站的cookie中和SSO数据库中的。

看来你对SSO很有研究,请说一下你的方案好吗?
  回复  引用  查看    
2007-02-12 16:09 | Anders Cui      
@海纳百川
@臭石头
我觉得还是应该同时使用Cookie和SSO数据库
如果Cookie不可用,可以使用数据库和Session;
如果Cookie可用,则可以减少很多成员网站与SSO Server的交互。
  回复  引用  查看    
2007-02-12 16:39 | 臭石头      
首先第一点,我们的SSO不会和任何成员网站进行直接通信的,所有数据传递,都是通过重定向来实现。

其次,我们也不会在成员站点保存Cookie。同一个用户,再次进入同一个站点的时候,一定会重定向到SSO,如果在SSO这个域里面保存了密码(使用Cookie),在SSO使用Cookie信息完成登陆后,马上重定向回到成员站点,在网速足够快的情况下,一般是看不到这两次跳转的。

如果你说在成员站点的域使用Cookie来保存工作票,呵呵,第二个人使用这个计算机的时候,默认就是第一个人的登录了;还有,如果这个票被窃取了,包括Cookie被窃取,或者在网络传输过程中Cookie票被窃取,都有可能……下面的不说了,呵呵。

而我们的SSO,这个Cookie票,就这里有用,你偷走了也没用。这方面涉及公司机密,不好意思。
  回复  引用  查看    
#24楼 [楼主]
2007-02-12 18:11 | 海纳百川      
To 臭石头,

1、你说的第二点是不是也存在“第二个人使用这个计算机的时候,默认就是第一个人的登录了”。

2、如果从SSO重定向到成员网站时,这个重定向是两台服务器之间的数据交互,在安全上可以防止监听。退一步讲,我们不是还可以对cookie验证票进行加密吗?
  回复  引用  查看    
2007-02-12 19:00 | 臭石头      
如果用户使用了保存密码,是在SSO这个域里面保存Cooki票的,而不是成员站点,所以,保存密码只有一个,一旦保存,就可以进入所有成员站点,如果不保存,进入任意成员站点都需要重定向到SSO进行登录。

如果你使用两台服务器之间直接进行数据交互(典型的是Web服务),根本做不到SSO的,呵呵。因为SSO并不知道多个成员站点请求登录的信息是否来自同一个客户端。如果不相信,你可以试试看,要是行得通,记得跟我说一声。

即使你对验证票进行加密,我同样可以拦截使用,根本不用关心怎么解密,因为解密是成员站点的事情,我只是模仿客户端来欺骗成员站点服务器而已。
  回复  引用  查看    
2007-04-26 20:26 | shooter [未注册用户]
关于那个票是根据什么怎么生成的呀,生成的原理什么,
  回复  引用    
2007-04-27 15:54 | david-weihw      
@shooter

可以在MSDN查看一下cookie验证票相关的资料。

  回复  引用  查看    
2007-04-27 16:24 | david-weihw      
@臭石头
1、你说的“我们的SSO不会和任何成员网站进行直接通信的,所有数据传递,都是通过重定向来实现。”那么这个数据库被监听,安全不会受到威胁吗?

2、你说的“我们也不会在成员站点保存Cookie。同一个用户,再次进入同一个站点的时候,一定会重定向到SSO,如果在SSO这个域里面保存了密码(使用Cookie),在SSO使用Cookie信息完成登陆后,马上重定向回到成员站点,在网速足够快的情况下,一般是看不到这两次跳转的。”是不是存在用户A,利用电脑B登录成功后,离开了。用户C,利用电脑B,以用户A的身份登录的问题?

3、你们的验证票只在SSO域中保存,但都是要保存到客户端硬盘上的,保存在一个域中,还是保存到多个域中,对伪造cookie来讲不都是一样?你说,即使伪造了cookie验证票也没有用,这句话不能理解?

  回复  引用  查看    
2007-04-28 01:32 | 大石头      
1,如果你的数据库都被监听了,那只能怪你自己了。谁让你暴露数据库呀。

2,是的,完全正确。不要在成员站点上保存验证票呀,否则,下次用户登陆,就不需要经过SSO了,这样做的SSO,不算SSO。

3,就保存到SSO服务器所在的一个域中。但是,保存的不是验证票,那是另外的一个东西,跟验证票无关,它只能用于登陆SSO服务器。真正的验证票,是指跳转过程中传输的那个票。SSO域中保存的这个,和普通的保存用户名密码是一样的,所以,完全可以伪造。但是,你可以这样想,如果是你,你会在不是自己的计算机上选择保存密码么?不会吧!呵呵
  回复  引用  查看    
2007-04-28 01:33 | 大石头      
哦,忘了提醒你,我网名是“大石头”。原来由于博客园的问题,不能使用这个名字,只好用“臭石头”,现在,大石头 回来了^_^
  回复  引用  查看    
2007-04-29 09:47 | david-weihw      
@大石头

非常感谢您回复。

你说的“就保存到SSO服务器所在的一个域中。但是,保存的不是验证票,那是另外的一个东西,跟验证票无关,它只能用于登陆SSO服务器。真正的验证票,是指跳转过程中传输的那个票。”

1、保存在SSO服务器域的是个什么东东?在保证不泄密的前提下,你可以说说吗?
2、这个东东,是保存在cookie中,session中还是数据库中呢?
  回复  引用  查看    
2008-07-09 16:20 | pantu0914 [未注册用户]
请问楼主,怎样整合已有会员到单点登录系统中呢?
  回复  引用    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-01-07 15:58 编辑过


相关链接: