目标
通过百度网盘API的方式去获取网盘中的文件,要实现这的第一步就是需要获取网盘的权限。
资料(参考)
如果期望应用访问用户的网盘文件,则需要经过用户同意,这个流程被称为“授权”。百度网盘开放平台基于 OAuth2.0 接入授权。OAuth2.0 是一种授权协议,通过该协议用户可以授权开发者应用访问个人网盘信息与文件。
用户同意授权后,开发者应用会获取到一个 Access Token,该 Access Token 是用户同意授权的凭证。开发者应用需要依赖 Access Token 凭证调用百度网盘公开API,实现访问用户网盘信息与授权资源。
关于实现用户授权,您可以选择授权码模式、简化模式或者设备码模式实现。
当前百度网盘开放平台支持三种授权模式:授权码模式(Authorization Code)、简化模式(Implicit Grant)、设备码模式(Device Code)。您可以根据自身业务,选择合适的授权模式,实现用户授权。
授权模式 | 描述 | 使用场景 | 有效期 |
---|---|---|---|
授权码模式(Authorization Code) | 用户授权后生成授权码 Code,开发者应用通过 Code 换取 Access Token。 | 适用于 有 Server 端 的应用。 | Access Token 有效期30天,过期后支持刷新。 |
简化模式(Implicit Grant) | 无需通过 Code 换取 Access Token,直接获取 Access Token。 | 适用于 无 Server 端配合 的应用。 | Access Token 有效期30天,过期后不支持刷新, 用户需重新登录授权。 |
设备码模式(Device Code) | 获取设备码,用户授权后,开发者应用通过设备码换取 Access Token。 | 适用于 弱输入设备 的应用(不支持浏览器或输入受限的设备,如儿童手表)。 | Device Code只能使用一次,Access Token过期后支持刷新。 |
授权注意事项: |
- Access Token 有效期30天,过期后支持刷新,刷新后的 Access Token 有效期仍为 30 天。
- 刷新Access Token请按需刷新,不需要不停的刷新。
- 刷新请求,如果API返回失败,旧的refresh_token会失效,此时需要重新发起授权请求,获取新的 Access Token、refresh_token,而不是使用旧的 refresh_token 循环再发起刷新请求。
- refresh_token 只支持使用一次,refresh_token 使用后失效,下次刷新 Access Token 时需要使用上一次刷新请求响应中的 refresh_token。
准备
在授权之前,您需要先完成创建自己的应用。
主要包括以下流程:
- 进入百度网盘开放平台,点击右上角 “申请接入”。
- 登录您的百度帐号。
- 完成开发者认证,我们提供了两种认证类型供您选择:个人认证、企业认证。
- 前往控制台创建自己的应用,生成AppID、AppKey、SecretKey、SignKey等信息。
目前个人认证下可最多创建 2 个应用,企业认证下可最多创建 10 个应用。
可创建两种类型的应用:硬件应用和软件应用。 - 至此,完成应用的创建。
实现逻辑
授权码模式适用于有 Server 端的应用。我们这次实现是选用的授权码模式。
开发者应用在获取用户的授权码 Code 之后,通过 Code 换取 Access Token 凭证。
Access Token 有效期30天,过期后支持刷新,刷新后的 Access Token 有效期仍为 30 天,刷新Access Token请按需刷新,不需要不停的刷新。
刷新请求,如果API返回失败,旧的refresh_token会失效,此时需要重新发起授权请求,获取新的 Access Token、refresh_token,而不是使用旧的 refresh_token 循环再发起刷新请求。
refresh_token 只支持使用一次,refresh_token 使用后失效,下次刷新 Access Token 时需要使用上一次刷新请求响应中的refresh_token。
获取到的授权码 code 有效期 10 分钟,且仅一次有效。
简单介绍时序图的流程,如下:
- 用户选择通过百度账号登录开发者应用。
- 开发者应用发起授权码 Code 请求。
- 百度 OAuth 服务器展示授权页面给用户,用户登录并同意授权。
- 用户同意授权后,百度 OAuth 服务器会将页面跳转至开发者应用配置的回调地址,返回授权码 Code。
- 开发者应用发起 Code 换取 Access Token 请求。
- 百度 OAuth 服务器返回 Access Token 凭证。
实现步骤:
- 获取授权码,需要页面登录认证,且需要传入参数(授权码只可用一次)
登录链接格式: https://openapi.baidu.com/oauth/2.0/authorize?client_id=app_key&device_id=app_id&errmsg=Auth+Login+Ptoken+Error&errno=10&redirect_uri=oob&response_type=code&scope=basic%2Cnetdisk&ssnerror=1
需要传入参数(后面几个参数可以固定)为: device_id client_id redirect_uri=oob response_type=code scope=basic,netdisk
# 1. 获取授权码 需页面登录认证
def get_authorization_code(self)