toukenTaképřístupový token, auth token, API token, lexikální token, bearer tokenPokročilý

Definice

Token je krátká jednotka informace, která v daném systému zastupuje oprávnění, identitu, část textu nebo syntaktický prvek. Význam závisí na kontextu: v API bývá nositelem přístupu, v parseru výsledkem lexikální analýzy a v AI jednotkou, podle které model zpracovává text.

Kategorie: KyberbezpečnostAktualizováno

Nezaměňujte: Token má v IT více ustálených významů: autentizační údaj, lexikální jednotku ve zdrojovém kódu, jednotku textu v NLP nebo někdy bezpečnostní zařízení. Nejde o Token bucket, což je algoritmus pro řízení rychlosti požadavků.

Proč se stejnému slovu říká token

Token se používá tam, kde systém pracuje s malým symbolem místo celé původní informace. Původní informace může být uživatelská relace, oprávnění k API, kus zdrojového kódu nebo část věty. Token sám o sobě nemusí mít člověku čitelný význam. Důležité je, že ho jedna část systému umí vydat a jiná část systému umí poznat, co má token v daném kontextu znamenat.

Dobře navržený token má jasný účel, omezenou platnost a předem daný formát. Špatně navržený token se snadno kopíruje, zůstává platný příliš dlouho nebo v sobě nese citlivá data, která se nemají dostat mimo server.

Kde token mění význam

Autentizace a API

Autentizační token je údaj, který klient přikládá k požadavku, aby server poznal relaci nebo oprávnění. Typický příklad je access token v OAuth 2.0 nebo bearer token v HTTP hlavičce Authorization. Slovo bearer je důležité: kdo token drží, může se jím prokázat. Server proto musí počítat s únikem a omezovat dopad krátkou platností, rozsahem oprávnění a možností token zneplatnit.

Lexery a parsery

Lexikální token je výsledek rozdělení zdrojového kódu na menší jednotky. Lexer například odliší klíčové slovo, identifikátor, číslo, operátor a závorku. Parser pak už nečte surový text znak po znaku, ale skládá význam z proudu tokenů. Díky tomu může kompilátor nebo interpret rozpoznat syntaktické chyby přesněji než pouhým hledáním řetězců.

LLM a zpracování textu

Token v jazykových modelech je jednotka, na kterou tokenizer rozbije vstupní text. Token může být celé slovo, část slova, interpunkce nebo znak, podle použitého slovníku. Počet tokenů ovlivňuje cenu, délku kontextu i to, kolik textu se modelu vejde do jednoho požadavku. Tokeny v AI nejsou totéž co slova v běžné češtině.

Životnost a únik přístupového tokenu

Přístupový token je bezpečnostně citlivý, protože často stačí k volání API bez dalšího zadávání hesla. U webových aplikací záleží na tom, jestli je token uložen v paměti, cookie, localStorage nebo na serveru. Každá varianta mění riziko při XSS, CSRF, úniku logů nebo krádeži zařízení.

  • Krátká platnost snižuje škodu, když token unikne.
  • Scope omezuje, co smí držitel tokenu udělat.
  • Refresh token slouží k získání nového access tokenu a musí být chráněn přísněji.
  • Logování nesmí ukládat tokeny v plném znění.

Hranice mezi tokenem, heslem a klíčem

Heslo obvykle zná uživatel a používá ho k přihlášení. Token bývá vydaný systémem po ověření a má omezenější účel. Kryptografický klíč slouží k podpisu, šifrování nebo ověření integrity. V praxi se pojmy někdy překrývají, ale při návrhu systému je nutné rozlišit, kdo údaj vytváří, kdo ho smí číst, jak dlouho platí a jak se ruší po kompromitaci.

