实战 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
参数说明
参数名称 | 类型 | 是否必须 | 字段说明 |
---|---|---|---|
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
参数名称 | 类型 | 是否必须 | 字段说明 |
---|---|---|---|
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授权页面)
redirect_uri建议使用 URLEncoder,具体使用取决于实际的开放平台.
授权之后回调可以看到 code
,根据code发起 post
请求获取token。
- 使用token调用api获取用户信息
curl -XGET 'https://api.github.com/user?access_token=xxxxxxxx'
到此,OAuth2.0 授权就完成了。
2018-11-20