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

35
@宝玉xp 2011.4 单点登录解决方案的架构与实现

Upload: jeffz

Post on 10-May-2015

3.771 views

Category:

Documents


6 download

TRANSCRIPT

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

@宝玉xp

2011.4

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

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

单点登录 什么是单点登录?

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

CLIENT -> WEB [GTALK -> GMAIL]

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

CLIENT -> WEB [MSN->HOTMAIL]

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

WEB -> WEB [GOOGLE READER -> GMAIL]

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

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

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

客户端登录过程 以msn为例分析

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

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

https://mail.live.com/rru=inbox&wlexpid=80097F54CF93..........

Page 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%252BAiYeEdRp3dTFqifsjTdc6a0el3rxnayb5yHiP3YbSzknVcqayqszMLnZIIuUxrDVcHGuobAIqCHrWIwiApfYJCjbbnzXNr4GIqbueQkebpn7JU16bkCion1neNxSg58P7XLEqxzAce3ZUNZWoUDnT/6OtDCkuCmxewrn3sr5Ugh/FSoW%252B3KGledTk3brKOu8Uu7YNM5Y2k4K90Su8U3zXCyhJXkrVJCzRhJCvOCuWUs4DTEs9ocxKUSOICqaicIc6tTJYfyLlWHhOmsigGzVj2B8NOysbsr/V6KnLu2vgEWkYr0j/ZYYrAa1R0AuIep0i0hPHUTeOz7HAV5PzwciNA33YIgzyGn3ivmFFcjkxRwmesidmtXopLUSj%252BYIqUqXQ2p11vmQv9UJYCzWghtNS%253C/CipherValue%253E%253C/CipherData%253E%253C/EncryptedData%253E%26nonce%3DgGOWyChz45t49%252BfhhBsK5lPq/swIKn%252BZ%26hash%3DXvO2NYVpeXsR8cCa7TEv4JLzEVw%253D

Page 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%2BAiYeEdRp3dTFqifsjTdc6a0el3rxnayb5yHiP3YbSzknVcqayqszMLnZIIuUxrDVcHGuobAIqCHrWIwiApfYJCjbbnzXNr4GIqbueQkebpn7JU16bkCion1neNxSg58P7XLEqxzAce3ZUNZWoUDnT/6OtDCkuCmxewrn3sr5Ugh/FSoW%2B3KGledTk3brKOu8Uu7YNM5Y2k4K90Su8U3zXCyhJXkrVJCzRhJCvOCuWUs4DTEs9ocxKUSOICqaicIc6tTJYfyLlWHhOmsigGzVj2B8NOysbsr/V6KnLu2vgEWkYr0j/ZYYrAa1R0AuIep0i0hPHUTeOz7HAV5PzwciNA33YIgzyGn3ivmFFcjkxRwmesidmtXopLUSj%2BYIqUqXQ2p11vmQv9UJYCzWghtNS%3C/CipherValue%3E%3C/CipherData%3E%3C/EncryptedData%3E

•  nonce=gGOWyChz45t49%2BfhhBsK5lPq/swIKn%2BZ

•  hash=XvO2NYVpeXsR8cCa7TEv4JLzEVw%3D

Page 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+AiYeEdRp3dTFqifsjTdc6a0el3rxnayb5yHiP3YbSzknVcqayqszMLnZIIuUxrDVcHGuobAIqCHrWIwiApfYJCjbbnzXNr4GIqbueQkebpn7JU16bkCion1neNxSg58P7XLEqxzAce3ZUNZWoUDnT/6OtDCkuCmxewrn3sr5Ugh/FSoW+3KGledTk3brKOu8Uu7YNM5Y2k4K90Su8U3zXCyhJXkrVJCzRhJCvOCuWUs4DTEs9ocxKUSOICqaicIc6tTJYfyLlWHhOmsigGzVj2B8NOysbsr/V6KnLu2vgEWkYr0j/ZYYrAa1R0AuIep0i0hPHUTeOz7HAV5PzwciNA33YIgzyGn3ivmFFcjkxRwmesidmtXopLUSj+YIqUqXQ2p11vmQv9UJYCzWghtNS</CipherValue>

•    </CipherData> •  </EncryptedData>

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

GTALK打开登录GMAIL传输的数据 •  GET https://www.google.com/accounts/TokenAuth

