SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
单点登录解决方案的架构与实现
     @宝玉xp
     2011.4
什么是单点登录?

单点登录
CLIENT -> WEB [GTALK -> GMAIL]
CLIENT -> WEB [MSN->HOTMAIL]
WEB -> WEB [GOOGLE READER -> GMAIL]
单点登录定义
•    单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗
     的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,
     只需要登录一次,即 通过一个应用中的安全验证后,再访问其他应用中的受
     保护资源时,不再需要重新登录验证。
以msn为例分析

客户端登录过程
LIVE MESSENGER登录过程
https://login.live.com/ppsecure/sha1auth.srf?lc=1033




https://mail.live.com/rru=inbox&wlexpid=80097F54CF93..........
LIVE MESSENGER 登录HOTMAIL传输的数据
•    POST https://login.live.com/ppsecure/sha1auth.srf?lc=1033

•  token=ct%3D1302192303%26bver%3D7%26wa%3Dwsignin1.0%26ru%3Dhttp://mail.live.com/%253Frru
     %253Dinbox%2526wlexpid%253D80097F54CF934247916123482695F310%2526wlrefapp%253D2%26pl
     %3DMBI%26appid%3D%257B7108E71A-9926-4FCB-BCC9-9A9D3F32E423%257D%26da%3D
     %253CEncryptedData%2520xmlns%253D%2522http://www.w3.org/2001/04/xmlenc%2523%2522%2520Id
     %253D%2522BinaryDAToken0%2522%2520Type%253D%2522http://www.w3.org/2001/04/xmlenc
     %2523Element%2522%253E%253CEncryptionMethod%2520Algorithm%253D%2522http://www.w3.org/2001/04/
     xmlenc%2523tripledes-cbc%2522%253E%253C/EncryptionMethod%253E%253Cds:KeyInfo%2520xmlns:ds
     %253D%2522http://www.w3.org/2000/09/xmldsig%2523%2522%253E%253Cds:KeyName%253Ehttp://
     Passport.NET/STS%253C/ds:KeyName%253E%253C/ds:KeyInfo%253E%253CCipherData%253E
     %253CCipherValue%253EAdn%252BcqR1gmiTLVQGs8qXIcBFJ0QPGi7O
     %252BRbRjyoR0F2Iz94dGP8s9qoe3GdGFUt9/qguaX1ygP/ghA%252B7m6eyYgUjKr6ZLQXL3lvi/
     2%252BAiYeEdRp3dTFqifsjTdc6a0el3rxnayb5yHiP3YbSzknVcqayqszMLnZIIuUxrDVcHGuobAIqCHrWIwiApfYJCj
     bbnzXNr4GIqbueQkebpn7JU16bkCion1neNxSg58P7XLEqxzAce3ZUNZWoUDnT/6OtDCkuCmxewrn3sr5Ugh/
     FSoW
     %252B3KGledTk3brKOu8Uu7YNM5Y2k4K90Su8U3zXCyhJXkrVJCzRhJCvOCuWUs4DTEs9ocxKUSOICqaicIc6t
     TJYfyLlWHhOmsigGzVj2B8NOysbsr/V6KnLu2vgEWkYr0j/
     ZYYrAa1R0AuIep0i0hPHUTeOz7HAV5PzwciNA33YIgzyGn3ivmFFcjkxRwmesidmtXopLUSj
     %252BYIqUqXQ2p11vmQv9UJYCzWghtNS%253C/CipherValue%253E%253C/CipherData%253E%253C/
     EncryptedData%253E%26nonce%3DgGOWyChz45t49%252BfhhBsK5lPq/swIKn%252BZ%26hash
     %3DXvO2NYVpeXsR8cCa7TEv4JLzEVw%253D
TOKEN 数据
•    ct=1302192303
•    bver=7
•    wa=wsignin1.0




•  ru         =http://mail.live.com/%3Frru%3Dinbox%26wlexpid%3D80097F54CF934247916123482695F310%26wlrefapp%3D2

•    pl=MBI




•  appid                  =%7B7108E71A-9926-4FCB-BCC9-9A9D3F32E423%7D




