OAuth 2.0 文档
初见OAuth2.0
OAuth 2.0是一个业界标准的授权协议,其定义了四种可以适用于各种应用场景的授权交互模式:授权码模式、应用授信模式、用户授信模式、简化模式。其中,授权码模式被广泛应用于第三方互联网开放平台,通过第三方登录是其最常见应用场景之一,比如使用微信、QQ和淘宝账号进行登录。
OAuth 2.0 官方文档地址:https://tools.ietf.org/html/rfc6749#section-4.3.2
一、情景再现:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LX4uivBq-1634386586043)(images/timg.jpeg)]
二、令牌与密码
令牌(access_token)与密码(password)的作用是一样的,都可以进入系统,但是有三点差异。
(1)令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。
(2)令牌可以被数据所有者撤销,会立即失效。以上例而言,屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。
(3)令牌有权限范围(scope),比如只能进小区的二号门。对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。
上面这些设计,保证了令牌既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全。这就是 OAuth 2.0 的优点。
注意,只要知道了令牌,就能进入系统。系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。 这也是为什么令牌的有效期,一般都设置得很短的原因。
三、互联网应用案例
情景再现:
简书,此网站为了方便用户登陆,他们支持很多个第三方登录,就拿微博登陆来说,用户在使用简书的网站的时候,为了方便登陆。他们会选择第三方登录,如果用户手机中有微博应用的话,弹出来一个授权按钮之后,用户点击授权,用户授权之后会生成一个授权码之类的字符串,简书服务器拿着这个串去访问用户的微博信息。例如微博昵称,微博的设置的地址,还可以访问微博绑定的手机号码,对于一些比较新的应用网站来时,通过支持第三方登录可以获取不少的用户量。
名词定义:
在详细讲解OAuth 2.0之前,需要了解几个专用名词。
(1) Client:准备访问用户资源的应用程序,其可能是一个web应用,或是一个后端web服务应用,或是一个移动端应用,也或是一个桌面可执行程序。
(2) Resource Owner:顾名思义,资源的所有者,很多时候其就是我们普通的自然人(但不限于自然人,如某些应用程序也会创建资源),拥有资源的所有权。
(3) User Agent:用户代理,本文中就是指浏览器。
(4) Authorization server:授权服务器,在获取用户的同意授权后,颁发访问令牌给应用程序,以便其获取用户资源。
(5) Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。
实现思路:
OAuth在 客户端 与 服务提供商 之间,设置了一个授权层(authorization layer)。“客户端"不能直接登录"服务提供商”,通过登录授权层,将用户与客户端区分开来。"客户端"登录授权层所用的令牌(token),与用户的密码不同。用户可以在登录的时候,可以指定授权层令牌的权限范围和有效期。
"客户端"登录授权层以后,"服务提供商"根据令牌的权限范围和有效期,向"客户端"开放用户储存的资料。
运行流程
OAuth 2.0的运行流程,摘自RFC 6749。
+--------+ +---------------+
| |--(A)- Authorization Request ->| Resource |
| | | Owner |
| |<-(B)-- Authorization Grant ---| |
| | +---------------+
| |
| | +---------------+
|