使用curl调用Google Drive API报401 Invalid Credentials错误如何处理
排查401错误及Google Drive API文件查询解决方案
获取详细错误信息的方法
直接在你当前使用的curl命令末尾添加-v参数,即可输出完整的请求、响应交互日志,401错误的响应体中会携带具体的错误原因,比如token过期、权限范围不匹配、凭证格式错误等。
你也可以在接口URL中添加fields=files(id,name,createdTime,mimeType)参数,直接指定返回你需要的文件创建时间等基础字段,减少冗余返回内容。调整后的示例命令如下:
curl -v \ 'https://www.googleapis.com/drive/v3/files?corpora=user&q=createdTime%20%3E%20%272021-11-23T12%3A00%3A00%27&fields=files(id,name,createdTime,mimeType)&key=[你的API密钥]' \ --header 'Authorization: Bearer [你的访问令牌]' \ --header 'Accept: application/json' \ --compressed
常见401 Invalid Credentials问题修复
大部分该类错误都是凭证生成流程错误导致的,按以下顺序排查即可:
- 你通过链接获取到的是授权码(code),不是接口需要的访问令牌(access_token),需要先通过授权码兑换有效访问令牌,兑换命令如下:
curl --request POST \ --url https://oauth2.googleapis.com/token \ --header 'content-type: application/x-www-form-urlencoded' \ --data 'client_id=735795831119-kcpkamhiaojavqrt67mti7thcaa6ce87.apps.googleusercontent.com' \ --data 'client_secret=[你的客户端密钥]' \ --data 'code=[你之前获取的授权码]' \ --data 'grant_type=authorization_code' \ --data 'redirect_uri=urn:ietf:wg:oauth:2.0:oob'
执行命令后返回结果中的access_token字段才是需要放到请求头中的凭证,该凭证有效期为1小时,过期后可使用返回的refresh_token字段兑换新的访问令牌。
- 访问个人网盘文件时不需要携带
key=[API密钥]参数,该参数仅用于访问公开资源,携带反而可能触发校验冲突,你可以直接删除URL中的该参数重试。 - 检查访问令牌粘贴是否正确,不要携带多余的空格、换行符,
Bearer和访问令牌之间仅保留一个空格。 - 如果不需要修改网盘内容,可以将授权时的scope调整为
https://www.googleapis.com/auth/drive.readonly,权限更安全,也不会影响文件基础信息查询。
更简便的查询实现方案
如果不想手动维护访问令牌的生成、刷新流程,可以使用gcloud命令行工具自动管理凭证:
- 本地安装gcloud工具后,先执行登录授权:
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/drive.readonly
- 直接执行查询命令即可,gcloud会自动生成、刷新有效访问令牌:
curl \ 'https://www.googleapis.com/drive/v3/files?corpora=user&q=createdTime > '\''2021-11-23T12:00:00'\''&fields=files(id,name,createdTime,mimeType)' \ --header "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ --header 'Accept: application/json' \ --compressed
内容的提问来源于stack exchange,提问作者Hal Burgiss
相关产品推荐
相关产品推荐