•  da          =%3CEncryptedData%20xmlns%3D%22http://www.w3.org/2001/04/xmlenc%23%22%20Id%3D%22BinaryDAToken0%22%20Type%3D%22http://www.w3.org/2001/04/xmlenc
     %23Element%22%3E%3CEncryptionMethod%20Algorithm%3D%22http://www.w3.org/2001/04/xmlenc%23tripledes-cbc%22%3E%3C/EncryptionMethod%3E%3Cds:KeyInfo
     %20xmlns:ds%3D%22http://www.w3.org/2000/09/xmldsig%23%22%3E%3Cds:KeyName%3Ehttp://Passport.NET/STS%3C/ds:KeyName%3E%3C/ds:KeyInfo%3E%3CCipherData%3E
     %3CCipherValue%3EAdn%2BcqR1gmiTLVQGs8qXIcBFJ0QPGi7O%2BRbRjyoR0F2Iz94dGP8s9qoe3GdGFUt9/qguaX1ygP/ghA%2B7m6eyYgUjKr6ZLQXL3lvi/
     2%2BAiYeEdRp3dTFqifsjTdc6a0el3rxnayb5yHiP3YbSzknVcqayqszMLnZIIuUxrDVcHGuobAIqCHrWIwiApfYJCjbbnzXNr4GIqbueQkebpn7JU16bkCion1neNxSg58P7XLEqxzAce3ZUNZ
     WoUDnT/6OtDCkuCmxewrn3sr5Ugh/FSoW
     %2B3KGledTk3brKOu8Uu7YNM5Y2k4K90Su8U3zXCyhJXkrVJCzRhJCvOCuWUs4DTEs9ocxKUSOICqaicIc6tTJYfyLlWHhOmsigGzVj2B8NOysbsr/V6KnLu2vgEWkYr0j/
     ZYYrAa1R0AuIep0i0hPHUTeOz7HAV5PzwciNA33YIgzyGn3ivmFFcjkxRwmesidmtXopLUSj%2BYIqUqXQ2p11vmQv9UJYCzWghtNS%3C/CipherValue%3E%3C/CipherData%3E%3C/
     EncryptedData%3E
•    nonce=gGOWyChz45t49%2BfhhBsK5lPq/swIKn%2BZ
•    hash=XvO2NYVpeXsR8cCa7TEv4JLzEVw%3D
DA
•    <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" Id="BinaryDAToken0" Type="http://
     www.w3.org/2001/04/xmlenc#Element">
•      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
•    <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
•      <ds:KeyName>http://Passport.NET/STS</ds:KeyName>
•      </ds:KeyInfo>
•    <CipherData>
•      <CipherValue>Adn+cqR1gmiTLVQGs8qXIcBFJ0QPGi7O+RbRjyoR0F2Iz94dGP8s9qoe3GdGFUt9/
     qguaX1ygP/ghA+7m6eyYgUjKr6ZLQXL3lvi/
     2+AiYeEdRp3dTFqifsjTdc6a0el3rxnayb5yHiP3YbSzknVcqayqszMLnZIIuUxrDVcHGuobAIqCHrWIwiApfYJCj
     bbnzXNr4GIqbueQkebpn7JU16bkCion1neNxSg58P7XLEqxzAce3ZUNZWoUDnT/
     6OtDCkuCmxewrn3sr5Ugh/FSoW
     +3KGledTk3brKOu8Uu7YNM5Y2k4K90Su8U3zXCyhJXkrVJCzRhJCvOCuWUs4DTEs9ocxKUSOICqaicIc6tT
     JYfyLlWHhOmsigGzVj2B8NOysbsr/V6KnLu2vgEWkYr0j/
     ZYYrAa1R0AuIep0i0hPHUTeOz7HAV5PzwciNA33YIgzyGn3ivmFFcjkxRwmesidmtXopLUSj
     +YIqUqXQ2p11vmQv9UJYCzWghtNS</CipherValue>
•      </CipherData>
•    </EncryptedData>
GTALK打开登录GMAIL传输的数据
•    GET https://www.google.com/accounts/TokenAuth


•  auth         =APh-3FxTAOVo71-77U8NQqkkMpJfIzHHi3ClRqCJzSRrft5CWIGKk6Fu5EwlCxmS0sloWRId1x18w
     CRrhrpA2hwNYyijP4AAu6YwENEFnzYY2nc8jOxmkkEJ0N8qRh9Xze3kr-
     _GiVVzBxzHOHxK0ZH2vge5JJyM0IEiTH69Hx8XYZ86qYi_-
     rEKQMlYdLuGE4PJM5pULCi_895SjX2CNU9jyv-6fTSS72nTOzrBDJ0kV9tW05gxNtdBQSvfldctE8GSpiDEds0B8o
     TuZAbgpnp17SO_MzEKGJ7_kGbAU66ea_Rn2_MVitDjrqIp8rvN_GWrRWfLtOPgFVBmlFqPrrtAKWQbAz9HhyVqv
     4NptuY0LH_BkI4Db82Ws3I3g-k3JGrRIG3wiw5yyt8t7zw0-OGU4yJkr1citxw4h30cIRybVTmX3WIaW1c_J-
     fUpwmwFcVCQ47V09w-bdf3jgSH6TY_czbKn-ziqrqE6tbeACdw3BNLKRJ8y7-01Tbu4EOOYufKxiG--
     Z1ONFXG8uh8pkldJDQQ1XLX3RvgS3kOJsKk-Rk-0TtMtW-
     crBelq83XM3x2NMTUWguRWkkrdPP18V7x97Ez_UeMaETUP2cWau0xzhKo9yL1Lws,
•    service=mail


•  continue                =https%3A%2F%2Fmail.google.com%2Fmail



•  source              =googletalk
关键数据
•    登录网站地址(Login Portal Url)
      •  https://login.live.com/ppsecure/sha1auth.srf?lc=1033
      •  https://www.google.com/accounts/TokenAuth
