Asosiy mazmunga o'tish
Socialift
Qo'llanma

TikTok Login Kit: OAuth oqimi va token hayotiy sikli

TikTok Login Kit — bu OAuth 2.0. Ilova foydalanuvchini client_key, scope'lar va state bilan https://www.tiktok.com/v2/auth/authorize/ sahifasiga yuboradi, ro'yxatdan o'tgan redirect URI'ga code oladi va uni serverda /v2/oauth/token/ orqali tokenga almashtiradi. Access token 24 soat, refresh token 365 kun amal qiladi — shuning uchun kunlik yangilashni rejalashtiring.

Yangilangan:

TikTok OAuth qanday ishlaydi?

TikTok authorization code oqimidan foydalanadi. Foydalanuvchi TikTok'ning avtorizatsiya sahifasida so'ralgan scope'larni tasdiqlaydi, TikTok code bilan ortga yo'naltiradi, serveringiz esa uni client key va client secret bilan birga access token, refresh token va foydalanuvchining open_id siga almashtiradi. Keyingi API so'rovlarida access token Authorization: Bearer sarlavhasida yuboriladi.

Login Kit Web, Desktop, iOS va Android uchun mavjud. Veb oqim client secret'ni saqlaydigan va state'ni tekshiradigan serverga tayanadi; desktop va mobil oqimlarga PKCE qo'shiladi — kodni almashtirishda code_verifier yuboriladi.

Token nima qila olishini scope'lar belgilaydi. user.info.basic avtomatik qo'shiladi; video.list yoki video.publish kabi boshqa scope'lar developer portalida ilovaga biriktirilishi va App Review'da ko'rsatilishi kerak.

Asosiy atamalar: client key, client secret, open_id va tokenlar

client_key
Ilovaning ochiq identifikatori. Avtorizatsiya havolasida va token so'rovlarida yuboriladi.
client_secret
Ilovaning maxfiy kaliti. Faqat serverdan /v2/oauth/token/ va /v2/oauth/revoke/ so'rovlarida ishlatiladi; brauzer yoki mobil ilova kodiga qo'yilmaydi.
code
Foydalanuvchi rozilik bergach redirect URI'ga qaytadigan avtorizatsiya kodi. Uni darhol tokenga almashtiring.
access_token
API so'rovlari uchun Bearer token, berilgan paytdan 24 soat amal qiladi.
refresh_token
Yangi access token olish uchun; birinchi berilganidan 365 kun amal qiladi. Yangilash javobida boshqa refresh token kelishi mumkin.
open_id
Token bilan qaytadigan TikTok foydalanuvchisining noyob identifikatori. Ulangan akkaunt kaliti sifatida ishlating.
state
Yo'naltirishdan oldin yaratiladigan va callback'da solishtiriladigan tasodifiy qiymat — CSRF'dan himoya.

Veb ilova uchun TikTok OAuth'ni qanday sozlash kerak

  1. Redirect URI'larni ro'yxatdan o'tkazing

    Login Kit sozlamalarida 10 tagacha redirect URI qo'shing. Har biri to'liq (absolute), https bilan boshlanadigan, 512 belgidan qisqa, statik (query parametrsiz) va # fragmentsiz bo'lishi kerak.

  2. State yarating va saqlang

    Har bir kirish urinishi uchun tasodifiy satr yarating va uni foydalanuvchi sessiyasida yoki qisqa muddatli cookie'da saqlang. TikTok'ning o'z veb namunasi ham qisqa muddatli cookie ishlatadi.

  3. Avtorizatsiya sahifasiga yo'naltiring

    https://www.tiktok.com/v2/auth/authorize/ ni client_key, response_type=code, vergul bilan ajratilgan scope, redirect_uri va state bilan oching. Rozilik oynasini har doim ko'rsatish uchun disable_auto_auth=1 qo'shing.

  4. Callback'ni tekshiring

    TikTok code, scopes va state ni, xato bo'lsa error va error_description ni qaytaradi. state mos kelmasa so'rovni rad eting va berilgan scopes ni so'raganingiz bilan solishtiring.

  5. Kodni serverda almashtiring

    https://open.tiktokapis.com/v2/oauth/token/ ga application/x-www-form-urlencoded ko'rinishida client_key, client_secret, code, grant_type=authorization_code va o'sha redirect_uri ni POST qiling. Desktop va mobil ilovalar code_verifier ham yuboradi.

  6. Tokenlarni xavfsiz saqlang

    access_token, refresh_token, ikkala muddat va open_id ni shifrlangan holda saqlang. TikTok veb qo'llanmasi client secret va refresh token xavfsizligini aniq server zimmasiga yuklaydi.

Python'da Login Kit

Frameworkka bog'liq bo'lmagan handler'lar: session — web frameworkingiz beradigan sessiya ombori.

tiktok_login.py
import secrets
from socialift import TikTok

REDIRECT_URI = "https://app.example.com/oauth/tiktok/callback"
SCOPES = ["user.info.basic", "video.list", "video.publish"]

