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

TikTok API获取授权码遇Redirect_URI无效请求错误求助

TikTok API授权请求返回invalid_request/redirect_uri错误的排查与修复

核心问题定位

从错误响应和代码来看,存在两个关键问题:

  1. code_challenge参数格式错误且生成逻辑不符合PKCE规范
    错误响应中的code_challenge解码后为{'d85aea26bf0fded67f98fa487aab480061ca0d00786dbd064399fe93d06b5704'},包含多余的大括号和单引号,说明你的__generateRandomString(64)返回的不是纯随机字符串,而是带容器格式的内容。同时,TikTok的PKCE流程要求code_challenge必须是code_verifier(随机字符串)经过SHA-256哈希后再做Base64URL编码的结果,而非直接使用随机字符串。

  2. 测试环境使用了生产环境授权URL
    你使用的是测试密钥(staging keys),但调用的是生产环境的授权地址https://www.tiktok.com/v2/auth/authorize/,测试密钥仅能在staging环境生效。

修复方案

1. 修正PKCE参数生成逻辑

替换错误的code_challenge生成方式,严格遵循PKCE规范实现:

import secrets
import hashlib
import base64
import urllib.parse

def generate_pkce_pair():
    # 生成符合要求的code_verifier(长度43-128字符)
    code_verifier = secrets.token_urlsafe(96)
    # 计算SHA-256哈希并做Base64URL编码
    sha256_hash = hashlib.sha256(code_verifier.encode('utf-8')).digest()
    code_challenge = base64.urlsafe_b64encode(sha256_hash).decode('utf-8').rstrip('=')
    return code_verifier, code_challenge

def getAuthorizationURL():
    # 测试环境使用staging授权URL
    AUTHORIZE_URL = 'https://staging.tiktok.com/v2/auth/authorize/'

    csrf_state = secrets.token_hex(16)
    code_verifier, code_challenge = generate_pkce_pair()
    # 务必保存code_verifier,后续换取access_token时需要提交
    # 可通过state关联存储到session或缓存中

    params = {
        'client_key': Auth.tiktok_client_key,
        'scope': 'user.info.basic',
        'response_type': 'code',
        'redirect_uri': Auth.tiktok_redirect_uri,
        'state': csrf_state,
        'code_challenge': code_challenge,
        'code_challenge_method': 'S256'
    }

    url = AUTHORIZE_URL + '?' + urllib.parse.urlencode(params)
    return url

2. 切换到测试环境授权URL

将AUTHORIZE_URL替换为staging环境地址:https://staging.tiktok.com/v2/auth/authorize/,测试密钥无法在生产环境通过验证。

3. 再次校验Redirect URI配置

登录TikTok开发者后台,确认Login Kit配置中的Redirect URI与代码中的Auth.tiktok_redirect_uri完全一致,包括:

  • 协议(测试环境允许http)
  • 主机地址(必须是127.0.0.1,不能混用localhost,除非后台也配置了localhost)
  • 端口号(8080)
  • 路径末尾的斜杠(/callback/需与配置完全匹配)

额外注意事项

  • 保存code_verifier:后续用授权码换取access_token时,必须提交对应的code_verifier,否则会触发验证失败。
  • 网络访问:确保你的服务器/本地环境可以正常访问staging.tiktok.com,部分网络环境可能存在访问限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:45:07