JWT: сохтор ва осебҳо
1) JWT чист ва дар куҷо истифода мешавад
JWT як контейнери даъвогарони мустақилона дар формати 'Base64Url (сарлавҳа) мебошад. Base64Url (сарборӣ). Base64Url (имзо) '.
Истифода бурда мешавад барои:- JWS (аломатҳои имзошуда - ҳаққоният/якпорчагӣ),
- JWE (нишонаҳои рамзшуда - махфият),
- OIDC/OAuth2 ҳамчун аломати дастрасӣ/ID ва инчунин аутентификатсияи хидмат ба хидмат.
Тарафдор: мустақилият, қобилият, сарбории паст. Омӯз: хатари санҷиши нодуруст, ҳолатҳои бозхонди мураккаб.
2) Сохтори JWT
2. 1 Сарлавҳа (JSON)
Ҳадди аққал: алгоритм ва муайянкунандаи калидҳо.
json
{ "alg": "ES256", "kid": "jwt-2025-10", "typ": "JWT" }
'alg': алгоритми имзо/рамзгузорӣ (RS256/ES256/PS256/HS256 ва ғайра).
'kid': ишора ба калид (барои гардиши JWKS).
Манбаъҳои калидии ихтиёрӣ: 'jku', 'x5u' (нигаред ба осебпазирӣ § 6. 3).
2. 2 Сарборӣ (JSON)
Маркаҳои стандартӣ:- 'iss' (эмитент), 'aud' (аудитория), 'sub' (мавзӯъ)
- 'exp' (мӯҳлати анҷом), 'nbf' (на пештар), 'iat' (дода шудааст)
- 'jti' (ID токен, бозхонд)
- тамғаҳои домейн: 'миқёс/нақшҳо', 'иҷорагир', 'kyc _ level' ва ғайра.
2. 3 Имзо
JWS = 'аломати (base64url (сарлавҳа) +. "" + base64url (сарборӣ), private_key)'
Санҷиш: калиди оммавии қатъии мувофиқ ва алгоритме, ки сервер интизор аст.
3) Инвариантҳои санҷиши асосӣ
1. Алгоритм бо конфигуратсияи сервери манбаъ (иҷозат-рӯйхат) собит мешавад ва ба мундариҷаи 'header эътимод надорад. алг '.
2. Барои бозии дақиқ 'iss' ва 'aud' -ро санҷед, 'exp/nbf' - бо назардошти 'clock _ skew' (± 30-60s).
3. Аломатҳои бе 'кӯдак' -ро рад кунед, танҳо агар калиди ягона ва гардиш вуҷуд надошта бошад; дар акси ҳол, "кӯдак" -ро талаб кунед.
4. Бе иҷозати сатҳи объект ба ягон марка эътимод накунед (BOLA-аввал).
5. Таҳлил - пас аз санҷиши крипто; андозаи асосӣ пеш аз рамзкушоӣ тафтиш мекунад.
4) JWS против JWE
JWS: имзо, вале хондан. Дар PII/сирри сарборӣ нагузоред.
JWE: сарбориро рамзгузорӣ мекунад; интегратсия мушкилтар аст, модели калидӣ муҳим аст.
Дар аксари API-ҳо, манъи JWS + ба маълумоти ҳассос дар сарборӣ кифоя аст.
5) Давраи ҳаёти токен
Дастрасӣ: кӯтоҳмуддат (5-30 дақиқа).
Тароват: дарозтар (7-30 рӯз), истифодаи гардиш (як маротиба), "рӯйхати сиёҳ" 'jti/sid' -ро нигоҳ доред.
Бекоркунӣ: рӯйхати 'jti' with TTL, introspection барои нишонаҳои ношаффоф, ихтисороти 'ҳодисаҳои exp' for.
Гардиши калидӣ: JWKS бо такрори (кӯҳна + нав), ба мақолаи "Гардиши калидҳо" нигаред.
6) Осебҳои зуд-зуд ва чӣ гуна пӯшидани онҳо
6. 'alg = ҳеҷ '/ивазкунии алгоритм
Сатри поён: Сервер ба майдони 'alg' эътимод дорад ва аломати имзошударо қабул мекунад.
Муҳофизат: рӯйхати алгоритмҳои сахт дар сервер; арзишҳои 'none' ва ғайричашмдоштро рад кунед.
6. 2 RS256 → своп HS256 (симметризатсия)
Сатри поён: ҳамлагар 'alg' with HS256 -ро иваз мекунад ва калиди оммавиро ҳамчун сирри HMAC истифода мебарад.
Муҳофизат: калиди алгоритмро бо конфигуратсия пайваст кунед; провайдерҳои симметрӣ/асимметрӣ дар як 'кудак' омехта накунед.
6. 3 Тазриқи калидӣ ('kid/jku/x5u')
Сенарияҳо:- 'jku' нуқта ба JWKS-и таҳти назорати ҳамлагар (калиди онро лағжонад).
- 'x5u '/' x5c' abuse шаҳодатномаҳои беруна.
- тазриқи роҳи 'kid' with/SQL ('.. "/../privkey. pem "ё" "OR 1 = 1 -" ').
- Нодида гирифтани 'jku/x5u' ё филтр аз тарафи доменҳои қатъии иҷозатдиҳӣ.
- 'kid' should танҳо ҳамчун калид дар феҳристи маҳаллӣ (ҷадвал/кэш), бе пайраҳаҳои файл/ҳамоҳангсозии SQL истифода мешавад.
- Сарбории JWKS аз URL-ҳои боэътимод, TTL-и кӯтоҳ, канали имзо/pinning.
6. 4 Асрори заифи HS256 (қувваи бераҳмона)
Сатри поён: Сирри HMAC кӯтоҳ/ихроҷшуда → ғоратгарӣ мебошад.
Муҳофизат: асимметрияро (RS/ES/PS) ё дарозии махфиро ≥ 256 бит, асрори - танҳо дар KMS истифода баред.
6. 5 Маркаҳои нопурра/беэътибор
No 'aud '/' iss '/' exp' → аломати байнишаҳрӣ ё беохир аст.
Хеле дароз 'exp' → хатари созиш.
Муҳофизат: маҷмӯи пурраи аломатҳоро талаб мекунад, 'exp' кӯтоҳ, 'nbf '/' iat' бо 'clock _ skew' тасдиқ карда мешавад.
6. 6 Такрори ва дуздии нишона
Моҳият: боздошт/такрори аломат (ихроҷ дар гузоришҳо, XSS, MitM бе TLS).
Муҳофизат:- TLS vezde, 'Secure' + 'Танҳо Http' куки, Ҳамон сайт = Lax/Strict.
- DP op/P (ҳатмӣ кардани нишона ба калиди муштарӣ) ва/ё MTLS барои шарикон.
- Кӯтоҳ 'exp', тароват-гардиш, ҳатмии дастгоҳ.
6. 7 Ихроҷи XSS/Анбор
Сатри поён: Нигоҳдории JWT дар 'LocAl Storage '/' session' Storage 'ба JS дастрас аст.
Муҳофизат: нишонаҳои дастрасии мағозаро дар HttPonly-cookie (агар модели куки имконпазир бошад) + намудҳои қатъии CSP/намудҳои боэътимод.
Барои SPA бе кукиҳо - аломати хотираро ҷудо кунед, ҳадди аққал зиндагӣ кунед, аз XSS муҳофизат кунед.
6. 8 CSRF
Сатри поён: ҳангоми ҷаласаҳои куки, дархостҳо аз сайти тарафи сеюм.
Муҳофизат: Нишонҳои якхела, анти-CSRF (пешниҳоди дукарата), чеки 'пайдоиш/Referer', филтрҳои Fetch-Metadata.
6. 9 Сӯиистифода аз ҳад зиёд/андоза
Gist: сарбории калон/сарлавҳаҳо, Do-S оид ба таҳлил.
Муҳофизат: маҳдудиятҳои унвон/андозаи бадан, пеш аз рад кардани 431/413, маҷмӯи мӯҳрҳо.
6. 10 Ивазкунии 'typ '/' cty'
Моҳият: нофаҳмиҳои намудҳо ('typ: "JWT"'), объектҳои ҷойгиршудаи JOSE.
Муҳофизат: 'typ/cty' -ро барои амният нодида гиред, ба алгоритмҳои собит ва схемаи брендинг такя кунед.
7) Нигоҳдорӣ ва интиқоли токен
7. 1 Сервери API (мошин ба мошин)
MTLS/HMAC, беҳтараш асимметрия барои JWT, каналҳо тавассути фикрию.
Дӯкони калидӣ - KMS/HSM, гардиши нақшавӣ, такрори JWKS.
7. 2 Мизоҷони браузер
HTTP Танҳо Cookie dlya дастрасӣ/тароват; TTL кӯтоҳ; навсозӣ - тавассути "таровати хомӯшӣ" бо 'Same' Site = None 'only зери HTTPS.
CSP-и қатъӣ, намудҳои боэътимод, аз XSS муҳофизат кунед; барои SPA - агар имкон бошад, нишонаро дар диск нигоҳ надоред.
8) JWKS, гардиш ва ба хотир овардан
JWKS аз ҷониби муаллифон нашр карда мешавад; истеъмолкунандагон 5-15 дақиқа кэш мекунанд.
Нақшаи гардиш: илова кардани 'кудак' -и нав → ба имзо расондани онҳо → пас аз N рӯз кӯҳнаро аз JWKS → тоза кунед.
Фикру мулоҳизаҳо: рӯйхати 'jti/sid' бо TTL; дар сурати рух додани ҳодиса, муваққатан коҳиш додани 'exp' ва вуруд ба маҷбурӣ (бозсозии ғайрифаъол).
9) Кам кардани шумораи иҷорагир ва кам кардани маълумот
'Иҷорагир '/' org' -ро танҳо дар ҳолати зарурӣ аз рӯи меъморӣ дохил кунед; дар акси ҳол, сифатҳоро аз ҲХДТ аз ҷониби 'sub' кашед.
Не PII-ҳо; маҷмӯи ҳадди аққали маркаҳо → хатари ихроҷ ва таносуб камтар аст.
10) Рӯйхати санҷиши амалии санҷиш (сервери манбаъ)
- Парсим танҳо пас аз санҷиши имзо ва маҳдудиятҳои андозаи асосӣ.
- 'alg' аз конфигуратсия; рад кардани шахсони ғайричашмдошт.
- 'iss' ∧ 'aud' -ро санҷед ∧ 'exp' ∧ 'nbf' ∧ 'iat' (бо 'clock _ skew').
- Санҷиши 'kid' дар феҳристи маҳаллӣ/JWKS (TTL кӯтоҳ).
- Нишондиҳандаҳои берунаро филтр/муқаррар кунед ('jku/x5u' - танҳо иҷозат-рӯйхат).
- Маҳдудияти дарозӣ/таркиб (схема).
- Истифодаи иҷозати захираҳои объект (BOLA-аввал).
- Log 'kids', 'sub', 'aud', 'iss', 'jti', 'exp', 'иҷорагир', 'trace _ id' (бе PII).
- Нишондиҳандаҳои хатогиҳои имзо, таъхирҳо, аудити гардиш.
11) Намунаҳои сиёсати бехатар (псевдо)
11. 1 Танзими интизориҳои алгоритм
yaml jwt:
expected_issuer: "https://auth. example. com"
expected_audience: ["wallet-service"]
allowed_algs: ["ES256"] # fix the jwks_url: "https ://auth. example. com/.well-known/jwks. json"
jwks_cache_ttl: 600s clock_skew: 60s required_claims: ["iss","aud","sub","exp","iat"]
11. 2 Партофтани дурдасти 'jku/x5u'
yaml reject_untrusted_key_sources: true allowed_jku_hosts: ["auth. example. com"] # if absolutely necessary
11. 3 Рӯйхати фикру мулоҳизаҳо (Redis)
pseudo if redis. exists("revoke:jti:" + jti) then deny()
if now() > exp then deny()
12) Мушоҳида ва беморӣ
Метрикӣ: 'jwt _ verify _ fail _ total {сабаб}', 'jwt _ expired _ total', 'jwks _ refresh _ total', dolya 'кӯдак'.
Гузоришҳо (сохташуда): 'iss/aud/sub/kid/jti/exp/иҷорагир/trace _ id', сабаби нокомӣ.
Панели панелҳо: "ба қарибӣ ба охир мерасад", афзоиши хатогиҳои тасдиқкунӣ, тақсимот аз ҷониби минтақа/муштарӣ.
Огоҳиҳо: афзоиши 'verify _ fail' (имзо/алгоритм), хатогиҳои JWKS, ҳиссаи нишонаҳои мӯҳлати истифодашуда.
13) Антипаттернҳо
Trust 'alg' аз токен; дастгирии 'none'.
Нишонаҳои дастрасии дарозмуддат ва гардиши тароватбахш нестанд.
HS256 бо сирри кӯтоҳ/махфӣ дар ENV бе KMS.
Қабул кардани 'jku/x5u' аз ягон домен; ба таври динамикӣ JWKS-ро бидуни рӯйхати иҷозат бор кунед.
PII/сирри худро ба JWS бор кунед.
Ҳангоми мавҷудияти хавфҳои XSS нишонаҳо дар 'Storage' нигоҳ дошта мешаванд.
Бартараф кардани хатогиҳои тасдиқкунӣ (баргардонидани 200 с "хатои нарм").
Не BOLA тафтиш мекунад ва танҳо ба 'миқёс/нақш' такя мекунад.
14) Хусусиятҳои IGaming/Finance
Брендҳо: 'kyc _ level', 'risk _ tier', 'иҷорагир', қатъии 'aud'.
TTL-и кӯтоҳ барои амалиётҳои хаттӣ (амонатҳо/баромадҳо), POP/DP-и KPP ё MTLS барои хатсайрҳои муҳим.
Аудити танзимкунанда: гузоришҳои ивазнашавандаи воридот/нокомӣ, нигоҳдории гузоришҳо дар ҳудуди минтақа.
Шарикон/PSP калидҳои алоҳида/' aud ', калидҳои иҷорагир ва JWKS-и алоҳида доранд.
15) Рӯйхати санҷиши омодагии Prod
- Рӯйхати сахт барои алгоритмҳо; 'none' иҷозат дода намешавад.
- 'iss/aud/exp/nbf/iat/jti' тафтиш карда мешавад; кӯтоҳ 'exp'.
- такрори JWKS, кэши кӯтоҳи TTL; мониторинги саҳмияҳои 'кӯдакон'.
- Бозсозӣ - истифодаи гардиш; 'jti/sid' lists бо TTL; баррасии китоби бозӣ.
- Po
- Танҳо кукиҳо барои браузер, CSP/Намудҳои боэътимод ва XSS; Муҳофизати CSRF.
- PII дар сарборӣ нест; маҷмӯи ҳадди ақали тамғаҳо.
- Нишондиҳандаҳо/гузоришҳои санҷиш ва нокомӣ; ҳушдор медиҳад JWKS/verify_fail.
- Санҷишҳои сенарияи манфӣ: RS → мубодилаи HS, 'кӯдакон' -биноҳо, ғоратгарӣ 'jku', азимҷусса, соатсозӣ.
16) TL; ДР
Алгоритм ва калидҳоро дар тарафи сервер ислоҳ кунед, ба 'alg' аз нишона эътимод накунед, талаб кунед 'iss/aud/exp/nbf/iat/jti'. Калидҳои гардишро тавассути такрори JWKS иваз кунед, нишонаҳои кӯтоҳмуддат ва тароватбахшро дар як вақт нигоҳ доред. Нишонаҳоро боэътимод нигоҳ доред (HttPonly-cookie барои веб), маркаҳоро кам кунед, PII-ро гузоред. Векторҳои 'jku/x5u/kid' -ро пӯшед, бо асрори заиф аз HS256 канорагирӣ кунед, дар роҳҳои интиқодӣ POP/DP PP ё MTLS илова кунед ва ҳамеша BOLA-ро дар сатҳи захираҳо тафтиш кунед.