引言
OAuth 2.0 是一种授权机制,主要用来颁发令牌(token)。
OAuth 2.0 的标准是 RFC 6749 文件,这个文件写出(由于互联网有多种场景,)本标准定义了获得令牌的四种授权方式(authorization grant )
即以下四种授权方式:
- 授权码(authorization-code)
- 隐藏式(implicit)
- 密码式(password):
- 客户端凭证(client credentials)
一、授权码
介绍:
授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。
这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。
流程:
说明:
A [步骤1,2]:用户访问客户端,需要使用服务提供商(微信)的数据,触发客户端相关事件后,客户端拉起或重定向到服务提供商的页面或APP。
B [步骤3]:用户选择是否给予第三方客户端授权访问服务提供商(微信)数据的权限;
C [步骤4]:用户同意授权,授权认证服务器将授权凭证code码返回给客户端,并且会拉起应用或重定(redirect_uri)向到第三方网站;
D [步骤5,6]:客户端收到授权码后,将授权码code和ClientId或重定向URI发送给自己的服务器,客户端服务器再想认证服务器请求访问令牌access_token;
E[步骤7,8]:认证服务器核对了授权码和ClientId或重定向URI,确认无误后,向客户端服务器发送访问令牌(access_token)和更新令牌(refresh_token),然后客户端服务器再发送给客户端;
F[步骤9,10]:客户端持有access_token和需要请求的参数向客户端服务器发起资源请求,然后客户端服务器再向服务提供商的资源服务器请求资源(web API);
G [步骤11,12,13]:服务提供商的资源服务器返回数据给客户端服务器,然后再回传给客户端使用;
A步骤中客户端申请认证的URI,包含以下参数:
https://server.example.com/oauth/auth?response_type=code&client_id=CLIENT_ID&redirect_uri