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
Redirect URI'larni ro'yxatdan o'tkazing
Login Kit sozlamalarida 10 tagacha redirect URI qo'shing. Har biri to'liq (absolute),
httpsbilan boshlanadigan, 512 belgidan qisqa, statik (query parametrsiz) va#fragmentsiz bo'lishi kerak.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.
Avtorizatsiya sahifasiga yo'naltiring
https://www.tiktok.com/v2/auth/authorize/niclient_key,response_type=code, vergul bilan ajratilganscope,redirect_urivastatebilan oching. Rozilik oynasini har doim ko'rsatish uchundisable_auto_auth=1qo'shing.Callback'ni tekshiring
TikTok
code,scopesvastateni, xato bo'lsaerrorvaerror_descriptionni qaytaradi.statemos kelmasa so'rovni rad eting va berilganscopesni so'raganingiz bilan solishtiring.Kodni serverda almashtiring
https://open.tiktokapis.com/v2/oauth/token/gaapplication/x-www-form-urlencodedko'rinishidaclient_key,client_secret,code,grant_type=authorization_codeva o'sharedirect_urini POST qiling. Desktop va mobil ilovalarcode_verifierham yuboradi.Tokenlarni xavfsiz saqlang
access_token,refresh_token, ikkala muddat vaopen_idni 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.
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
| Platforma | PKCE | Redirect URI qoidalari |
|---|---|---|
| Web | Login Kit for Web qo'llanmasida yo'q; xavfsizlik server tomonidagi secret va state ga tayanadi | To'liq https, statik, fragmentsiz, 10 tagacha, 512 belgidan qisqa |
| Desktop | Majburiy: havolada code_challenge va code_challenge_method=S256, almashtirishda code_verifier | http yoki https, localhost yoki 127.0.0.1 mumkin, port shart (wildcard mumkin), parametr va fragmentsiz |
| iOS / Android | Token almashtirishda code_verifier majburiy | Ilova 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.
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
| Holat | Muddat | Nima qilish kerak |
|---|---|---|
access_token | Berilgandan 24 soat | Tugashidan oldin yangilang; aniq qiymat javobdagi expires_in da |
refresh_token | Birinchi berilgandan 365 kun | Yangilash javobida boshqa refresh token kelsa, saqlanganini almashtiring |
| Refresh token muddati tugagach | yo'q | Foydalanuvchini Login Kit orqali qayta avtorizatsiyadan o'tkazing |
| Foydalanuvchi ilovani uzganda | authorization.removed kelganda access token allaqachon yaroqsiz | Akkauntni uzilgan deb belgilang va so'rovlarni to'xtating |
/v2/oauth/revoke/ chaqirilgach | Ilovangizga berilgan ruxsat bekor qilinadi | Saqlangan tokenlarni o'chiring |
boryo'q
Kunlik yangilash va uzishda bekor qilish
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
stateyarating 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
S256bilan PKCE ishlating va almashtirishdacode_verifieryuboring. - 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_idni TikTok qo'llab-quvvatlashi uchun logga yozing.
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.