单点登录解决方案的架构与实现
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

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

  • 4,075 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,075
On Slideshare
3,630
From Embeds
445
Number of Embeds
5

Actions

Shares
Downloads
82
Comments
0
Likes
5

Embeds 445

http://nbazaar.org 439
http://www.slideshare.net 2
http://localhost:9000 2
url_unknown 1
http://127.0.0.1 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 单点登录解决方案的架构与实现 @宝玉xp 2011.4
  • 2. 什么是单点登录?单点登录
  • 3. CLIENT -> WEB [GTALK -> GMAIL]
  • 4. CLIENT -> WEB [MSN->HOTMAIL]
  • 5. WEB -> WEB [GOOGLE READER -> GMAIL]
  • 6. 单点登录定义•  单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗 的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户, 只需要登录一次,即 通过一个应用中的安全验证后,再访问其他应用中的受 保护资源时,不再需要重新登录验证。
  • 7. 以msn为例分析客户端登录过程
  • 8. LIVE MESSENGER登录过程https://login.live.com/ppsecure/sha1auth.srf?lc=1033https://mail.live.com/rru=inbox&wlexpid=80097F54CF93..........
  • 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)
  • 14. 如何来保护授权凭证中的信息数据如何保护?
  • 15. 数据加密•  可逆加密 or 不可逆加密?•  可逆加密算法 •  DES, Triple-DES, AES, …•  公共密钥 or 各应用独立密钥?•  密钥 •  每个应用系统拥有一个唯一的AppId和一个与其对应的Credential密钥。 •  不同的应用系统使用不同的Credential密钥,目的是防止截取或伪造单点登 录系统的Credential,并防止两个SSO应用系统之间互相截取或伪造对方的 Credential。
  • 16. 如何管理SSO应用的密钥?密钥管理
  • 17. 密钥管理•  SSO Key Server 统一登记和管理•  根据AppId区分应用系统•  SSO应用系统向SSO Service获取属于自己的密钥•  密钥有一定时效性,会过期
  • 18. 授权凭证里面都有什么?授权凭证信息
  • 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解密 属性名 说明NonceCreateTime 凭证生成时间ExpireTime 凭证过期时间UserId 用户IdUserIp 用户登录IPUsername/Email 用户名或EmailHash SHA1计算的散列值,防止数据被修改
  • 23. 如何验证一个授权凭证是否合法?取出里面的信息?授权凭证的验证和解析
  • 24. 两种授权凭证验证解析方案对比从SSO服务器验证 应用自行验证 Credential Credential App SSO App SSO Key Server Server Server Server
  • 25. 授权凭证的验证流程 根据密钥编号校验AppId 对应密钥解密 校验Hash值 数据 校验授权凭证更新授权凭证 校验IP 是否到期
  • 26. 客户端单点登录流程?客户端单点登录
  • 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]
  • 29. 多个站点之间如何共享登录?不同站点间的单点登录
  • 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
  • 32. 整体架构如何?系统架构
  • 33. SSO Portal SSO Key ServerApp 1 App n Site 1 Site 2 Site n
  • 34. 提问时间Q&A
  • 35. 谢谢THANKS