async def begin_login(session: dict) -> str:
    session["tiktok_state"] = secrets.token_urlsafe(32)
    async with TikTok.from_env() as tt:
        return tt.login_url(
            redirect_uri=REDIRECT_URI,
            state=session["tiktok_state"],
            scopes=SCOPES,
        )

async def finish_login(session: dict, code: str, state: str) -> dict:
    expected = session.pop("tiktok_state", "")
    if not expected or not secrets.compare_digest(state, expected):
        raise ValueError("OAuth state mismatch")
    async with TikTok.from_env() as tt:
        bundle = await tt.exchange_code(code, redirect_uri=REDIRECT_URI)
    return {
        "open_id": bundle.raw.get("open_id"),
        "access_token": bundle.access_token,
        "refresh_token": bundle.refresh_token,
        "expires_at": bundle.expires_at,
        "scopes": bundle.scopes,
    }

exchange_code TikTok talab qilgandek form-urlencoded tana yuboradi va access token qaytmasa ApiError ko'taradi.

Natijani shifrlab saqlang. SDK chaqiruvlar orasida hech narsa saqlamaydi, shuning uchun bitta klient bir nechta ijodkor uchun ishlay oladi.

PKCE: veb, desktop va mobil

PKCE: veb, desktop va mobil — Platformalar bo'yicha imkoniyatlar jadvali
PlatformaPKCERedirect URI qoidalari
WebLogin Kit for Web qo'llanmasida yo'q; xavfsizlik server tomonidagi secret va state ga tayanadiTo'liq https, statik, fragmentsiz, 10 tagacha, 512 belgidan qisqa
DesktopMajburiy: havolada code_challenge va code_challenge_method=S256, almashtirishda code_verifierhttp yoki https, localhost yoki 127.0.0.1 mumkin, port shart (wildcard mumkin), parametr va fragmentsiz
iOS / AndroidToken almashtirishda code_verifier majburiyIlova uchun kiritilgan platforma ma'lumotlari (package name, bundle ID) asosida

TikTok desktop qo'llanmasi code_challenge ni verifier'ning SHA-256 xeshidan hex ko'rinishida hisoblaydi — RFC 7636'dagi base64url emas.

Desktop ilovalar uchun PKCE

Verifier 43–128 belgidan iborat bo'lishi va faqat A–Z, a–z, 0–9 hamda -, ., _, ~ belgilaridan tuzilishi kerak.

tiktok_desktop_pkce.py
import hashlib
import secrets
from socialift import TikTok

REDIRECT_URI = "http://127.0.0.1:3455/callback/"

def make_pkce() -> tuple[str, str]:
    verifier = secrets.token_urlsafe(48)                       # 64 belgi
    challenge = hashlib.sha256(verifier.encode()).hexdigest()  # hex, TikTok hujjatidagidek
    return verifier, challenge

async def desktop_login(state: str) -> tuple[str, str]:
    verifier, challenge = make_pkce()
    async with TikTok.from_env() as tt:
        url = tt.login_url(
            redirect_uri=REDIRECT_URI,
            state=state,
            code_challenge=challenge,
            code_challenge_method="S256",
        )
    return url, verifier

async def desktop_callback(code: str, verifier: str):
    async with TikTok.from_env() as tt:
        return await tt.exchange_code(code, redirect_uri=REDIRECT_URI, code_verifier=verifier)

Kodni almashtirishni backend'ingizda bajaring: token so'rovi baribir client secret'ni o'z ichiga oladi.

Token muddatlari va ular bilan nima qilish kerak

Token muddatlari va ular bilan nima qilish kerak — Platformalar bo'yicha imkoniyatlar jadvali
HolatMuddatNima qilish kerak
access_tokenBerilgandan 24 soatTugashidan oldin yangilang; aniq qiymat javobdagi expires_in da
refresh_tokenBirinchi berilgandan 365 kunYangilash javobida boshqa refresh token kelsa, saqlanganini almashtiring
Refresh token muddati tugagachyo'qFoydalanuvchini Login Kit orqali qayta avtorizatsiyadan o'tkazing
Foydalanuvchi ilovani uzgandaauthorization.removed kelganda access token allaqachon yaroqsizAkkauntni uzilgan deb belgilang va so'rovlarni to'xtating
/v2/oauth/revoke/ chaqirilgachIlovangizga berilgan ruxsat bekor qilinadiSaqlangan tokenlarni o'chiring

boryo'q

Kunlik yangilash va uzishda bekor qilish

tiktok_tokens.py
from datetime import datetime, timedelta, timezone
from socialift import ApiError, TikTok

async def ensure_fresh(account: dict) -> dict:
    left = account["expires_at"] - datetime.now(timezone.utc)
    if left > timedelta(hours=2):
        return account
    async with TikTok.from_env() as tt:
        try:
            bundle = await tt.refresh_token(account["refresh_token"])
        except ApiError:
            account["status"] = "reconnect_required"
            return account
    account.update(
        access_token=bundle.access_token,
        refresh_token=bundle.refresh_token or account["refresh_token"],
        expires_at=bundle.expires_at,
    )
    return account