•    返回地址(Return Url)
      •  ru=http://mail.live.com/%3Frru%3Dinbox%26wlexpid
         %3D80097F54CF934247916123482695F310%26wlrefapp%3D2
      •  continue=https%3A%2F%2Fmail.google.com%2Fmail
•    应用Id(App Id)
      •  appid=%7B7108E71A-9926-4FCB-BCC9-9A9D3F32E423%7D
      •  source=googletalk
•    授权凭证(Credential)
如何来保护授权凭证中的信息

数据如何保护?
数据加密
•    可逆加密 or 不可逆加密?
•    可逆加密算法
     •  DES, Triple-DES, AES, …
•    公共密钥 or 各应用独立密钥?
•    密钥
     •  每个应用系统拥有一个唯一的AppId和一个与其对应的Credential密钥。
     •  不同的应用系统使用不同的Credential密钥,目的是防止截取或伪造单点登
        录系统的Credential,并防止两个SSO应用系统之间互相截取或伪造对方的
        Credential。
如何管理SSO应用的密钥?

密钥管理
密钥管理
•    SSO Key Server 统一登记和管理
•    根据AppId区分应用系统
•    SSO应用系统向SSO Service获取属于自己的密钥
•    密钥有一定时效性,会过期
授权凭证里面都有什么?

授权凭证信息
授权凭证(CREDENTIAL)
•    SSO应用系统登录时,SSO Portal会验证用户身份,并向应用返回一个代表用户身
     份的Credential
•    Credential一般以BASE64字符串的形式存在
•    Credential中包含的加密信息, SSO应用系统均拥有Credential密钥,可解开该
     Credential以获取用户的身份信息。
•    Credential具有一定的有效期。
•    Credential包含的信息包括:
      •  加密信息:用户ID、用户名、Credential生成时间、Credential失效时间
      •  未加密信息:对应密钥编号、AppId
授权凭证的结构
•    Credential一般采用明文结构内含密文结构的形式。
•    明文部分
     •  对应密钥编号
        为保证在密钥更换期间,旧密钥加密的Credential能被正常解密,所以我们需
        要在Credential中标记出Credential对应的密钥号码
     •  AppId,对应App
•    密文部分
     •  保存加密后的用户信息,客户端不可读。
     •  服务器端解密后可从密文中获取用户的身份标识。
授权凭证

        属性名                 说明
KeyId           凭证生成时使用的密钥的标识,服务器端与客户端均
                可读,但对客户端透明。
                例如:
                0:0号密钥
                1:1号密钥
                2:2号密钥
                 
AppId           每个SSO应用系统申请的编号,唯一代表一个SSO应
                用系统。
EncryptedData   加密后的用户信息,客户端不可读。服务器端解密后
                可从明文中获取用户的身份标识。
ENCRYPTEDDATA解密

         属性名                  说明

Nonce

CreateTime       凭证生成时间

ExpireTime       凭证过期时间

UserId           用户Id

UserIp           用户登录IP

Username/Email   用户名或Email

Hash             SHA1计算的散列值,防止数据被修改
如何验证一个授权凭证是否合法?取出里面的信息?

授权凭证的验证和解析
两种授权凭证验证解析方案对比

从SSO服务器验证               应用自行验证


  Credential              Credential




    App         SSO         App        SSO Key
   Server      Server      Server       Server
授权凭证的验证流程

          根据密钥编号
校验AppId   对应密钥解密   校验Hash值
            数据




          校验授权凭证
更新授权凭证              校验IP
           是否到期
客户端单点登录流程?

客户端单点登录
SSO
客户端
                   Portal

  1. 提交账号密码登录
  2. 返回客户端授权凭证
  3. 保持登录[带上旧凭证]
  4. 返回客户端新的授权凭证
