SSO = Single Sign On
为什么要有SSO?
我们可以从有SSO和没有SSO比较开始:
- 如果没有SSO的话,那所有的APP都需要维护一套完整的
认证+授权
(authentication and authorization)
App team 不开心,因为他们不得不维护所有用户信息,还要维护模块去做验证和授权
User 不开心,因为用户得不得在每个App内管理一对儿用户名和密码,还总是需要登录 - 如果有SSO,那么用户只需要注册/认证+授权/一次
APP team 开心了,他们不在需要维护用户信息,也完全不需要认证模块
User 开心了,他们不需要到处登录,记住用户名密码,只需要登录一次就能访问需要的各个App
SSO 组成部分
- User: 就是user,想要访问不同的app
- Indentity Provider (IDP): IDP 不仅仅是告诉了SP user是谁, 同时还需要告诉SP user都有什么访问权限
- Service Provider (SP): SP就是传统的那些APP
- 更多情况下,IDP的话会与AD或者LDAP建立联系,因为user信息的话会存储在external system,这样的话就可以有很多的IDP但是user数据是几种存储的
SSO protocols
Basic auth: simple username + password
Basic auth:
- USER首先要访问SP
- SP直接跟USER要credentials
- USER提供credentialsSP
- SP把credentials提供给给IDP,让IDP去认证
- IDP返回这个user的基本信息,还有权限
注意只有这种basic auth的SSO才涉及username/password的流动,其他的OAuth2和SAML都不再涉及去验证username和password了
OAuth 2: 感觉OAuth2更像是authorization而没有authenticatn
OAuth2:
USER要访问SP
SP说我只认IDP提供的token/key
USER去找IDP要token去访问SP
IDP需要认证USER是否可以访问SP
USER提供credentials给IDP
IDP给USER办法token/keya
USER拿着token/key去找SP
SP通过API跟IDP认证,token/key是否vaild
生活中更常见的是,当你想访问咸鱼的时候,咸鱼会把你转到淘宝的认证页面,在这个页面里,先让你登陆,登陆后让你授权咸鱼访问你的个人资料;如果你同意的话,这个页面就会给你一个token,同通过一开始咸鱼赚到淘宝认证页面时带上的redirect -url,再转到咸鱼的页面;这就完成了一次OAuth2认证授权
SAML: Security Assertaion Markup Language
SAML:
USER要访问SP
SP也只认IDP的token/key
USER去找IDP要acces SP的token
IDP跟SP验证,IDP是否需要保护这个SP,同时SP将公钥发给IDP(IDP用公钥去加密数据)
IDP再去跟USER做验证,valid后,将通过公钥加密过的数据,交给USER
USER将数据交给SP,SP通过私钥解密
更详细的SAML
user要访问SP
SP阻止用户的访问,因为用户没有cookie/session
同时SP把request redirect到IDP
IDP请求User做登陆验证
User提供credntials之后,IDP调用AD/LDAP做查询认证
之后会有两件事儿
- IDP端会存储cookie
- User等其他信息会返回SP
SP通过公钥私钥进行数据解密
SP建立session
User得到一开始的SP请求
User得到SP的cookie
OpenID: 在OAuth的基础上建立的
OAuth2 vs SMAL
- SMAL 只支持 web app,其他的比如mobile app就不支持
未完待续