Příklady z praxe

  1. Volání API s bearer tokenem

    Mobilní aplikace získá po přihlášení access token a přiloží ho k požadavku na objednávky. API podle tokenu pozná uživatele i povolený rozsah operací. Když token po několika minutách vyprší, aplikace musí získat nový a původní požadavek zopakovat.

    curl https://api.example.test/orders \
      -H "Authorization: Bearer eyJhbGciOi..."
  2. Rozdělení textu na tokeny

    Jednoduchý tokenizer rozdělí větu na slova a interpunkci. Parser nebo další zpracování pak nemusí řešit původní řetězec znak po znaku. Skutečné tokenizery pro programovací jazyky i LLM jsou složitější, protože řeší kontext, Unicode a speciální pravidla.

    import re
    
    text = "Ahoj, světe!"
    tokens = re.findall(r"\w+|[^\w\s]", text)
    print(tokens)  # ['Ahoj', ',', 'světe', '!']

Časté omyly

MýtusToken je bezpečný, protože je to jen náhodný řetězec.
Ve skutečnostiToken může být bezpečný pouze tehdy, když má dostatečnou entropii, omezenou platnost a správné zacházení. Náhodný řetězec uložený v logu nebo poslaný přes nezabezpečený kanál je prakticky kompromitovaný.
MýtusJWT token je šifrovaný, takže do něj můžu dát citlivé údaje.
Ve skutečnostiBěžný JWT je podepsaný, ne automaticky šifrovaný. Obsah lze často snadno dekódovat, takže do něj nepatří tajemství, pokud není použitý vhodný šifrovaný formát a správná správa klíčů.
MýtusToken v AI je prostě jedno slovo.
Ve skutečnostiToken v AI může být slovo, část slova, číslo, interpunkce nebo speciální značka. Tokenizer se řídí svým slovníkem a pravidly, ne běžným jazykovým dělením na slova.

Časté dotazy

Je token totéž co heslo?
Přístupový token může fungovat podobně jako dočasný průkaz, ale heslo nenahrazuje ve všech situacích. Heslo nebo jiný primární faktor slouží k ověření uživatele, zatímco token bývá výsledkem tohoto ověření. Token má mít kratší platnost, omezený rozsah a možnost zneplatnění. Únik tokenu je pořád bezpečnostní incident, protože držitel tokenu může volat chráněné funkce.
Musí být každý token JWT?
JWT je konkrétní formát tokenu, který má hlavičku, tělo s tvrzeními a podpis. Token může být i neprůhledný řetězec, jehož význam zná jen server nebo autorizační služba. JWT se hodí, když příjemce potřebuje ověřit podpis a číst vybraná tvrzení bez dotazu na databázi. Neprůhledný token se naopak snáz zneplatňuje centrálně.
Kam ukládat token ve webové aplikaci?
Token v prohlížeči je bezpečné ukládat jen s ohledem na konkrétní hrozby aplikace. Cookie s atributy HttpOnly, Secure a SameSite snižuje riziko čtení tokenu přes XSS, ale vyžaduje správnou ochranu proti CSRF. localStorage je pro JavaScript snadno dostupné, takže úspěšný XSS útok může token rovnou zkopírovat. Univerzální nejlepší úložiště neexistuje bez znalosti architektury.
Proč se u AI počítají tokeny místo slov?
Tokeny u jazykových modelů určují, jak model vidí vstupní a výstupní text. Česká věta se nemusí rozdělit po slovech, protože tokenizer může z jednoho slova vytvořit více částí. Počet tokenů pak ovlivňuje maximální délku promptu, velikost odpovědi a často i cenu volání API. Krátký text s neobvyklými znaky může spotřebovat víc tokenů, než člověk čeká.

Zdroje

  1. The OAuth 2.0 Authorization Framework(otevře se v novém okně)RFC Editor, 2012
  2. The OAuth 2.0 Authorization Framework: Bearer Token Usage(otevře se v novém okně)RFC Editor, 2012
  3. JSON Web Token (JWT)(otevře se v novém okně)RFC Editor, 2015
  4. Unicode Text Segmentation(otevře se v novém okně)Unicode Consortium

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.