TikTok API: «Проверка кода или запрос кода недействительны», несмотря на правильную реализацию PKCEPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 TikTok API: «Проверка кода или запрос кода недействительны», несмотря на правильную реализацию PKCE

Сообщение Anonymous »

Я пытаюсь интегрировать API TikTok в свое приложение, используя поток PKCE (ключ подтверждения для обмена кодами) для OAuth 2.0. Несмотря на то, что я следую документации и гарантирую, что code_verifier и code_challenge генерируются и передаются правильно, я продолжаю получать ошибку:

Код: Выделить всё

{
"error": "invalid_request",
"error_description": "Code verifier or code challenge is invalid.",
"log_id": "..."
}
Вот краткое описание моей реализации:
  • Генерация code_verifier и code_challenge:
    • code_verifier — это случайная строка с высокой энтропией из 64 символов.
    • code_challenge  — это хеш SHA-256 в кодировке Base64 URL.

    Код: Выделить всё

    import secrets
    import hashlib
    import base64
    import requests
    from flask import Flask, request, redirect, session
    import re
    import urllib.parse
    
    app = Flask(__name__)
    app.secret_key = secrets.token_urlsafe(64)
    
    client_key = 'your_client_key'
    client_secret = 'your_client_secret'
    redirect_uri = 'http://127.0.0.1:5000/callback/'
    scopes = 'video.upload'
    
    def generate_random_string(length):
    characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~'
    return ''.join(secrets.choice(characters) for _ in range(length))
    
    def generate_code_challenge_pair():
    code_verifier = generate_random_string(64)  # Generate a code_verifier with 64 characters
    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
    
    @app.route('/')
    def home():
    code_verifier, code_challenge = generate_code_challenge_pair()
    state = generate_random_string(16)
    
    session['code_verifier'] = code_verifier
    session['state'] = state
    
    tiktok_auth_url = (
    f'https://www.tiktok.com/v2/auth/authorize/?'
    f'client_key={client_key}&scope={scopes}&response_type=code&'
    f'redirect_uri={redirect_uri}&state={state}&'
    f'code_challenge={code_challenge}&code_challenge_method=S256'
    )
    return redirect(tiktok_auth_url)
    
    @app.route('/callback/')
    def callback():
    code = request.args.get('code')
    state = request.args.get('state')
    
    if state != session.get('state'):
    return 'CSRF verification failed', 400
    
    code_verifier = session.get('code_verifier')
    if not code_verifier:
    return 'Missing code verifier', 400
    
    decoded_code = urllib.parse.unquote(code)
    
    access_token = get_access_token(decoded_code, code_verifier)
    if access_token:
    return f'Authentication successful! Access token: {access_token}'
    else:
    return 'Failed to obtain access token', 400
    
    def get_access_token(code, code_verifier):
    url = 'https://open.tiktokapis.com/v2/oauth/token/'
    headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
    }
    payload = {
    'client_key': client_key,
    'client_secret': client_secret,
    'code': code,
    'grant_type': 'authorization_code',
    'redirect_uri': redirect_uri,
    'code_verifier': code_verifier
    }
    response = requests.post(url, headers=headers, data=payload)
    data = response.json()
    if 'access_token' in data:
    return data['access_token']
    return None
    
    if __name__ == '__main__':
    app.run(port=5000, debug=True)
    
  • Перенаправление в TikTok для авторизации:
    • Пользователь перенаправляется на URL-адрес авторизации TikTok с необходимыми параметрами, включая code_challenge и состояние.
    < /li>
  • Обработка обратного вызова:
    • Код авторизации фиксируется и состояние проверяется.
    • Затем code_verifier используется для запроса токена доступа.
Несмотря на эту настройку, в ответе от конечной точки токена TikTok постоянно указывается, что «Проверка кода или запрос кода недействительны».
Я дважды проверил создание и передачу кодов code_verifier и code_challenge. Вот несколько примеров значений для справки:
  • Состояние: WBwqf0e8J5NKZukn
  • Код: okYXNycnagbXKg4Alkum9JPnGI-WJsnxENO3NCCHHxVilhKE_XzPHhKnBjgprrMtBai2vQrDu2YIYjm3nzgZv4HgCB4nxffI0zm36W69d5jDpGsh_gfmjR9CG6RG4saRDu FeTTIr0IYnx7fDFNhiAv1KkYorssycwM4VbBNEr_FJUtBiyv7Cw_WU9EylNoa5Vl6H2jFCw4poI MsUwE7JSBm7OgM4DzceqfS5z7_yAP14pOWaT3GHqd0jALys0LNX*1!4549.va
  • Проверка кода: Q6TYgUOmuBlhmw1IgAVSPJQ4t14sf.CdD4f3.ZR2ZLpCumYzIkMD4b7- DFwoffCs
  • Полезная нагрузка: {'client_key': 'sbaw7maxtihzttrwqu', 'client_secret': 'T1J1o0JwyZf3ZehwRqiTnfs7JvRFUYk3', 'code': 'okYXNycnagbXKg4Alkum9JPnGI-WJsnxEN O3NCCHHxVilhKE_XzPHhKnBjgprrMtBai2vQrDu2YIYjm3nzgZv4HgCB4nxffI0zm36W69d5jDpGsh_gfmjR9CG6RG4saRDuFeTTIr0IYnx7fDFNhiAv1KkYorssycwM4VbBNER_FJUtBiy v7Cw_WU9EylNoa5Vl6H2jFCw4poIMsUwE7JSBm7OgM4DzceqfS5z7_yAP14pOWaT3GHqd0jALys0LNX *1!4549.va', 'grant_type': 'authorization_code', 'redirect_uri': 'http://127.0.0.1:5000/callback/', 'code_verifier': 'Q6TYgUOmuBlhmw1IgAVSPJQ4t14sf.CdD4f3.ZR2ZLpCumYzIkMD4b7-DFwoffCs'} /code>
Есть ли у кого-нибудь опыт реализации PKCE в TikTok или вы видите, где я могу ошибаться? Будем очень признательны за любую помощь!


Подробнее здесь: https://stackoverflow.com/questions/788 ... ct-pkce-im
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»