•  auth=APh-3FxTAOVo71-77U8NQqkkMpJfIzHHi3ClRqCJzSRrft5CWIGKk6Fu5EwlCxmS0sloWRId1x18wCRrhrpA2hwNYyijP4AAu6YwENEFnzYY2nc8jOxmkkEJ0N8qRh9Xze3kr-_GiVVzBxzHOHxK0ZH2vge5JJyM0IEiTH69Hx8XYZ86qYi_-rEKQMlYdLuGE4PJM5pULCi_895SjX2CNU9jyv-6fTSS72nTOzrBDJ0kV9tW05gxNtdBQSvfldctE8GSpiDEds0B8oTuZAbgpnp17SO_MzEKGJ7_kGbAU66ea_Rn2_MVitDjrqIp8rvN_GWrRWfLtOPgFVBmlFqPrrtAKWQbAz9HhyVqv4NptuY0LH_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

Page 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)

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

数据如何保护? 如何来保护授权凭证中的信息

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

数据加密 •  可逆加密 or 不可逆加密?

•  可逆加密算法

•  DES, Triple-DES, AES, …

•  公共密钥 or 各应用独立密钥?

•  密钥

•  每个应用系统拥有一个唯一的AppId和一个与其对应的Credential密钥。

•  不同的应用系统使用不同的Credential密钥,目的是防止截取或伪造单点登录系统的Credential,并防止两个SSO应用系统之间互相截取或伪造对方的Credential。

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

密钥管理 如何管理SSO应用的密钥?

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

密钥管理 •  SSO Key Server 统一登记和管理

•  根据AppId区分应用系统

•  SSO应用系统向SSO Service获取属于自己的密钥

•  密钥有一定时效性,会过期

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

授权凭证信息 授权凭证里面都有什么?

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

授权凭证(CREDENTIAL) •  SSO应用系统登录时,SSO Portal会验证用户身份,并向应用返回一个代表用户身份的Credential

•  Credential一般以BASE64字符串的形式存在

•  Credential中包含的加密信息, SSO应用系统均拥有Credential密钥,可解开该Credential以获取用户的身份信息。

•  Credential具有一定的有效期。

•  Credential包含的信息包括:

•  加密信息:用户ID、用户名、Credential生成时间、Credential失效时间

•  未加密信息:对应密钥编号、AppId

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

授权凭证的结构 •  Credential一般采用明文结构内含密文结构的形式。

•  明文部分

•  对应密钥编号 为保证在密钥更换期间,旧密钥加密的Credential能被正常解密,所以我们需要在Credential中标记出Credential对应的密钥号码

•  AppId,对应App

•  密文部分

•  保存加密后的用户信息,客户端不可读。

•  服务器端解密后可从密文中获取用户的身份标识。

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

授权凭证

属性名 说明 KeyId 凭证生成时使用的密钥的标识,服务器端与客户端均

可读,但对客户端透明。 例如: 0:0号密钥 1:1号密钥 2:2号密钥  

AppId 每个SSO应用系统申请的编号,唯一代表一个SSO应用系统。

EncryptedData 加密后的用户信息,客户端不可读。服务器端解密后可从明文中获取用户的身份标识。

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

ENCRYPTEDDATA解密

属性名 说明

Nonce 随机整数

CreateTime 凭证生成时间

ExpireTime 凭证过期时间

UserId 用户Id

UserIp 用户登录IP

Username/Email 用户名或Email

Hash SHA1计算的散列值,防止数据被修改

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

授权凭证的验证和解析 如何验证一个授权凭证是否合法?取出里面的信息?

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

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

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

Credential

App Server

SSO Key Server

Credential

App Server

SSO Server

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

授权凭证的验证流程

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

校验Hash值

校验IP 校验授权凭证是否到期 更新授权凭证

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

客户端单点登录 客户端单点登录流程?

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

客户端 SSO Portal

1. 提交账号密码登录

2. 返回客户端授权凭证

3. 保持登录[带上旧凭证]

4. 返回客户端新的授权凭证

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

客户端 浏览器 应用站点1 SSO Portal

5. 点击站点链接 6. 访问页面[使用客户端凭证]

7. 302跳转[带上返回地址]

8. 请求SSO网页[带上返回地址]

9. 302跳转[设置SSO Portal Cookie,Url中带上Site 1凭证]

10. 访问页面[Url带凭证]

11. 200 OK[设置凭证到Cookie]

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

不同站点间的单点登录 多个站点之间如何共享登录?

Page 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

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

用户 浏览器 应用站点2 SSO站点

13. 浏览网站2 14. 访问页面

15. 302跳转[带上返回地址]

16. 请求登录网页[带上返回地址]

17. 302跳转[设置Cookie,Url中带上凭证]

18. 访问页面[Url带凭证]

19. 200 OK[设置凭证到Cookie]

20. 访问页面[Cookie带凭证]

21. 200 OK

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

系统架构 整体架构如何?

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

SSO Portal SSO Key Server

Site 1 Site 2 Site n App 1 App n

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

Q & A 提问时间

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

THANKS 谢谢