在使用TikTok Business API对接第三方应用时,OAuth2授权流程是获取用户数据权限的必经环节,授权码作为临时凭证,有效期通常较短,过期后无法用于换取访问令牌,需要开发者通过规范流程重新获取。

TikTok Business API OAuth2授权码基础说明
TikTok Business API的OAuth2授权流程分为几个核心步骤,授权码是其中承上启下的凭证,它的作用是将用户授权后的临时凭证传递给服务端,用于换取长期可用的访问令牌和刷新令牌。
授权码的有效期通常为10分钟,且只能使用一次,使用后会立即失效。如果超过有效期未使用,或者重复使用已经兑换过的授权码,都会触发授权码过期的错误,服务端会返回类似invalid_grant的错误码。
授权码过期的常见原因
- 授权码获取后超过10分钟未调用兑换接口,自然过期
- 同一授权码被多次调用兑换接口,第一次使用后自动失效
- 用户主动取消了授权,或者修改了账号权限,导致原有授权码失效
- 应用配置的回调地址和授权时传递的回调地址不一致,导致授权码校验失败被判定为过期
解决授权码过期的完整方案
第一步:重新发起授权请求获取新授权码
当确认授权码过期后,首先需要引导用户重新发起授权流程,重新获取有效的授权码。授权请求的接口参数需要和应用在TikTok开放平台配置的信息完全一致。
import requests
# 应用配置信息
CLIENT_ID = "your_client_id"
REDIRECT_URI = "https://ipipp.com/callback"
SCOPE = "user.info.basic,video.list" # 需要的权限范围
STATE = "random_state_string" # 防CSRF参数
# 构造授权URL
auth_url = f"https://ads.tiktok.com/openapi/v1.3/oauth2/authorize/?client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&scope={SCOPE}&response_type=code&state={STATE}"
print(f"请用户访问以下地址完成授权:{auth_url}")
第二步:使用新授权码兑换访问令牌和刷新令牌
用户完成授权后,TikTok会将新的授权码通过回调地址传递到应用服务端,此时需要立即用该授权码调用令牌兑换接口,获取访问令牌和刷新令牌。刷新令牌的有效期较长,可用于后续无用户交互时刷新访问令牌。
import requests
CLIENT_ID = "your_client_id"
CLIENT_SECRET = "your_client_secret"
REDIRECT_URI = "https://ipipp.com/callback"
# 从回调参数中获取的新授权码
AUTH_CODE = "new_auth_code_from_callback"
token_url = "https://ads.tiktok.com/openapi/v1.3/oauth2/token/"
payload = {
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"code": AUTH_CODE,
"grant_type": "authorization_code",
"redirect_uri": REDIRECT_URI
}
response = requests.post(token_url, data=payload)
result = response.json()
if result.get("code") == 0:
access_token = result["data"]["access_token"]
refresh_token = result["data"]["refresh_token"]
expires_in = result["data"]["expires_in"] # 访问令牌有效期,单位秒
print(f"获取访问令牌成功,有效期{expires_in}秒")
print(f"刷新令牌:{refresh_token}")
else:
print(f"兑换令牌失败,错误信息:{result.get('message')}")
第三步:使用刷新令牌更新访问令牌
访问令牌过期后,不需要重新走用户授权流程,只需要用之前保存的刷新令牌调用刷新接口,即可获取新的有效访问令牌,避免频繁打扰用户。
import requests
import time
CLIENT_ID = "your_client_id"
CLIENT_SECRET = "your_client_secret"
# 之前保存的刷新令牌
REFRESH_TOKEN = "saved_refresh_token"
def refresh_access_token(refresh_token):
refresh_url = "https://ads.tiktok.com/openapi/v1.3/oauth2/refresh_token/"
payload = {
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"refresh_token": refresh_token,
"grant_type": "refresh_token"
}
response = requests.post(refresh_url, data=payload)
result = response.json()
if result.get("code") == 0:
new_access_token = result["data"]["access_token"]
new_expires_in = result["data"]["expires_in"]
print(f"刷新访问令牌成功,新令牌有效期{new_expires_in}秒")
return new_access_token
else:
print(f"刷新令牌失败,错误信息:{result.get('message')}")
return None
# 模拟访问令牌过期后刷新
new_token = refresh_access_token(REFRESH_TOKEN)
if new_token:
# 用新令牌调用业务接口
print("使用新访问令牌调用接口")
避免授权码过期的注意事项
- 授权码获取后必须在10分钟内完成兑换,不要长时间缓存授权码
- 每个授权码只能调用一次兑换接口,不要重复发起请求
- 回调地址必须和TikTok开放平台应用配置中的地址完全一致,包括协议、端口和路径
- 及时保存刷新令牌,访问令牌过期后优先使用刷新令牌更新,减少用户授权次数
- 在代码中捕获
invalid_grant错误,自动触发重新授权流程,提升用户体验
常见错误排查
如果兑换授权码时返回授权码过期的错误,可以按照以下顺序排查:
- 检查授权码是否超过10分钟有效期,是否在有效期内发起请求
- 检查该授权码是否已经被使用过,查看服务端日志确认兑换记录
- 检查回调地址参数是否和授权请求时传递的完全一致,不要有额外的参数或编码差异
- 检查应用的状态是否正常,是否在TikTok开放平台被禁用或者权限被回收
注意:刷新令牌也有有效期,通常有效期为半年,过期后需要重新引导用户完成授权流程获取新的刷新令牌,开发者需要定期检查刷新令牌的有效期,提前做好更新准备。
TikTok_Business_APIOAuth2授权码过期刷新令牌修改时间:2026-06-09 12:45:28