Contenu connexe
Similaire à 单点登录解决方案的架构与实现
Similaire à 单点登录解决方案的架构与实现 (20)
单点登录解决方案的架构与实现
- 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计算的散列值,防止数据被修改
- 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