You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从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推进后续开发。

错误原因分析

  1. 回调接口逻辑错误:你的/callback接口误用了get_authorization_url()方法——这个方法是用来生成用户授权跳转URL的,不是用授权码换取token的方法,而且完全没用到请求中的code参数。
  2. 授权流程缺失:直接用test.py请求回调接口,没有经过Upwork的用户授权流程,自然不会携带授权所需的验证参数,导致生成的URL中oauth_token为None。
  3. 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)

验证步骤

  1. 登录Upwork开发者平台,确保配置的Redirect URI与代码中的redirect_uri完全一致(即http://localhost:5000/callback)。
  2. 运行main.py启动本地服务。
  3. 在浏览器中访问http://localhost:5000/auth,页面会跳转到Upwork授权页。
  4. 登录Upwork账号完成授权,页面自动跳转至/callback接口,此时即可获取有效授权token。

注意事项

  • 生产环境中,临时token不能存在内存中,需用用户会话或数据库存储。
  • 后续调用Upwork API时,需用获取到的access_token和access_token_secret初始化客户端。

内容的提问来源于stack exchange,提问作者Muhammad Daniyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:01:13