Junior
JWT (JSON Web Token) რა არის?
sobes.tech AI
პასუხი AI-სგან
JSON Web Token (JWT) — бу компактлы, URL-гә куркынычсыз мәгълүматларны тапшыру ысулы JSON форматында.
Эшләү принциплары:
-
Токен өч өлештән тора, нокталар белән аерылган (
.):header.payload.signature. -
Header (Башлык): Токен турында мета-мәгълүматларны үз эченә ала, мәсәлән, токен төре (JWT) һәм кулланылган имзалау алгоритмы (мәсәлән, HS256, RS256).
{ "alg": "HS256", "typ": "JWT" } -
Payload (Йөк): "claims" — белдерүләр яки мәгълүматлар, без аларны тапшырырга телибез. Төрләре төрле:
- Registered claims: теркәлгән, ләкин опциональ claims, мәсәлән,
iss(чыгаручы),exp(ваҡыт чикләү),sub(тема). - Public claims: җәмәгать куллану өчен билгеләнгән, IANA JSON Web Token Registry-да теркәлергә тиеш яки URI булырга тиеш, ул исемлекне саклый.
- Private claims: ирекле белдерүләр, яклар арасында килешенгән.
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } - Registered claims: теркәлгән, ләкин опциональ claims, мәсәлән,
-
Signature (Имза): кодланган башлык һәм йөкнең берләштерелүе белән, серле ачкыч һәм башлыкта күрсәтелгән алгоритм кулланылып, төзелә. Бу токенның бөтенлеген тәэмин итә — әгәр кемдер башлыкны яки йөкне үзгәртсә, имза гамәлдән чыгарыла.
# HS256 кулланып имза төзү мисалы import hmac, hashlib header_str = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' # Base64Url(Башлык) payload_str = 'eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' # Base64Url(Йөк) secret = 'your_secret_key' # Имза = HMACSHA256(Base64Url(Башлык) + "." + Base64Url(Йөк), сер signature = hmac.new( secret.encode('utf-8'), (header_str + '.' + payload_str).encode('utf-8'), hashlib.sha256 ).digest() # Имзаны Base64Url-га кодлау import base64 signature_b64url = base64.urlsafe_b64encode(signature).rstrip(b'=').decode('ascii') # Нәтиҗәдәге токен: header_str + '.' + payload_str + '.' + signature_b64url
Кулланылышы:
- Аутентификация: Сервер кулланучыга уңышлы аутентификациядән соң токен бирә. Кулланучы һәр соравында бу токенны җибәрә. Сервер токенның дөрөслеген тикшерә һәм ресурсларга керүне рөхсәт итә.
- Мәгълүмат алмашу: Куркынычсыз рәвештә кечкенә күләмдә мәгълүматларны тапшыру.
Өстенлекләре:
- Компактлык: XML белән чагыштырганда, азрак мәгълүмат тапшыру.
- Үз-үзен тулыландыру: Токенда инде кирәкле мәгълүматлар бар, бу һәр соравда мәгълүмат базасына мөрәҗәгать итүне киметә.
- Stateless: Сервер сессия мәгълүматларын сакламый.
- Криптографик имза: Мәгълүматның бөтенлеген тәэмин итә.
Кимчелекләре:
- Токенны кире кайтару мөмкин түгел: Бирелгәннән соң, токен аның вакыты чыкканчы эшли, әгәр кара исемлекләр механизмы булмаса.
- Серле ачкычны саклау: Ачкычны куркынычсыз сакларга кирәк.
- Размер:
payloadэчендәге мәгълүмат күләме арткан саен, токенның размеры арта.