OAuth与SSO简介
OAuth出现的背景:
作为用户,当我们去一个新的网站或者使用一个新的APP(购物网站,应用,小游戏app等),一般都需要你注册帐号,方便保存你的相关信息。这就包括:
1.用户帐号登录(身份验证); |
|
2.用户信息管理(用户名称,电话,邮箱,地址等) |
|
这样就出现了这样的问题:
1.用户需要记住很多组账号密码(这相当麻烦)
2.对开发来说无疑加大工作量
3.安全问题!一些小网站因为技术问题容易造成用户信息泄露,用户在多个地方存储了自己信息也加大了信息泄露的风险
基于以上问题,很多大公司开始提供身份验证服务。比如在中国,大家都喜欢用QQ/微信。那小网站只需要跟腾讯连结,它就可以不用自己做用户账号的注册/登录,借用腾讯的登录服务,就可以实现用户管理。用户也只需要记住自己的qq/微信账号密码就可以登入这些小网站(或者第三方应用)使用相关服务了。
然后,大家都这么做了。但提供这样服务的大公司越来越多,这样小网站要同时连接多个身份验证服务的大公司,如果连接方式都不一样就相当麻烦。因此,业界最终开会决定一套授权标准协议,就是OAuth。
OAuth简单说就是一种授权的协议,只要授权方和被授权方遵守这个协议去写代码提供服务,那双方就是实现了OAuth模式。
实现的流程:
用户在大网站(OAuth提供者)上注册过账号,就可以登入小网站(OAuth使用者)来使用服务。但大网站不会提供用户账号密码给小网站。
用户首先会被引导到大网站登录,验证身份后大网站会提供一个code,再用这个code去跟大网站取得一个会过期的令牌Token。小网站拿着这个令牌就可以取得用户的部分资料。
Oauth 与 SSO -单点登录 区别:
OAuth解决的是服务提供方(微信等)给第三方应用授权的问题;
而SSO解决的是大型系统中各个子系统如何共享登陆状态的问题。(比如你登录了百度首页,那么你进入百度百科,百度贴吧,百度音乐等服务的时候都不需要重新登录。)
两者都是基于分布式系统,涉及到多个角色,但是不同的是,OAuth是一种具体的协议,SSO可以说是一种技术,可以用cookie实现,甚至也可以用OAuth实现(虽然不是很好),比如OAuth中的服务提供方可以充当SSO认证中心,OAuth中的第三方应用也可以是SSO中的子系统。