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

  • 3,493 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
3,493
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
82
Comments
0
Likes
5

Embeds 0

No embeds

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