实战 OAuth2.0 使用

OAuth2.0 介绍

1、概述
  • OAuth是一个开放标准,允许用户通过第三方应用访问该用户在某一网站上私有数据(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用
  • 在开始调试授权功能前,请先确保已经为应用设置了正确的回调域名[clllback]
  • 设置的“回调域名”将会用于回调地址参数的域名校验
  • 比如设置的回调域名为“www.huzhurong.com”,生效以后,可能页面www.huzhurong.com/music.html、www..huzhurong..com/login.html,都可以通过域名校验。但pay.huzhurong.com、music.huzhurong.com、huzhurong.com 无法通过域名校验

2、步骤

授权流程分为四步:

  • 引导用户进入授权页面同意授权,获取code。用户发起授权的地址和授权成功后的回调地址必须具有相同的根域名或者ip 。
  • 通过code换取网页授权access_token授权时长为24小时
  • 开发者可以通过提交refersh_token更新access_token.(具体的网站有关)
  • 通过网页授权access_token调用开放平台接口(淘宝,github,微信等等)

3、获取code

链接:https://xxxxx.xxxx.xxx/oauth2/authorize?client_id=xxx&redirect_uri=REDIRECT_URI&response_type=code&state=STATE

参数说明
参数名称 类型 是否必须 字段说明
client_id STRING 应用的唯一标识
redirect_uri STRING 授权后重定向的回调链接地址
response_type STRING 返回类型
state STRING 重定向后会带上state参数

具体的应用参数一句开放平台的实际参数而定,不同的平台也许使用的参数不一样

4、用户授权

如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE code作为换取access_token的票据,每次用户授权带上的code将不一样,code一般只能使用一次

5、获取token

获取token链接:https://xxxx.xxx.xxx/oauth2/access_token?client_id=xxx&secret=xxx&code=xxx&grant_type=authorization_code

参数名称 类型 是否必须 字段说明
client_id STRING 应用的唯一标识
secret STRING app secret
code STRING 填写获取的code参数
state STRING 重定向后会带上state参数

如果一切正常则会返回token,接下来就可以快乐的调用开放平台的api了.

实际操作

要求用户 github 账号一个. 域名/回调url 可要可不要 最好有一个

  • 申请一个 github app 并注册回调地址,主页等等
    用户settings ——> Developer settings

  • 引用用户授权(跳转github授权页面)获取code,根据code获取用户 token
    申请之后就会有 client_id , Client Secret,现在需要使用 client_id 引导用户进行授权(跳转github授权页面)

GitHub 授权跳转链接

实际链接: https://github.com/login/oauth/authorize?client_id=8a018bb9d35bb6872d1d&redirect_uri=https%3A%2F%2Fwww.huzhurong.top%2Faboutme%2F&state=chenshun

redirect_uri建议使用 URLEncoder,具体使用取决于实际的开放平台.

授权之后回调可以看到 code,根据code发起 post 请求获取token。

  • 使用token调用api获取用户信息
  1. curl -XGET 'https://api.github.com/user?access_token=xxxxxxxx'

到此,OAuth2.0 授权就完成了。

2018-11-20