无法从Upwork API获取auth_token问题求助(Python实现)
Upwork API回调接口无法获取auth_token问题排查与解决
问题概述
已配置Upwork API的consumer key和consumer secret,计划开发消息功能,但调用回调接口时返回Authorization URL:https://www.upwork.com/services/api/auth?oauth_token=None,无法获取有效auth_token推进后续开发。
错误原因分析
- 回调接口逻辑错误:你的
/callback接口误用了get_authorization_url()方法——这个方法是用来生成用户授权跳转URL的,不是用授权码换取token的方法,而且完全没用到请求中的code参数。 - 授权流程缺失:直接用
test.py请求回调接口,没有经过Upwork的用户授权流程,自然不会携带授权所需的验证参数,导致生成的URL中oauth_token为None。 - redirect_uri配置不一致:配置中的
redirect_uri设为https://localhost,但本地服务运行在5000端口且协议为HTTP,应该与Upwork开发者平台中配置的回调地址完全一致(比如http://localhost:5000/callback)。
修复后的代码实现
main.py(完整授权流程)
from flask import Flask, request, redirect import upwork app = Flask(__name__) # 配置信息,请确保与Upwork开发者平台完全一致 config = upwork.Config({ "consumer_key": "xxxxxxx", "consumer_secret": "xxxxxxx", "redirect_uri": "http://localhost:5000/callback" }) # 生成授权跳转URL的接口 @app.route('/auth') def auth(): client = upwork.Client(config) # 获取授权URL及临时token(OAuth 1.0a需保存临时token用于后续换正式token) auth_url, oauth_token, oauth_token_secret = client.get_authorization_url() # 临时存储临时token(生产环境建议用会话/数据库存储) app.config['TEMP_OAUTH_TOKEN'] = oauth_token app.config['TEMP_OAUTH_SECRET'] = oauth_token_secret return redirect(auth_url) # 回调接口:处理授权后的验证参数,换取正式token @app.route('/callback') def callback(): auth_verifier = request.args.get('oauth_verifier') client = upwork.Client(config) # 加载临时token,准备换取正式token client.set_consumer_key(config.get('consumer_key'), config.get('consumer_secret')) client.set_token(app.config['TEMP_OAUTH_TOKEN'], app.config['TEMP_OAUTH_SECRET']) # 获取正式的授权token access_token, access_token_secret = client.get_access_token(auth_verifier) # 此处可将token持久化存储,用于后续API调用 return f"成功获取Auth Token: {access_token}\nAuth Token Secret: {access_token_secret}" if __name__ == '__main__': app.run(host='localhost', port=5000, debug=True)
验证步骤
- 登录Upwork开发者平台,确保配置的
Redirect URI与代码中的redirect_uri完全一致(即http://localhost:5000/callback)。 - 运行
main.py启动本地服务。 - 在浏览器中访问
http://localhost:5000/auth,页面会跳转到Upwork授权页。 - 登录Upwork账号完成授权,页面自动跳转至
/callback接口,此时即可获取有效授权token。
注意事项
- 生产环境中,临时token不能存在内存中,需用用户会话或数据库存储。
- 后续调用Upwork API时,需用获取到的
access_token和access_token_secret初始化客户端。
内容的提问来源于stack exchange,提问作者Muhammad Daniyal
相关产品推荐
相关产品推荐

