一、OAuth2.0是什么?
在OAuth2.0中“O”是Open的简称,表示“开放”的意思。Auth表示“授权”的意思,所以连起来OAuth表示“开放授权”的意思,它是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用。用一句话总结来说,OAuth2.0是一种授权协议。
OAuth允许用户授权第三方应用访问他存储在另外服务商里的各种信息数据,而这种授权不需要提供用户名和密码提供给第三方应用。
二、OAuth2.0的作用
用户登录应用时传统的方式是用户直接进入客户端应用的登录页面输入账号和密码,但有的用户感觉注册后再登录比较繁琐麻烦,于是用户选择使用相关社交账号(微信、QQ、微博)登录,这种方式通过用户的账号和密码去相关社交账号里获取数据存在严重的问题缺陷。
- 如果第三方应用获取微信中的用户信息,那么你就把你的微信的账号和密码给第三应用。稍微有些安全意识,都不会这样做,这样很不安全
- 使用OAuth2.0可以避免向第三方暴露账号密码;
- 第三方应用拥有了用户微信的所有权限,用户没法限制第三方应用获得授权的范围和有效期;
- OAuth2.0可以限制授权第三方应用获取微信部分功能,比如只可以获取用户信息,但不可以获取好友列表,有需求时再申请授权访问好友列表的权限;
- 用户只有修改密码,才能收回赋予第三方应用权限,但是这样做会使得其他所有获得用户授权的第三方应用程序全部失效。
- 只要有一个第三方应用程序被破解,就会导致用户密码泄漏,以及所有使用微信登录的应用的数据泄漏。
如果某个企业拥有多个应用系统平台,那么每个系统都需要设置一个账号密码,这种操作对于用户来说时繁琐麻烦的,没登录一个系统平台都要输入相应的账号密码,那么可不可以做一个平台,使任意用户可以在这个平台上注册了一个帐号以后,随后这个帐号和密码自动登记到这个平台中作为公共帐号,使用这个账号可以访问其它的已经授权访问的系统。在这种背景下,OAuth2.0协议就诞生了。
- OAuth的作用就是让"第三方应用"安全可控地获取"用户"的授权,与"服务商提供商"进行交互。本质是使用token令牌代替用户名密码。
三、OAuth2.0的应用
- 客户端App使用三方登录
- 微信小程序登录授权
- 多个服务的统一登录认证中心、内部系统之间受保护资源请求
四、OAuth的授权流程
- 用户打第三方开客户端后,第三方客户端要访问服务提供方,要求用户给予授权
- 用户同意给予第三方客户端访问服务提供方的授权,并返回一个授权凭证Code
- 第三方应用使用第2步获取的授权凭证Code和身份认证信息(appid、appsecret),向授权认证服务器申请授权令牌(token);
- 授权认证服务器验证三方客户端的授权凭证Code码和身份通过后,确认无误,同意授权,并返回一个资源访问的令牌(Access Token);
- 第三方客户端使用第4步获取的访问令牌Access Token)向资源服务器请求相关资源;
- 资源服务器验证访问令牌(Access Token)通过后,将第三方客户端请求的资源返回,同意向客户端开放资源;
下面是时序图:
五、OAuth2.0和1.0的区别
六、令牌与密码
令牌(token)与密码(password)的作用是一样的,都可以进入系统,但是有三点差异。
令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。
令牌可以被数据所有者撤销,会立即失效。以上例而言,屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。
令牌有权限范围(scope),比如只能进小区的二号门。对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。
上面这些设计,保证了令牌既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全。这就是 OAuth 2.0 的优点。
注意:只要知道了令牌,就能进入系统。系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。这也是为什么令牌的有效期,一般都设置得很短的原因。
附:参考资料
1、OAuth2.0原理浅析
2、理解OAuth 2.0
3、OAuth 2.0 的一个简单解释
4、OAuth1.0 和OAuth2.0的区别