SSO
客户端       浏览器            应用站点1
                                             Portal

  5. 点击站点链接
              6. 访问页面[使用客户端凭证]
              7. 302跳转[带上返回地址]
              8. 请求SSO网页[带上返回地址]
              9. 302跳转[设置SSO Portal Cookie,Url中带上Site 1凭证
              10. 访问页面[Url带凭证]
              11. 200 OK[设置凭证到Cookie]
多个站点之间如何共享登录?

不同站点间的单点登录
用户              浏览器            应用站点1        SSO站点


     1. 浏览网站1
                  2. 访问页面
                  3. 302跳转[带上返回地址]
                  4. 请求登录网页[带上返回地址]
                  5. 200 OK[登录表单]
     6. 输入账号密码
                  7. 提交表单[带上返回地址]
                  8. 302跳转[设置Cookie,Url中带上凭证]
                  9. 访问页面[Url带凭证]
                  10. 200 OK[设置凭证到Cookie]
                  11. 访问页面[Cookie带凭证]
                  12. 200 OK
用户               浏览器            应用站点2        SSO站点


     13. 浏览网站2
                   14. 访问页面
                   15. 302跳转[带上返回地址]
                   16. 请求登录网页[带上返回地址]
                   17. 302跳转[设置Cookie,Url中带上凭证]
                   18. 访问页面[Url带凭证]
                   19. 200 OK[设置凭证到Cookie]
                   20. 访问页面[Cookie带凭证]
                   21. 200 OK
整体架构如何?

系统架构
SSO Portal            SSO Key Server




App 1        App n   Site 1       Site 2       Site n
提问时间

Q&A
谢谢

THANKS

Contenu connexe

Similaire à 单点登录解决方案的架构与实现

11个步骤应用Spring Security 3
11个步骤应用Spring Security 311个步骤应用Spring Security 3
11个步骤应用Spring Security 3Underwind
 
Accessmanager
AccessmanagerAccessmanager
AccessmanagerJim Jiang
 
0502 Windwos Server 2008 Card Space 新一代身份驗證機制
0502 Windwos Server 2008 Card Space 新一代身份驗證機制0502 Windwos Server 2008 Card Space 新一代身份驗證機制
0502 Windwos Server 2008 Card Space 新一代身份驗證機制Timothy Chen
 
zend framework in web services
zend framework in web serviceszend framework in web services
zend framework in web services王 承石
 
淘宝开放产品前端实践
淘宝开放产品前端实践淘宝开放产品前端实践
淘宝开放产品前端实践taobao.com
 
與 Sign in with Apple 的愛恨情仇 @ iPlayground2020
與 Sign in with Apple 的愛恨情仇 @ iPlayground2020與 Sign in with Apple 的愛恨情仇 @ iPlayground2020
與 Sign in with Apple 的愛恨情仇 @ iPlayground2020Johnny Sung
 
如何設定多重SSID(A2004NS )
如何設定多重SSID(A2004NS )如何設定多重SSID(A2004NS )
如何設定多重SSID(A2004NS )臺灣塔米歐
 
kintone 基本操作說明指南
kintone 基本操作說明指南kintone 基本操作說明指南
kintone 基本操作說明指南cybozutw
 
05.如何設定多重ssid
05.如何設定多重ssid05.如何設定多重ssid
05.如何設定多重ssid臺灣塔米歐
 
Google Apps Account as OpenID (中文)
Google Apps Account as OpenID (中文)Google Apps Account as OpenID (中文)
Google Apps Account as OpenID (中文)Timothy Chien
 
OpenWebSchool - 11 - CodeIgniter
OpenWebSchool - 11 - CodeIgniterOpenWebSchool - 11 - CodeIgniter
OpenWebSchool - 11 - CodeIgniterHung-yu Lin
 
Laradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHLaradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHSzuping Wang
 
Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振 Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振 imShining @DevCamp
 
網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知Justin Lin
 
Node-red Chatbot module
Node-red Chatbot moduleNode-red Chatbot module
Node-red Chatbot module承翰 蔡
 

Similaire à 单点登录解决方案的架构与实现 (20)

CAREY-Tech SSO
CAREY-Tech SSOCAREY-Tech SSO
CAREY-Tech SSO
 
11个步骤应用Spring Security 3
11个步骤应用Spring Security 311个步骤应用Spring Security 3
11个步骤应用Spring Security 3
 
Accessmanager
AccessmanagerAccessmanager
Accessmanager
 
0502 Windwos Server 2008 Card Space 新一代身份驗證機制
0502 Windwos Server 2008 Card Space 新一代身份驗證機制0502 Windwos Server 2008 Card Space 新一代身份驗證機制
0502 Windwos Server 2008 Card Space 新一代身份驗證機制
 
zend framework in web services
zend framework in web serviceszend framework in web services
zend framework in web services
 
淘宝开放产品前端实践
淘宝开放产品前端实践淘宝开放产品前端实践
淘宝开放产品前端实践
 
與 Sign in with Apple 的愛恨情仇 @ iPlayground2020
與 Sign in with Apple 的愛恨情仇 @ iPlayground2020與 Sign in with Apple 的愛恨情仇 @ iPlayground2020
與 Sign in with Apple 的愛恨情仇 @ iPlayground2020
 
如何設定多重SSID(A2004NS )
如何設定多重SSID(A2004NS )如何設定多重SSID(A2004NS )
如何設定多重SSID(A2004NS )
 
如何設定多重SSID
如何設定多重SSID如何設定多重SSID
如何設定多重SSID
 
如何設定多重SSID?
如何設定多重SSID?如何設定多重SSID?
如何設定多重SSID?
 
kintone 基本操作說明指南
kintone 基本操作說明指南kintone 基本操作說明指南
kintone 基本操作說明指南
 
05.如何設定多重ssid
05.如何設定多重ssid05.如何設定多重ssid
05.如何設定多重ssid
 
如何設定多重ssid
如何設定多重ssid如何設定多重ssid
如何設定多重ssid
 
Google Apps Account as OpenID (中文)
Google Apps Account as OpenID (中文)Google Apps Account as OpenID (中文)
Google Apps Account as OpenID (中文)
 
OpenWebSchool - 11 - CodeIgniter
OpenWebSchool - 11 - CodeIgniterOpenWebSchool - 11 - CodeIgniter
OpenWebSchool - 11 - CodeIgniter
 
Laradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHLaradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTH
 
Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振 Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振
 
網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知
 
Node-red Chatbot module
Node-red Chatbot moduleNode-red Chatbot module
Node-red Chatbot module
 
專題總結
專題總結專題總結
專題總結
 

Plus de jeffz

Wind.js无障碍调试与排错
Wind.js无障碍调试与排错Wind.js无障碍调试与排错
Wind.js无障碍调试与排错jeffz
 
JavaScript现代化排错实践
JavaScript现代化排错实践JavaScript现代化排错实践
JavaScript现代化排错实践jeffz
 
Jscex:案例、阻碍、体会、展望
Jscex:案例、阻碍、体会、展望Jscex:案例、阻碍、体会、展望
Jscex:案例、阻碍、体会、展望jeffz
 
Jscex:案例、经验、阻碍、展望
Jscex:案例、经验、阻碍、展望Jscex:案例、经验、阻碍、展望
Jscex:案例、经验、阻碍、展望jeffz
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)jeffz
 
