• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
单点登录解决方案的架构与实现
 

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

on

  • 3,635 views

 

Statistics

Views

Total Views
3,635
Views on SlideShare
3,190
Embed Views
445

Actions

Likes
5
Downloads
77
Comments
0

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

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • 单点登录解决方案的架构与实现 @宝玉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=1033https://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解密 属性名 说明NonceCreateTime 凭证生成时间ExpireTime 凭证过期时间UserId 用户IdUserIp 用户登录IPUsername/Email 用户名或EmailHash 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 ServerApp 1 App n Site 1 Site 2 Site n
    • 提问时间Q&A
    • 谢谢THANKS