async def disconnect(account: dict) -> None:
    async with TikTok.from_env() as tt:
        await tt.revoke(account["access_token"])

Yangilashni cron yoki navbat orqali 24 soatdan qisqaroq oraliqda ishga tushiring. Har safar javobdagi refresh token'ni saqlang — TikTok qiymat o'zgargan bo'lsa yangisini ishlatishni talab qiladi.

Amalda scope'lar va rozilik

scope parametri vergul bilan ajratilgan ro'yxat va har bir scope oldindan TikTok for Developers saytida ilovangizga biriktirilgan bo'lishi kerak. Callback'da TikTok berilgan scope'larni scopes parametrida qaytaradi — uni saqlang va aniq scope talab qiladigan endpoint'ni chaqirishdan oldin tekshiring.

Keyinroq scope qo'shsangiz, mavjud foydalanuvchilarni qayta avtorizatsiyadan o'tkazing. disable_auto_auth=0 bo'lsa, amal qilayotgan sessiyada TikTok avtorizatsiya sahifasini o'tkazib yuboradi; disable_auto_auth=1 esa uni doim ko'rsatadi — so'ralgan scope'lar o'zgarganda aynan shu kerak. SDK'da: tt.login_url(..., disable_auto_auth=True).

Foydalanuvchi TikTok sozlamalarida ilovangizni olib tashlasa, ro'yxatdan o'tgan webhook authorization.removed hodisasini oladi; bu paytda access token allaqachon yaroqsiz. Socialift SDK bunday yetkazishlarni verify_tiktok_request bilan tekshiradi va parse_tiktok_event bilan ajratadi. Socialift kabinetidagi «Kalitlar» sahifasi esa TikTok paneliga kiritiladigan aniq redirect va webhook manzillarini ko'rsatadi.

TikTok OAuth xavfsizlik tekshiruv ro'yxati

  • Client secret va refresh token'lar faqat serverda, shifrlangan holda saqlansin.
  • Har bir kirish uchun yangi state yarating va mos kelmagan callback'larni rad eting.
  • Aniq, statik HTTPS redirect URI ro'yxatdan o'tkazing; kontekstni query parametrda emas, state yoki sessiyada tashing.
  • Desktop ilovalarda S256 bilan PKCE ishlating va almashtirishda code_verifier yuboring.
  • Access token'ni 24 soatdan qisqa jadval bilan yangilang va almashgan refresh token'larni saqlang.
  • Foydalanuvchi mahsulotingizda uzganda tokenni /v2/oauth/revoke/ bilan bekor qiling.
  • Muvaffaqiyatsiz so'rovlardagi log_id ni TikTok qo'llab-quvvatlashi uchun logga yozing.

← Blogga qaytish

Ko'p so'raladigan savollar

TikTok access token qancha amal qiladi?

Access token berilgan paytdan 24 soat, refresh token birinchi berilganidan 365 kun amal qiladi. Shuning uchun integratsiyaga kunlik yangilash vazifasi kerak; refresh token muddati tugagach foydalanuvchi qayta avtorizatsiyadan o'tadi.

Yangilashda TikTok yangi refresh token qaytaradimi?

Qaytarishi mumkin. TikTok hujjatiga ko'ra javobdagi refresh_token yuborilganidan farq qilishi mumkin va bunda yangi qiymatni ishlatish shart. Har yangilashdan so'ng saqlangan qiymatni yangilang.

TikTok veb login uchun PKCE shartmi?

Login Kit for Web qo'llanmasida PKCE yo'q: veb oqim server tomonidagi client secret va state tekshiruviga tayanadi. Desktop va mobil ilovalar esa kodni almashtirishda code_verifier yuborishi shart; desktop code_challenge hex ko'rinishidagi SHA-256.

Nega redirect_uri bo'yicha xato chiqyapti?

So'rovdagi redirect_uri ilova sozlamalarida ro'yxatdan o'tgan qiymatga to'liq mos kelishi kerak. Veb uchun URI to'liq https manzil, statik (parametrsiz) va # fragmentsiz bo'lishi lozim; kod almashtirishda ham aynan o'sha qiymatni yuboring.

TikTok tokenini qanday bekor qilish mumkin?

https://open.tiktokapis.com/v2/oauth/revoke/ ga client_key, client_secret va token bilan POST so'rov yuboring. Socialift SDK'da bu await tt.revoke(access_token).

Qaysi scope standart holatda beriladi?

Login Kit ishlatadigan ilovaga user.info.basic avtomatik qo'shiladi: u open_id, avatar va ko'rinadigan ismni beradi. Qolgan scope'larni ilovaga alohida qo'shasiz.

Manbalar

  1. TikTok for Developers — Login Kit for Web
  2. TikTok for Developers — Login Kit for Desktop
  3. TikTok for Developers — User access token management
  4. TikTok for Developers — Scopes reference
  5. TikTok for Developers — Webhook events

Bog'liq sahifalar