2

前面一篇文章研究了OAuth2.0规范的工作原理,纸上得来终觉浅,今天就以纯手工的方式跑下整个流程。

本示例使用授权代码模式(Authorization code),以GitHub提供的OAuth2.0授权服务来进行试验。你必须先有一个GitHub账号,而且没有被墙,试验的步骤如下:

  1. 注册OAuth客户端
  2. 获取Authorization Code
  3. 获取Access Token
  4. 使用Access Token访问资源

注册OAuth客户端

先登录GitHub,依次访问 Settings->Developer settings->OAuth Apps,点击 New OAuth App
注册页面
image.png

注册结果
image.png

注册主要关注三个参数:

  1. Authorization callback URL: 获取Authorization Code后的跳转地址
  2. Client ID:注册的客户端的唯一标识
  3. Client Secret:注册客户端的Secret信息

获取Authorization Code

获取Authorization Code为GET请求,可以直接拼装URL后在浏览器直接访问,地址如下:

https://github.com/login/oauth/authorize?client_id=9b4cxxxxxxx60b98cd21&redirect_uri=http://127.0.0.1:8000/oauth
  1. 访问后,先跳转到登录界面进行用户认证

image.png

  1. 认证后,直接进入授权确认页面

image.png

  1. 用户授权后,跳转到redirect_uri地址
http://127.0.0.1:8000/oauth?code=ccxxx92a0cef2c024dd2

注:这个地址不一定需要可访问,直接跳404也可以,主要是要能获取这个code字段。

获取Access Token

使用上述个步骤获取的code,Client ID,Client Secret,因为这个是Post请求,所以需要借助Postman来发送(不过我测试了下,浏览器直接GET访问也可以,会把返回数据当文件下载)。
获取Access Token的地址和参数如下:

地址:https://github.com/login/oauth/access_token
参数:client_id=xxx&client_secret=xxx&code=xxx

参数传递有两种方式,一种是直接把client_id、client_secret、code三个参数作为请求体的Body提交;第二种是把client_id、client_secret作为HTTP Basic authentication认证的用户名密码,Body只传递code参数,两种方式Postman截图如下:

方式1.PNG

方式2.PNG

注意:基于设计安全,每个code只能申请一次Access Token,使用后就失效了。

使用Access Token访问资源

以获取用户信息为例,获取用户信息URL:

https://api.github.com/user

在请求头中增加Authorization字段,值为Bearer access_token_value

Postman截图如下:
image.png

以上就是简单的通过OAuth2.0协议访问GitHub资源的过程,这个过程还是比较顺利的。

另外在使用过程中,发现Postman已经集成了OAuth2.0的授权过程,在请求的Authorization页签中选择OAuth2.0,软件提供了一个填写Get New Access Token的表单。
image.png


乘着风
107 声望12 粉丝

五岁时,妈妈告诉我,人生的关键在于快乐。上学后,人们问我长大了要做什么,我写下“快乐”。他们告诉我,我理解错了题目,我告诉他们,他们理解错了人生。——约翰·列侬