深入浅出Jscex
深入浅出Jscex深入浅出Jscex
深入浅出Jscexjeffz
 
Mono for .NET Developers
Mono for .NET DevelopersMono for .NET Developers
Mono for .NET Developersjeffz
 
Javascript Uncommon Programming
Javascript Uncommon ProgrammingJavascript Uncommon Programming
Javascript Uncommon Programmingjeffz
 
Jscex: Write Sexy JavaScript (中文)
Jscex: Write Sexy JavaScript (中文)Jscex: Write Sexy JavaScript (中文)
Jscex: Write Sexy JavaScript (中文)jeffz
 
Jscex: Write Sexy JavaScript
Jscex: Write Sexy JavaScriptJscex: Write Sexy JavaScript
Jscex: Write Sexy JavaScriptjeffz
 
Windows Phone应用开发心得
Windows Phone应用开发心得Windows Phone应用开发心得
Windows Phone应用开发心得jeffz
 
分布式版本管理
分布式版本管理分布式版本管理
分布式版本管理jeffz
 
使用.NET构建轻量级分布式框架
使用.NET构建轻量级分布式框架使用.NET构建轻量级分布式框架
使用.NET构建轻量级分布式框架jeffz
 
针对iPad平台的高性能网站架构
针对iPad平台的高性能网站架构针对iPad平台的高性能网站架构
针对iPad平台的高性能网站架构jeffz
 
企业开发领域的语言特性
企业开发领域的语言特性企业开发领域的语言特性
企业开发领域的语言特性jeffz
 
The Evolution of Async-Programming on .NET Platform (TUP, Full)
The Evolution of Async-Programming on .NET Platform (TUP, Full)The Evolution of Async-Programming on .NET Platform (TUP, Full)
The Evolution of Async-Programming on .NET Platform (TUP, Full)jeffz
 
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)jeffz
 
The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)jeffz
 
大话程序员可用的算法
大话程序员可用的算法大话程序员可用的算法
大话程序员可用的算法jeffz
 
面向对象与生活
面向对象与生活面向对象与生活
面向对象与生活jeffz
 

Plus de jeffz (20)

Wind.js无障碍调试与排错
Wind.js无障碍调试与排错Wind.js无障碍调试与排错
Wind.js无障碍调试与排错
 
JavaScript现代化排错实践
JavaScript现代化排错实践JavaScript现代化排错实践
JavaScript现代化排错实践
 
Jscex:案例、阻碍、体会、展望
Jscex:案例、阻碍、体会、展望Jscex:案例、阻碍、体会、展望
Jscex:案例、阻碍、体会、展望
 
Jscex:案例、经验、阻碍、展望
Jscex:案例、经验、阻碍、展望Jscex:案例、经验、阻碍、展望
Jscex:案例、经验、阻碍、展望
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)
 
深入浅出Jscex
深入浅出Jscex深入浅出Jscex
深入浅出Jscex
 
Mono for .NET Developers
Mono for .NET DevelopersMono for .NET Developers
Mono for .NET Developers
 
Javascript Uncommon Programming
Javascript Uncommon ProgrammingJavascript Uncommon Programming
Javascript Uncommon Programming
 
Jscex: Write Sexy JavaScript (中文)
Jscex: Write Sexy JavaScript (中文)Jscex: Write Sexy JavaScript (中文)
Jscex: Write Sexy JavaScript (中文)
 
Jscex: Write Sexy JavaScript
Jscex: Write Sexy JavaScriptJscex: Write Sexy JavaScript
Jscex: Write Sexy JavaScript
 
Windows Phone应用开发心得
Windows Phone应用开发心得Windows Phone应用开发心得
Windows Phone应用开发心得
 
分布式版本管理
分布式版本管理分布式版本管理
分布式版本管理
 
使用.NET构建轻量级分布式框架
使用.NET构建轻量级分布式框架使用.NET构建轻量级分布式框架
使用.NET构建轻量级分布式框架
 
针对iPad平台的高性能网站架构
针对iPad平台的高性能网站架构针对iPad平台的高性能网站架构
针对iPad平台的高性能网站架构
 
