Box Python SDK JWT认证报错:'NoneType' object is not callable
解决Box Python SDK JWT认证时的'NoneType' object is not callable错误
我之前在集成Box Python SDK做JWT认证时也踩过这个完全一样的坑,折腾了好一阵子才找到根源,给你几个针对性的排查方向:
1. 优先排查依赖库版本兼容性
这个错误大概率是cryptography库版本不兼容导致的——Box SDK依赖这个库处理加密操作,最新版本的cryptography可能移除了SDK依赖的旧API,导致调用时得到None。
解决方法:锁定兼容的版本,创建一个requirements.txt文件:
boxsdk==2.19.0 cryptography==39.0.1
然后执行:
pip uninstall -y boxsdk cryptography pip install -r requirements.txt
2. 检查私钥文件的加载问题
你当前用rsa_private_key_file_sys_path加载私钥,可能存在路径或权限问题:
- 换成绝对路径试试(比如
/Users/your_username/Desktop/certy.pem),避免相对路径的解析误差 - 确保当前用户对这个PEM文件有读取权限
- 验证私钥格式是否正确:在终端执行
openssl rsa -in certy.pem -check,如果格式有问题会直接报错
另外可以换一种加载方式,直接读取私钥内容传入SDK,绕开文件路径的问题:
from boxsdk import JWTAuth, Client # 读取私钥文件内容 with open('/Users/your_username/Desktop/certy.pem', 'rb') as key_file: private_key_content = key_file.read() auth = JWTAuth( client_id='clientid', client_secret='secret', enterprise_id='eid', jwt_key_id='key', rsa_private_key_data=private_key_content, rsa_private_key_passphrase='passphrase' ) try: access_token = auth.authenticate_instance() client = Client(auth) print("认证成功!Access Token:", access_token[:20] + "...") except Exception as e: print(f"认证失败: {str(e)}") import traceback traceback.print_exc()
3. 核对Box应用的配置细节
最后再确认一遍开发者控制台的配置:
- 你的JWT应用已经启用了企业级认证(Enterprise Access)
- 上传到应用的公钥和本地的私钥是配对的
enterprise_id、jwt_key_id完全和控制台显示的一致,没有拼写错误
按照这几个步骤排查,应该能解决这个问题。
内容的提问来源于stack exchange,提问作者grimes88
相关产品推荐
相关产品推荐

