当前位置: 百度开发者 > 百度网盘 > 阅读正文

百度网盘开发–获取access_token

2021.5.1.   9405 次   2948字

access_token是访问令牌, 在OAuth中, 此作为授权登录令牌

百度网盘的开发入门非常简单, 可以分为2大步骤

  1. 获取access_token密钥
  2. 使用此密钥访问资源

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_idYOUR_APP_IDapp信息的API Key
redirect_uri①YOUR_REDIRECT
②oob
客户端回调地址
①你的公网地址
②百度默认提供地址
scope①basic
②netdisk
③super_msg
授权范围
①基础信息
②网盘
③任何权限
display①page
②popup
③dialog
④mobile
⑤tv
⑥pad
授权页面展示方式
①全屏页面
②弹窗页面
③浮层页面
④移动终端页面
⑤电视等大屏页面
⑥ipad等平板页面
stateYOUR_STATE额外验证码
force_login①0
②1
是否强制登录
而不读取cookie
confirm_login1提示是否使用已登录授权
login_typesms使用短信动态密码登陆注册方式

这些参数, 很多都是可选的

实践获取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

至此, 基本测试就完成了, 更多请参考

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群