access_token是访问令牌, 在OAuth中, 此作为授权登录令牌
百度网盘的开发入门非常简单, 可以分为2大步骤
- 获取access_token密钥
- 使用此密钥访问资源
OAuth2.0授权方式
OAuth是一种开放型登录模式, OAuth2.0有 4 种模式
- 最正规的授权码模式, 使用client_id和secret_key先获取code再获取access_token
- 简化授权模式, 使用client_id直接获取access_token
- 密码模式, 输入账号和密码得到access_token
- 客户端模式, 直接得到access_token
百度的OAuth仅支持授权码模式, 以及简易授权模式这2种
百度OAuth的授权码模式
OAuth的授权码模式, 大概需要 2 次认证, 完整流程大概如下 :
- 先在服务器端创建app, 其中包含client_id等信息
- 客户端的client_id–> 服务器
- 客户端 <– 服务器发送code授权码
- 客户端使用code配合secret_key –> 服务器
- 客户端 <– 服务器发送access_token
- 客户端得到access_token, 就相当于登录成功, 可以用它做参数做对应的操作
按照上面的描述, 首先你先得成为百度开发者, 然后创建对应的app, 就能得到对应的app_id以及secret_key等信息啦
如果你没有百度账号, 首先要申请百度账号, 点击这里注册百度账号
接下来, 你要申请成为成为开发者, 点击这里申请成为百度网盘开发者
再然后, 你就可以进入开发者控制台, 并创建app, 就可以得到对应的app_id, 以及secret_key等信息啦, 注意的是, 一个app对应一组app_id以及secre_key等信息
那么, 服务器使用哪个地址? 我们要发送到哪里去? 它的接口地址为
https://openapi.baidu.com/oauth/2.0/authorize?
可以看到, 它是一种 get 模式, 那么它的请求参数又是什么呢?参数会在后面将到
那么既然服务器需要给客户端发请求, (重定向的请求方式) 给客户端, 很显然它也需要一个公网地址( 可以是localhost, 或者本地dns或者局域网 ), 那么它的地址又是什么呢?很显然地址应该允许随意设置, 但服务器怎么辨别客户端地址是有效的而不是冒充的呢?
百度给了2种方式, 如果你有自己的公网地址, 那么你可以设定客户端的地址, 以被百度服务器识别并审核是否通过, 如果你没有公网地址, 那么它提供了一个响应地址, 以便你获取响应回来的信息
授权模式大概过程就是上述步骤.
百度OAuth简易授权模式
简易授权模式基本过程如下 :
- 先在服务器端创建app, 其中包含client_id等信息
- 客户端的client_id–> 服务器
- 客户端 <– 服务器发送access_token
- 客户端得到access_token, 就相当于登录成功, 可以用它做参数做对应的操作
简易授权模式, 更加简单, 仅需要一次就能获取到access_token
不过这并不是说它就比上面的好, 在安全性方面明显降低了很多.
请求参数介绍
它的请求参数, 大概有以下这些
参数名 | 参数值 | 解释 |
response_type | ①code ②token | 授权模式 ①授权码模式 ②简易授权模式 |
client_id | YOUR_APP_ID | app信息的API Key |
redirect_uri | ①YOUR_REDIRECT ②oob | 客户端回调地址 ①你的公网地址 ②百度默认提供地址 |
scope | ①basic ②netdisk ③super_msg | 授权范围 ①基础信息 ②网盘 ③任何权限 |
display | ①page ②popup ③dialog ④mobile ⑤tv ⑥pad | 授权页面展示方式 ①全屏页面 ②弹窗页面 ③浮层页面 ④移动终端页面 ⑤电视等大屏页面 ⑥ipad等平板页面 |
state | YOUR_STATE | 额外验证码 |
force_login | ①0 ②1 | 是否强制登录 而不读取cookie |
confirm_login | 1 | 提示是否使用已登录授权 |
login_type | sms | 使用短信动态密码登陆注册方式 |
这些参数, 很多都是可选的
实践获取token
实践仅为了掌握学习它的代码, 所以我们使用百度提供的回调地址. 其实也可以使用localhost做回调地址进行测试, 在百度app管理界面中设置你的回调地址
在测试前, 需要准备一些必要的
准备测试账号
这里的账户信息并不是真实的, 只是示例
- AppKey : UxXdVQsDPncOW0N80aGfvuWGYvOFyItY
- SecretKey : 2N6sZcCD4iiMgKaQLpZO03tUTAsghWkK
请确保你使用的appkey和secretkey是在百度网盘开发中心申请的, 其他通用的app信息最终无法访问百度网盘资源哦
下面会使用 YOUR_CLIENT_ID 和 YOUR_SECRE_KEY 替代id和key
2种获取access_token方式
经过上述的描述, 我们已经知到了有2种方式获取access_token
使用授权码方式, 这里有2个步骤
首先复制下面的代码, 它将取得一个code
https://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=oob&scope=basic&display=popup
接着, 使用上面这一步获得的code, 再拼接为下面的地址并访问以获取access_token , 其中得到的code使用 YOUR_CODE 表示
https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=YOUR_CODE&client_id=YOUR_CLIENT_ID&client_secret=YOUR_SECRE_KEY&redirect_uri=oob
你将会获得一个时间有效期为一个月的access_token
下面介绍简易授权码模式, 一个步骤就ok
https://openapi.baidu.com/oauth/2.0/authorize?response_type=token&client_id=YOUR_CLIENT_ID&redirect_uri=oob&scope=basic,netdisk&display=popup&state=xxx
你同样会获得一个access_token, 注意此access_token仅最新一个有效
测试访问百度网盘资源
首先说明一下, 要学习的东西很多, 这里可能不完全列出来
其中, 上面获得的access_token, 使用 YOUR_TOKEN 表示
获取基础信息, 包括头像, 用户名, 用户id等, (id不可变, 头像地址也不变)
https://pan.baidu.com/rest/2.0/xpan/nas?access_token=YOUR_TOKEN&method=uinfo
获取网盘容量信息
https://pan.baidu.com/api/quota?access_token=YOUR_TOKEN&checkfree=1&checkexpire=1
至此, 基本测试就完成了, 更多请参考