使用Python BoxSDK认证时出现'refresh_token参数未找到'错误求助
解决Box SDK认证错误:No "refresh_token" parameter found
错误原因
刚创建的Box应用尚未完成首次授权,read_tokens()从keyring中读取不到有效的refresh_token,导致传给Box API的参数缺失,触发400错误。
解决步骤
1. 确认依赖安装
确保已安装所需依赖包:
pip install boxsdk keyring
2. 修改代码添加首次授权流程
原代码默认keyring中已有令牌,但新应用需先完成授权获取初始令牌。修改后的完整代码如下:
from boxsdk import OAuth2 from boxsdk import Client import keyring CLIENT_ID = '你的客户端ID' CLIENT_SECRET = '你的客户端密钥' EMAIL_ADDRESS = '管理员邮箱' def read_tokens(): """从keyring读取授权令牌""" auth_token = keyring.get_password('Box_Auth', EMAIL_ADDRESS) refresh_token = keyring.get_password('Box_Refresh', EMAIL_ADDRESS) return auth_token, refresh_token def store_tokens(access_token, refresh_token): """Box SDK刷新令牌时的回调函数,用于存储令牌""" keyring.set_password('Box_Auth', EMAIL_ADDRESS, access_token) keyring.set_password('Box_Refresh', EMAIL_ADDRESS, refresh_token) def main(): # 从安全存储读取令牌 access_token, refresh_token = read_tokens() # 首次授权:如果没有有效令牌,触发授权流程 if not access_token or not refresh_token: oauth = OAuth2( client_id=CLIENT_ID, client_secret=CLIENT_SECRET, store_tokens=store_tokens, ) # 生成授权URL,重定向URI需和Box应用设置一致 auth_url, csrf_token = oauth.get_authorization_url('http://localhost:8080') print(f"请访问以下URL完成授权:{auth_url}") auth_code = input("粘贴授权后页面URL中的code参数:") # 用授权码获取初始令牌 access_token, refresh_token = oauth.authenticate(auth_code) print("授权成功,令牌已保存到keyring") # 初始化OAuth2客户端 oauth = OAuth2( client_id=CLIENT_ID, client_secret=CLIENT_SECRET, access_token=access_token, refresh_token=refresh_token, store_tokens=store_tokens, ) # 创建Box客户端并验证 client = Client(oauth) current_user = client.user(user_id='me').get() print('当前Box用户:', current_user.name) if __name__ == "__main__": main()
3. 配置Box应用重定向URI
- 登录Box开发者控制台,找到你的应用
- 进入"Configuration"页面,找到"Redirect URIs"配置项
- 添加
http://localhost:8080并保存设置
4. 运行代码完成首次授权
- 执行修改后的代码,控制台会输出授权URL
- 打开URL,用管理员账号登录并授权应用
- 授权成功后页面会跳转到
http://localhost:8080,复制URL中code=后的字符串 - 将复制的code粘贴到控制台输入框,按回车
- 程序会自动将令牌保存到keyring,之后再次运行代码即可直接使用
内容的提问来源于stack exchange,提问作者Whitesnack
相关产品推荐
相关产品推荐