企业开发领域的语言特性
企业开发领域的语言特性企业开发领域的语言特性
企业开发领域的语言特性
 
The Evolution of Async-Programming on .NET Platform (TUP, Full)
The Evolution of Async-Programming on .NET Platform (TUP, Full)The Evolution of Async-Programming on .NET Platform (TUP, Full)
The Evolution of Async-Programming on .NET Platform (TUP, Full)
 
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
 
The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)
 
大话程序员可用的算法
大话程序员可用的算法大话程序员可用的算法
大话程序员可用的算法
 
面向对象与生活
面向对象与生活面向对象与生活
面向对象与生活
 

单点登录解决方案的架构与实现

  • 3. CLIENT -> WEB [GTALK -> GMAIL]
  • 4. CLIENT -> WEB [MSN->HOTMAIL]
  • 5. WEB -> WEB [GOOGLE READER -> GMAIL]
  • 6. 单点登录定义 •  单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗 的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户, 只需要登录一次,即 通过一个应用中的安全验证后,再访问其他应用中的受 保护资源时,不再需要重新登录验证。
  • 9. LIVE MESSENGER 登录HOTMAIL传输的数据 •  POST https://login.live.com/ppsecure/sha1auth.srf?lc=1033 •  token=ct%3D1302192303%26bver%3D7%26wa%3Dwsignin1.0%26ru%3Dhttp://mail.live.com/%253Frru %253Dinbox%2526wlexpid%253D80097F54CF934247916123482695F310%2526wlrefapp%253D2%26pl %3DMBI%26appid%3D%257B7108E71A-9926-4FCB-BCC9-9A9D3F32E423%257D%26da%3D %253CEncryptedData%2520xmlns%253D%2522http://www.w3.org/2001/04/xmlenc%2523%2522%2520Id %253D%2522BinaryDAToken0%2522%2520Type%253D%2522http://www.w3.org/2001/04/xmlenc %2523Element%2522%253E%253CEncryptionMethod%2520Algorithm%253D%2522http://www.w3.org/2001/04/ xmlenc%2523tripledes-cbc%2522%253E%253C/EncryptionMethod%253E%253Cds:KeyInfo%2520xmlns:ds %253D%2522http://www.w3.org/2000/09/xmldsig%2523%2522%253E%253Cds:KeyName%253Ehttp:// Passport.NET/STS%253C/ds:KeyName%253E%253C/ds:KeyInfo%253E%253CCipherData%253E %253CCipherValue%253EAdn%252BcqR1gmiTLVQGs8qXIcBFJ0QPGi7O %252BRbRjyoR0F2Iz94dGP8s9qoe3GdGFUt9/qguaX1ygP/ghA%252B7m6eyYgUjKr6ZLQXL3lvi/ 2%252BAiYeEdRp3dTFqifsjTdc6a0el3rxnayb5yHiP3YbSzknVcqayqszMLnZIIuUxrDVcHGuobAIqCHrWIwiApfYJCj bbnzXNr4GIqbueQkebpn7JU16bkCion1neNxSg58P7XLEqxzAce3ZUNZWoUDnT/6OtDCkuCmxewrn3sr5Ugh/ FSoW %252B3KGledTk3brKOu8Uu7YNM5Y2k4K90Su8U3zXCyhJXkrVJCzRhJCvOCuWUs4DTEs9ocxKUSOICqaicIc6t TJYfyLlWHhOmsigGzVj2B8NOysbsr/V6KnLu2vgEWkYr0j/ ZYYrAa1R0AuIep0i0hPHUTeOz7HAV5PzwciNA33YIgzyGn3ivmFFcjkxRwmesidmtXopLUSj %252BYIqUqXQ2p11vmQv9UJYCzWghtNS%253C/CipherValue%253E%253C/CipherData%253E%253C/ EncryptedData%253E%26nonce%3DgGOWyChz45t49%252BfhhBsK5lPq/swIKn%252BZ%26hash %3DXvO2NYVpeXsR8cCa7TEv4JLzEVw%253D
  • 10. TOKEN 数据 •  ct=1302192303 •  bver=7 •  wa=wsignin1.0 •  ru =http://mail.live.com/%3Frru%3Dinbox%26wlexpid%3D80097F54CF934247916123482695F310%26wlrefapp%3D2 •  pl=MBI •  appid =%7B7108E71A-9926-4FCB-BCC9-9A9D3F32E423%7D •  da =%3CEncryptedData%20xmlns%3D%22http://www.w3.org/2001/04/xmlenc%23%22%20Id%3D%22BinaryDAToken0%22%20Type%3D%22http://www.w3.org/2001/04/xmlenc %23Element%22%3E%3CEncryptionMethod%20Algorithm%3D%22http://www.w3.org/2001/04/xmlenc%23tripledes-cbc%22%3E%3C/EncryptionMethod%3E%3Cds:KeyInfo %20xmlns:ds%3D%22http://www.w3.org/2000/09/xmldsig%23%22%3E%3Cds:KeyName%3Ehttp://Passport.NET/STS%3C/ds:KeyName%3E%3C/ds:KeyInfo%3E%3CCipherData%3E %3CCipherValue%3EAdn%2BcqR1gmiTLVQGs8qXIcBFJ0QPGi7O%2BRbRjyoR0F2Iz94dGP8s9qoe3GdGFUt9/qguaX1ygP/ghA%2B7m6eyYgUjKr6ZLQXL3lvi/ 2%2BAiYeEdRp3dTFqifsjTdc6a0el3rxnayb5yHiP3YbSzknVcqayqszMLnZIIuUxrDVcHGuobAIqCHrWIwiApfYJCjbbnzXNr4GIqbueQkebpn7JU16bkCion1neNxSg58P7XLEqxzAce3ZUNZ WoUDnT/6OtDCkuCmxewrn3sr5Ugh/FSoW %2B3KGledTk3brKOu8Uu7YNM5Y2k4K90Su8U3zXCyhJXkrVJCzRhJCvOCuWUs4DTEs9ocxKUSOICqaicIc6tTJYfyLlWHhOmsigGzVj2B8NOysbsr/V6KnLu2vgEWkYr0j/ ZYYrAa1R0AuIep0i0hPHUTeOz7HAV5PzwciNA33YIgzyGn3ivmFFcjkxRwmesidmtXopLUSj%2BYIqUqXQ2p11vmQv9UJYCzWghtNS%3C/CipherValue%3E%3C/CipherData%3E%3C/ EncryptedData%3E •  nonce=gGOWyChz45t49%2BfhhBsK5lPq/swIKn%2BZ •  hash=XvO2NYVpeXsR8cCa7TEv4JLzEVw%3D
  • 11. DA •  <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" Id="BinaryDAToken0" Type="http:// www.w3.org/2001/04/xmlenc#Element"> •    <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> •  <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> •    <ds:KeyName>http://Passport.NET/STS</ds:KeyName> •    </ds:KeyInfo> •  <CipherData> •    <CipherValue>Adn+cqR1gmiTLVQGs8qXIcBFJ0QPGi7O+RbRjyoR0F2Iz94dGP8s9qoe3GdGFUt9/ qguaX1ygP/ghA+7m6eyYgUjKr6ZLQXL3lvi/ 2+AiYeEdRp3dTFqifsjTdc6a0el3rxnayb5yHiP3YbSzknVcqayqszMLnZIIuUxrDVcHGuobAIqCHrWIwiApfYJCj bbnzXNr4GIqbueQkebpn7JU16bkCion1neNxSg58P7XLEqxzAce3ZUNZWoUDnT/ 6OtDCkuCmxewrn3sr5Ugh/FSoW +3KGledTk3brKOu8Uu7YNM5Y2k4K90Su8U3zXCyhJXkrVJCzRhJCvOCuWUs4DTEs9ocxKUSOICqaicIc6tT JYfyLlWHhOmsigGzVj2B8NOysbsr/V6KnLu2vgEWkYr0j/ ZYYrAa1R0AuIep0i0hPHUTeOz7HAV5PzwciNA33YIgzyGn3ivmFFcjkxRwmesidmtXopLUSj +YIqUqXQ2p11vmQv9UJYCzWghtNS</CipherValue> •    </CipherData> •  </EncryptedData>
  • 12. GTALK打开登录GMAIL传输的数据 •  GET https://www.google.com/accounts/TokenAuth •  auth =APh-3FxTAOVo71-77U8NQqkkMpJfIzHHi3ClRqCJzSRrft5CWIGKk6Fu5EwlCxmS0sloWRId1x18w CRrhrpA2hwNYyijP4AAu6YwENEFnzYY2nc8jOxmkkEJ0N8qRh9Xze3kr- _GiVVzBxzHOHxK0ZH2vge5JJyM0IEiTH69Hx8XYZ86qYi_- rEKQMlYdLuGE4PJM5pULCi_895SjX2CNU9jyv-6fTSS72nTOzrBDJ0kV9tW05gxNtdBQSvfldctE8GSpiDEds0B8o TuZAbgpnp17SO_MzEKGJ7_kGbAU66ea_Rn2_MVitDjrqIp8rvN_GWrRWfLtOPgFVBmlFqPrrtAKWQbAz9HhyVqv 4NptuY0LH_BkI4Db82Ws3I3g-k3JGrRIG3wiw5yyt8t7zw0-OGU4yJkr1citxw4h30cIRybVTmX3WIaW1c_J- fUpwmwFcVCQ47V09w-bdf3jgSH6TY_czbKn-ziqrqE6tbeACdw3BNLKRJ8y7-01Tbu4EOOYufKxiG-- Z1ONFXG8uh8pkldJDQQ1XLX3RvgS3kOJsKk-Rk-0TtMtW- crBelq83XM3x2NMTUWguRWkkrdPP18V7x97Ez_UeMaETUP2cWau0xzhKo9yL1Lws, •  service=mail •  continue =https%3A%2F%2Fmail.google.com%2Fmail •  source =googletalk
  • 13. 关键数据 •  登录网站地址(Login Portal Url) •  https://login.live.com/ppsecure/sha1auth.srf?lc=1033 •  https://www.google.com/accounts/TokenAuth •  返回地址(Return Url) •  ru=http://mail.live.com/%3Frru%3Dinbox%26wlexpid %3D80097F54CF934247916123482695F310%26wlrefapp%3D2 •  continue=https%3A%2F%2Fmail.google.com%2Fmail •  应用Id(App Id) •  appid=%7B7108E71A-9926-4FCB-BCC9-9A9D3F32E423%7D •  source=googletalk •  授权凭证(Credential)
  • 15. 数据加密 •  可逆加密 or 不可逆加密? •  可逆加密算法 •  DES, Triple-DES, AES, … •  公共密钥 or 各应用独立密钥? •  密钥 •  每个应用系统拥有一个唯一的AppId和一个与其对应的Credential密钥。 •  不同的应用系统使用不同的Credential密钥,目的是防止截取或伪造单点登 录系统的Credential,并防止两个SSO应用系统之间互相截取或伪造对方的 Credential。
  • 17. 密钥管理 •  SSO Key Server 统一登记和管理 •  根据AppId区分应用系统 •  SSO应用系统向SSO Service获取属于自己的密钥 •  密钥有一定时效性,会过期
  • 19. 授权凭证(CREDENTIAL) •  SSO应用系统登录时,SSO Portal会验证用户身份,并向应用返回一个代表用户身 份的Credential •  Credential一般以BASE64字符串的形式存在 •  Credential中包含的加密信息, SSO应用系统均拥有Credential密钥,可解开该 Credential以获取用户的身份信息。 •  Credential具有一定的有效期。 •  Credential包含的信息包括: •  加密信息:用户ID、用户名、Credential生成时间、Credential失效时间 •  未加密信息:对应密钥编号、AppId
  • 20. 授权凭证的结构 •  Credential一般采用明文结构内含密文结构的形式。 •  明文部分 •  对应密钥编号 为保证在密钥更换期间,旧密钥加密的Credential能被正常解密,所以我们需 要在Credential中标记出Credential对应的密钥号码 •  AppId,对应App •  密文部分 •  保存加密后的用户信息,客户端不可读。 •  服务器端解密后可从密文中获取用户的身份标识。
  • 21. 授权凭证 属性名 说明 KeyId 凭证生成时使用的密钥的标识,服务器端与客户端均 可读,但对客户端透明。 例如: 0:0号密钥 1:1号密钥 2:2号密钥   AppId 每个SSO应用系统申请的编号,唯一代表一个SSO应 用系统。 EncryptedData 加密后的用户信息,客户端不可读。服务器端解密后 可从明文中获取用户的身份标识。
  • 22. ENCRYPTEDDATA解密 属性名 说明 Nonce CreateTime 凭证生成时间 ExpireTime 凭证过期时间 UserId 用户Id UserIp 用户登录IP Username/Email 用户名或Email Hash SHA1计算的散列值,防止数据被修改
  • 24. 两种授权凭证验证解析方案对比 从SSO服务器验证 应用自行验证 Credential Credential App SSO App SSO Key Server Server Server Server
  • 25. 授权凭证的验证流程 根据密钥编号 校验AppId 对应密钥解密 校验Hash值 数据 校验授权凭证 更新授权凭证 校验IP 是否到期
  • 27. SSO 客户端 Portal 1. 提交账号密码登录 2. 返回客户端授权凭证 3. 保持登录[带上旧凭证] 4. 返回客户端新的授权凭证
  • 28. SSO 客户端 浏览器 应用站点1 Portal 5. 点击站点链接 6. 访问页面[使用客户端凭证] 7. 302跳转[带上返回地址] 8. 请求SSO网页[带上返回地址] 9. 302跳转[设置SSO Portal Cookie,Url中带上Site 1凭证 10. 访问页面[Url带凭证] 11. 200 OK[设置凭证到Cookie]
  • 30. 用户 浏览器 应用站点1 SSO站点 1. 浏览网站1 2. 访问页面 3. 302跳转[带上返回地址] 4. 请求登录网页[带上返回地址] 5. 200 OK[登录表单] 6. 输入账号密码 7. 提交表单[带上返回地址] 8. 302跳转[设置Cookie,Url中带上凭证] 9. 访问页面[Url带凭证] 10. 200 OK[设置凭证到Cookie] 11. 访问页面[Cookie带凭证] 12. 200 OK
  • 31. 用户 浏览器 应用站点2 SSO站点 13. 浏览网站2 14. 访问页面 15. 302跳转[带上返回地址] 16. 请求登录网页[带上返回地址] 17. 302跳转[设置Cookie,Url中带上凭证] 18. 访问页面[Url带凭证] 19. 200 OK[设置凭证到Cookie] 20. 访问页面[Cookie带凭证] 21. 200 OK
  • 33. SSO Portal SSO Key Server App 1 App n Site 1 Site 2 Site n