1. 初识OAuth
在这里先简单介绍一下OAuth,OAuth是让客户端安全可控的获取用户的授权,再跟服务商提供商进行交互。
它的工作流程是
- 客户端要求得到用户授权
- 用户同意授权
- 客户端使用这个授权向认证服务器申请令牌
- 认证服务器确认授权无误后发放令牌
- 客户端用令牌向资源服务器获取资源
- 资源服务器确认令牌无误后,开放资源
而接下来对授权码模式的介绍就是在于第二步,客户端如何获取授权四种模式的其中一种
2. 授权码模式
步骤:
- 用户访问客户端,客户端将其导向认证服务器并发送一个申请认证的URI
这个URI包含以下参数:
- response_type:授权类型,必选,这里固定为'code'
- client_id::客户端ID,必选
- redirect_uri:重定向URI,可选
- scope:申请的权限范围,可选
- state:表示客户端当前状态,认证服务器后面会原封不动的返回这个值
- 用户选择是否给客户端授权
- 若授权,认证服务器将用户导向客户端事先指定的重定向URI,并附上授权码
认证服务器回应客户端的URI,包含以下参数:
- code:授权码,必选,有效期短,通常设为10分钟,客户端只能使用一次
- state:与第一步申请URI中的state一致
- 客户端收到授权码后,向认证服务器申请令牌,并附上重定向URI,这一步在后台完成,对用户不可见
这里对认证服务器申请令牌的HTTP请求包含以下参数:
- grant_type:表示使用的授权模式,必选,这里固定为'authorization_code'
- code:授权码,必选
- redirect_uri:重定向URI,与先前的一致
- client_id:客户端ID,必选
- 认证服务器核对信息后,向客户端发送令牌和更新令牌
- access_token:访问令牌,必选
- token_type:令牌类型,对大小写不敏感,必选
- expires_in:过期时间/有效时间
- refresh_token:更新令牌,用来获取下一次访问令牌,可选
- scope:权限范围,与之前的一致,可省略