Autentifikatsiya: litsenziya kaliti, seat va platforma tokenlari
Socialift SDK'ni slk_... litsenziya kaliti ishga tushiradi. Kalit Ed25519 bilan imzolangan va avval offline tekshiriladi, keyin birinchi so'rovdan oldin litsenziya serveridan 12 soatlik lease olinadi. Server javob bermasa, oxirgi muvaffaqiyatli tasdiqdan boshlab 7 kun ishlash davom etadi. Har bir muhit bitta seat egallaydi — konteynerlarda SOCIALIFT_INSTANCE_ID bering.
Yangilangan:
Socialift bilan ishlashda qanday kalitlar bo'ladi?
Uch xil kalit bor va ularni aralashtirmaslik kerak. Litsenziya kaliti (slk_...) — Socialift SDK'ni ishlatish huquqi; u platformalarga yuborilmaydi. Developer app kalitlari (Meta App ID va secret, LinkedIn va TikTok client ma'lumotlari, Telegram api_id/api_hash) ilovangizni platformaga tanitadi. Platforma tokenlari (OAuth access token, page token, bot tokeni, Telegram sessiyasi) esa aniq foydalanuvchi yoki akkaunt nomidan ishlashga ruxsat beradi.
Litsenziya kaliti, developer app kaliti va platforma tokeni: farqi nimada?
| Litsenziya kaliti | Developer app kaliti | Platforma tokeni | |
|---|---|---|---|
| Misol | slk_... | Meta App ID + App Secret; LinkedIn Client ID/Secret; TikTok Client Key/Secret; Telegram api_id/api_hash | User yoki page access token, TikTok refresh token, bot tokeni, Telegram sessiyasi |
| Kim beradi | Socialift kabineti → «Tokenlar» | Platformaning developer konsoli | OAuth oqimi, @BotFather yoki telefon orqali login |
| Nima uchun | SDK ishlashiga ruxsat | Ilovani platformaga tanitish: OAuth, imzolar | Aniq akkaunt nomidan so'rov yuborish |
| SDK'da qanday beriladi | SOCIALIFT_LICENSE_KEY yoki license_key= | Konstruktor: Facebook(app_id=..., app_secret=...) yoki from_env() | Har bir metodga argument: fb.pages(token) |
| Qayerda saqlanadi | Server muhit o'zgaruvchisi yoki secret manager | Server muhit o'zgaruvchisi yoki secret manager | Sizning bazangizda, shifrlangan |
Kabinetdagi «Kalitlar» va «Ulanishlar» bo'limlari Playground va Socialift serveri uchun. O'z ilovangizdagi SDK ular bilan bog'lanmaydi — kalit va tokenlarni o'zingiz berasiz.
Litsenziya kalitini SDK'ga qanday berish mumkin?
Uch usul bor. Ustuvorlik tartibi: license_key= argumenti → SOCIALIFT_LICENSE_KEY → set_license_key().
import os
import socialift
from socialift import Facebook
# 1) Muhit o'zgaruvchisi (tavsiya etiladi): SOCIALIFT_LICENSE_KEY=slk_...
fb = Facebook.from_env()
# 2) Aniq argument — muhit o'zgaruvchisidan ustun turadi
fb = Facebook.from_env(license_key=os.environ["BILLING_SLK"])
# 3) Butun jarayon uchun (notebook, testlar)
socialift.set_license_key("slk_...")Diqqat: SOCIALIFT_LICENSE_KEY o'rnatilgan bo'lsa, u set_license_key() dan ustun turadi. Notebook'da kalit «almashmayapti» deb tuyulsa, avval muhit o'zgaruvchisini tekshiring.
Kalit klient yaratilganda emas, birinchi so'rovdan oldin tekshiriladi. Bir jarayonda bir xil kalitli barcha klientlar bitta aktivatsiyani baham ko'radi. TelegramAccount ham license_key= argumentini qabul qiladi.
Webhook yordamchilari (socialift.webhooks) va socialift.crypto funksiyalari tarmoqqa chiqmaydi va litsenziyani tekshirmaydi.
Litsenziya qanday tekshiriladi?
Offline: format va imzo
Kalit
slk_<payload>.<imzo>ko'rinishida. SDK prefiksni, formatni va paket ichidagi ochiq kalit bilan Ed25519 imzosini tekshiradi, kalit ichidagi amal qilish muddatini ham ko'radi. Format yoki imzo xato bo'lsa, tarmoqqa chiqmasdanLicenseInvalidchiqadi. Kalitdagi muddat o'tgan bo'lsa, SDK 1.3+ avval serverdagi joriy muddatni so'raydi (token uzaytirilgan bo'lishi mumkin), offline rejim va SDK 1.2.x esa darholLicenseExpiredberadi.Online: lease olish
Birinchi so'rovdan oldin SDK litsenziya serveriga kalit, muhit barmoq izi (hash), SDK va Python versiyasini yuborib, lease oladi. Standart muddat 12 soat; uni server belgilaydi. Lease amal qilguncha serverga qayta murojaat qilinmaydi.
Avtomatik yangilash
Lease tugagach, navbatdagi so'rovdan oldin yangilanadi. Server reja yoki imkoniyatlarni o'zgartirgan bo'lsa, yangi holat kalitni almashtirmasdan qo'llanadi. Token uzaytirilganda kabinet o'sha
key_idbilan qayta imzolangan kalitni ko'rsatadi: SDK 1.3+ yangi muddatni serverdan o'zi oladi, PyPI'dagi 1.2.x yokiSOCIALIFT_LICENSE_OFFLINE=1bilan esaSOCIALIFT_LICENSE_KEYni shu kalitga almashtiring.Offline grace davri
Server yetib bo'lmasa yoki 403 dan boshqa xato qaytarsa, oxirgi muvaffaqiyatli tasdiqdan 7 kun o'tmagan bo'lsa SDK ishlashda davom etadi va serverni har soatda qayta tekshiradi. 7 kun o'tgan yoki tasdiq yozuvi yo'q bo'lsa —
LicenseError.Bekor qilish — darhol
Server 403 qaytarsa (kalit bekor qilingan, seat chegarasi to'lgan yoki muhit bloklangan), grace ishlamaydi:
LicenseRevokeddarhol chiqadi va keshdagi tasdiq o'chiriladi.
Litsenziyaga oid muhit o'zgaruvchilari
| O'zgaruvchi | Standart qiymat | Vazifasi |
|---|---|---|
SOCIALIFT_LICENSE_KEY | yo'q | Litsenziya kaliti slk_... |
SOCIALIFT_INSTANCE_ID | hostname, arxitektura va MAC manzil hash'i | Muhitning barqaror nomi — seat shu bo'yicha hisoblanadi |
SOCIALIFT_LICENSE_OFFLINE | o'chiq | 1, true yoki yes — faqat offline imzo tekshiruvi, serverga murojaat yo'q |
SOCIALIFT_LICENSE_ENDPOINT | https://api.socialift.uz/api/v1/license | Litsenziya serveri manzili; Socialift aytmaguncha o'zgartirmang |
XDG_CACHE_HOME | ~/.cache | socialift/license.json (oxirgi tasdiq vaqti) shu papkaga yoziladi — grace davri shunga tayanadi |
boryo'q
Tarmoq cheklangan bo'lsa (firewall, egress qoidalari), api.socialift.uz ga HTTPS chiqishga ruxsat bering.
Offline grace davri qanday ishlaydi?
Grace davri server javob bermagan paytdan emas, oxirgi muvaffaqiyatli aktivatsiyadan hisoblanadi. SDK bu vaqtni ~/.cache/socialift/license.json ga (yoki $XDG_CACHE_HOME/socialift/license.json ga) yozadi. Server yetib bo'lmasa va o'shandan beri 7 kun o'tmagan bo'lsa, SDK log'ga ogohlantirish yozadi va ishlashda davom etadi.
Konteyner qayta yaratilganda bu fayl yo'qoladi. Yangi konteyner ishga tushayotganda server yetib bo'lmasa, grace uchun yozuv yo'q va birinchi so'rov LicenseError bilan tugaydi. Grace deploy'lar orasida ham ishlashi kerak bo'lsa, kesh papkasini doimiy volume'ga ulang yoki XDG_CACHE_HOME ni shunday papkaga yo'naltiring.
Server 403 qaytargan holatlar — bekor qilingan kalit, seat chegarasi, bloklangan muhit — grace'ga tushmaydi.
SOCIALIFT_LICENSE_OFFLINE qachon kerak?
Tashqi tarmoqqa chiqishi yo'q muhitlar uchun: izolyatsiyalangan CI yoki yopiq kontur. Bu rejimda faqat kalit imzosi va kalit ichidagi muddat tekshiriladi, litsenziya serveriga murojaat qilinmaydi.
Oqibatlari: serverdagi bekor qilish ta'sir qilmaydi, reja o'zgarishlari yetib kelmaydi, lease bilan keladigan imzolangan qoidalar paketi (Graph maydon to'plamlari, lead maydonlarini moslashtirish jadvali) yangilanmaydi — SDK keshdagi yoki minimal bazaviy to'plam bilan ishlaydi. Oddiy production uchun bu rejim tavsiya etilmaydi.
Seat nima va Docker yoki Kubernetes'da nega SOCIALIFT_INSTANCE_ID kerak?
Seat — kalit bir vaqtda ishlatilishi mumkin bo'lgan muhitlar soni. Muhit barmoq izi bilan aniqlanadi: SOCIALIFT_INSTANCE_ID berilsa uning SHA-256 hash'i, berilmasa hostname, arxitektura va MAC manzil hash'i. Docker har yangi konteynerga yangi hostname va MAC beradi, shuning uchun har deploy yangi seat egallaydi va chegara to'lgach SDK LicenseRevoked («Seat chegarasi» xabari) bilan to'xtaydi.
Oldin ro'yxatga olingan barmoq izi qayta aktivatsiyada yangi seat egallamaydi. Band seat'lar o'z-o'zidan bo'shamaydi: ularni «Tokenlar» → «Tekshirish va muhitlar» da ko'rasiz, bo'shatish uchun qo'llab-quvvatlash xizmatiga yozing.
Har bir muhitga bitta barqaror nom bering, masalan my-app-prod va my-app-staging.
Kubernetes va Docker'da muhit nomini berish
# Kubernetes Deployment (parcha)
env:
- name: SOCIALIFT_INSTANCE_ID
value: my-app-prod
- name: SOCIALIFT_LICENSE_KEY
valueFrom:
secretKeyRef:
name: socialift
key: license-key
# Docker:
# docker run -e SOCIALIFT_INSTANCE_ID=my-app-prod -e SOCIALIFT_LICENSE_KEY my-app:latestIshga tushishda litsenziyani tekshirish
Muammoni birinchi foydalanuvchi so'rovida emas, deploy paytida ko'rish uchun.
import asyncio
from socialift import LicenseError, LicenseManager
async def check_license():
try:
lic = await LicenseManager.get().ensure()
except LicenseError as exc:
raise SystemExit(f"Socialift litsenziyasi ishlamayapti: {exc}")
print(lic.key_id, lic.plan.value, lic.expires_at, lic.seats)
asyncio.run(check_license())LicenseManager.get() kalitni xuddi klientlar kabi topadi va ular bilan umumiy menejerni qaytaradi: ilova ichida chaqirilsa, keyingi so'rovlar qayta aktivatsiya qilmaydi. Shu mashinadagi alohida jarayon ham bir xil barmoq izi bilan keladi va yangi seat egallamaydi.
lic.features — rejangizda ochiq imkoniyatlar to'plami.
Litsenziya xatolari va ularni tuzatish
| Xato | Qachon chiqadi | Nima qilish kerak |
|---|---|---|
LicenseError | Asosiy sinf. Server tasdiqlamadi va grace davri yo'q: tarmoq xatosi, server nosozligi yoki grace tashqarisida rad etilgan kalit | Tarmoq va kalitni tekshiring — sabab xabar matnida |
LicenseRequired | Kalit topilmadi: license_key=, SOCIALIFT_LICENSE_KEY va set_license_key() — hammasi bo'sh | Muhit o'zgaruvchisini qo'ying |
LicenseInvalid | Prefiks slk_ emas, format buzilgan, imzo mos emas yoki cryptography o'rnatilmagan | Kalitni to'liq, bo'shliqsiz qayta nusxalang |
LicenseExpired | Token muddati tugagan (SDK 1.2.x va offline rejimda — kalit ichidagi sana o'tgan) | «Tokenlar» da uzaytiring; SDK 1.2.x yoki offline rejimda kalitni ham qayta imzolangan kalitga almashtiring |
LicenseRevoked | Server 403 qaytardi: kalit bekor qilingan, seat chegarasi to'lgan yoki muhit bloklangan | Xabar matnini o'qing; seat bo'lsa SOCIALIFT_INSTANCE_ID ni barqaror qiling |
FeatureNotInPlan | Metod rejangizga kirmaydigan imkoniyatni talab qiladi; feature va plan atributlari bor | Rejani yangilang |
Hammasi LicenseError → SocialiftError dan meros oladi, lekin ApiError emas — platforma xatolari bilan aralashmaydi.
Kabinetda kalitni tekshirish seat egallaydimi?
Yo'q. «Tokenlar» sahifasidagi «Tekshirish va muhitlar» tugmasi (va «Qo'llanma» dagi «Tekshirish») SDK aktivatsiyasini chaqirmaydi, faqat bazadagi holatni o'qiydi. Uni xohlagancha bosish mumkin.
Natijada ko'rinadi: kalit SDK bilan ishlaydimi (ishlamasa — sababi), reja, band seat'lar (masalan 1 / 1), lease muddati soatda, oxirgi aktivatsiya vaqti, ochiq imkoniyatlar va «Muhitlar» jadvali — barmoq izining boshi, SDK va Python versiyasi, birinchi va oxirgi ko'rinish, aktivatsiyalar soni. Barcha seat'lar band bo'lsa, sahifa buni alohida ogohlantiradi.
Kalitni almashtirish yoki bekor qilish
Yangi kalit oling
«Tokenlar» → «Yangi token». Bu alohida token — o'z muddati va seat'i bilan. Bir akkauntda bir vaqtda 5 tagacha faol token bo'lishi mumkin.
Barcha muhitlarda almashtiring
Secret manager yoki muhit o'zgaruvchisidagi
SOCIALIFT_LICENSE_KEYni yangilang;SOCIALIFT_INSTANCE_IDo'zgarmasin.Jarayonlarni qayta ishga tushiring
SDK kalitni jarayon ichida keshlaydi, shuning uchun yangi kalit restartdan keyin ishlatiladi.
Eski yoki sizib chiqqan kalitni bekor qildiring
Kabinetda foydalanuvchi uchun bekor qilish tugmasi yo'q — hello@socialift.uz ga kalitning
key_idsini yozing. Bekor qilish keyingi lease yangilanishida (12 soatgacha) kuchga kiradi va SDKLicenseRevokedbilan to'xtaydi.
Ko'p so'raladigan savollar
Litsenziya kaliti har bir API so'rovida tekshiriladimi?
Yo'q. Litsenziya serveriga ishga tushishda va har lease tugaganda (standart 12 soat) murojaat qilinadi. SDK'ning Instagram, TikTok va boshqa platformalarga so'rovlari Socialift serveri orqali o'tmaydi.
Litsenziya serveri ishlamay qolsa production to'xtaydimi?
Oxirgi muvaffaqiyatli tasdiqdan 7 kun ichida — yo'q: SDK offline grace rejimida ishlaydi va serverni har soatda tekshiradi. Buning uchun tasdiq yozilgan kesh fayli (~/.cache/socialift/license.json) saqlanib qolishi kerak — konteynerlarda uni doimiy volume'ga ulang.
Bitta kalitni nechta serverda ishlatish mumkin?
Kalitdagi seat soni qadar muhitda. Kabinetdan olingan yangi token 1 seat bilan chiqadi; nechtasi band ekanini «Tekshirish va muhitlar» ko'rsatadi. Qo'shimcha seat kerak bo'lsa, Socialift bilan bog'laning.
Litsenziya kaliti bilan Meta App Secret'ning farqi nima?
Litsenziya kaliti — SDK'ni ishlatish huquqi, u faqat Socialift litsenziya serveriga yuboriladi. App Secret — Meta'dagi ilovangiz siri: OAuth almashinuvi, appsecret_proof va webhook imzosi uchun. Ular bir-birining o'rnini bosmaydi va ikkalasi ham faqat serverda saqlanadi.
set_license_key() chaqirdim, lekin boshqa kalit ishlatilyapti. Nega?
Ustuvorlik tartibi: avval license_key= argumenti, keyin SOCIALIFT_LICENSE_KEY, oxirida set_license_key(). Muhit o'zgaruvchisi o'rnatilgan bo'lsa, u set_license_key() dan ustun turadi — uni olib tashlang yoki kalitni argument bilan bering.
Docker'da har deploy'dan keyin «Seat chegarasi» xatosi chiqyapti. Nima qilish kerak?
SOCIALIFT_INSTANCE_ID ni barqaror qiymatga qo'ying (masalan my-app-prod) — shunda keyingi deploy'lar bitta seat'da qoladi. Oldingi deploy'lar egallagan seat'lar o'zi bo'shamaydi: ularni «Tekshirish va muhitlar» da ko'ring va bo'shatish uchun qo'llab-quvvatlashga yozing.