Амнияти API ва нишонаҳо
Хулосаи мухтасар
Амнияти API маҷмӯи аутентификатсия, авторизатсия, ҳифзи криптографӣ, механизмҳои зидди сӯиистифода ва мушоҳида мебошад, ки дархостро дар доираи пешбинишуда як шахси пешбинишударо ба манбаи пешбинишуда иҷро мекунад. Артефакти калидӣ нишонаест (ё имзои дархост), ки ҳуқуқи зангро исбот мекунад. Меъмории хуб ба нишонаҳои кӯтоҳмуддат, миқёси равшан, имтиёзҳои ҳадди ақал, муҳофизати такрорӣ, маҳдудкунии нархҳо ва тартиботи амалиётӣ (ротатсия, аудит, ҳодисаҳо) такя мекунад.
Моделҳои аутентификатсияи API - Кай ва чӣ бояд интихоб кард
Калиди API (сирри статикӣ)
Оддӣ барои ҳамгироии B2B ва сенарияҳои дорои хавфи кам. Контекстро иҷро намекунад, нигоҳдорӣ дар тарафи хидматро талаб мекунад.
Танҳо бо рӯйхати иҷозатдиҳии IP/ASN, квотаҳои собит, TTL кӯтоҳ ва гардишҳо истифода баред.
ОА бут 2. 1/OIDC
Стандарт барои ҳамгироии корбар ва шарик: дастрасии токен (кӯтоҳмуддат) + навсозии токен (гардиш) + миқёс.
Мизоҷони ҷамъиятӣ - бо PKCE; мизоҷони махфӣ - бо мизоҷи махфӣ/m-TLS.
Маълумоти муштарӣ (m2m)
Машина → машина: аломати дастрасӣ ба хидматҳо дар соҳаҳо ва шунавандагони дақиқ муайяншуда, аксар вақт бидуни тароват (дубора гиред).
MTLS (TLS мутақобила)
Шахсиятро ба канал мепайвандад. Беҳтарин барои ҳамгироии хавфи баланд ё пардохт (POP бар TLS).
Мумкин аст бо OA bututh якҷоя карда шавад (нишонаҳо танҳо барои муштариёни MTLS).
Имзоҳоро дархост кунед (HMAC/EDDSA)
Вақте ки ба шумо як PO-и мустақили нақлиётӣ лозим аст: сарлавҳаи имзо, вақт ва nonce. Барои webhooks ва санҷиши офлайнӣ қулай аст.
Форматҳо ва намудҳои токен
JWT (JWS, имзо шудааст)
Худтаъминкунӣ, маҳаллӣ тафтиш карда мешавад; ҳатмии 'iss', 'sub', 'aud', 'exp', 'iat', 'jti', 'доираи'.
Хавф - боз ҳам душвортар ба хотир оред: TTL кӯтоҳ (5-15 дақиқа) + рӯйхати 'jti' -ро дар ҳодисаҳо истифода баред.
JWE (рамзикунонидашудаи JWT)
Лозим аст, агар сарборӣ ҳассос бошад (PII). Арзиш - мураккабии баландтар ва сарборӣ.
Нишонаҳои истинод
Идентификаторҳои ношаффоф, ки тавассути introspection аз ҷониби Authorization Server тафтиш карда мешаванд - ёдраскунӣ/мутамарказкунӣ осонтар аст.
ТҶ/ДП
Пайвастани аломат ба калиди муштарӣ ё ҷаласаи TLS арзиши аломати дуздидашударо коҳиш медиҳад.
Мазмуни токен: ҳадди ақали кофӣ
Маркаҳои тавсияшуда (JWT):- 'iss' (эмитент), 'sub' (мавзӯъ), 'aud' (системаи ҳадаф/манбаъ), 'exp' (истилоҳ), 'iat', 'nbf' (ихтиёрӣ), 'jti'.
- 'доираи '/' иҷозатномаҳо' (ҳадди аққал талаб карда мешавад), 'иҷорагир' (барои иҷорагир), 'дастгоҳ _ мувофиқ '/' amr' (усули аутентификатсия), 'ip '/' asn' (агар ба сиёсат мувофиқ бошад).
- TTL кӯтоҳ барои дастрасӣ (5-15 дақиқа), тароват - 12-48 соат (бо гардиши гардиш).
- Аудитория ('aud') манбаи қатъии мушаххас аст, вагарна аломати "такрорӣ" аст.
- Соҳаҳо - амал ва ашё (масалан, 'пардохтҳо: бозпас гирифтан. хонед ').
- Андоза - ≤ 2-4 КБ барои сарлавҳаҳо ва шахсони боэътимод; дар акси ҳол, мумкин аст мушкилот бо дарвозаҳо вуҷуд дошта бошанд.
Авторизатсия ва сиёсат
RBAC + ABAC: нақш + контекст (ташкил, гео, хатар, ҳолати дастгоҳ).
Тасдиқи PEP/PDP токен ва қарор дар бораи API Gateway/Proxy (Envoy/OPA) пеш аз дархост.
Қоидаҳои декларативӣ: дар Git нигоҳ доред, санҷишҳои сиёсиро дар CI гузаред.
rego package policy. withdraw
default allow = false
allow {
input. token. aud == "wallet-api"
input. token. scope[_] == "payments:withdraw. create"
input. device. compliant == true input. risk. score < 70
}
Дархости имзо (HMAC) ва зидди такрорӣ
Ҳангоми зарурат: webhooks, ҳамгироӣ бидуни OA uth, санҷиши дуҷонибаи амалиётҳои муҳим.
Нақшаи сарлавҳа (мисол):
X-Client-Id: <id>
X-Timestamp: 2025-11-05T13:20:10Z
X-Nonce: 4d1f...a2
X-Signature: base64(HMAC_SHA256(secret, method + "\n" + path + "\n" + sha256(body) + "\n" + timestamp + "\n" + nonce))
Қоидаҳо:
- Рад кардани дархостҳо бо номувофиқатии вақт> ± 300 с.
- Nonce 5-15 дақиқа мағозаро нигоҳ доред ва такрори онро қабул накунед (кэши такрорӣ).
- Ба намуди дархости кононизатсияшуда имзо гузоред (усул, роҳ, дархост, ҳаши бадан).
Ҳифзи шахсият ва муомилот
Idempotency-Key барои амалиёти аз ҳисоб баровардан/пардохт/эҷод кардан: ҳамон калид → ҳамон таъсир.
Мӯҳлати калидӣ вақти ≥ вақти корӣ (одатан 24-72 соат) мебошад.
Мантиқи сервер - Параметрҳои дархостро бо онҳое, ки қаблан барои ин калид содир шуда буданд, муқоиса кунед.
Мизоҷони браузер ва мобилӣ
PKCE ҳатмист (муштариёни давлатӣ).
Навсозии нишона дар браузер - пешгирӣ кардан; агар лозим бошад - ROTATION + ҷавоби такрорӣ (бозсозӣ-муайянкунӣ).
Захира: нигоҳдории сессия> нигаҳдории маҳаллӣ; беҳтар - пуштибонӣ барои frontend (BFF) барои нишонаҳо масъул аст.
Ҳамон сайт, бехатар, Http. Танҳо для куки; CORS - рӯйхати возеҳи иҷозат, сарлавҳаҳо ва усулҳо; caching preflight бехатар аст.
m2m ва ҳамгироии дорои хавфи баланд
MTLS + OAuth2 Маълумоти муштарӣ бо миқёс ва 'aud'.
Рӯйхати иҷозати IP/ASN дар дарвоза.
Имзоҳои POP/DP ё HMAC бар TLS барои амалиёти муҳим.
Квотаҳо ва меъёрҳо барои як созмон/мизоҷ/калид.
Гардиш, ёдраскунӣ ва вокуниш ба ҳодиса
Гардиши калидҳои махфӣ ва имзоӣ (JWKS): ба нақша гирифта шудааст + дар бораи ҳодиса.
Иҷрои калидҳои дугона: ҷуфти калиди навро пешакӣ нашр кунед (kid2), нишонаҳои онро имзо кунед, кӯҳнаи (kid1) -ро барои тасдиқ то он даме, ки TTL тамом нашавад, нигоҳ доред.
Ротатсияи тароват: ҳар мубодилаи тароват → аломати нав, кӯҳна фавран беэътибор мегардад; такрор - сигнали созиш.
Бекоркунӣ: барои JWT - рӯйхати 'jti' ба хотир овардашуда дар муддати кӯтоҳ; барои нишонаҳои истинод - фавран бастани AS.
Скриптҳои шишагин: қарзҳои муваққатии статикӣ бо ҳуқуқҳои ҳадди аққал ва TTL-и сахт, дар журнал сабт кунед.
Маҳдудияти меъёрҳо, муҳофизати бот ва муҳофизати қувваҳои бераҳмона
Маҳдудиятҳои сеқабата: барои як калид/IP/барои як созмон.
Burst + устувор: тирезаи токен-танк/слайд.
Санҷишҳои мураккаб: изи ангуштони дастгоҳ, сигналҳои рафторӣ, аномалияҳои гео/ASN, CAPTCHA танҳо барои UI.
Ҳангоми аз нав дида баромадани имзо/NMAC ва кӯшиши аутентификатсия ноком/сустшавӣ.
Воридшавӣ, ченакҳо ва SLO
Маҷмӯи ҳадди аққали гузоришҳо: 'request _ id', 'client _ id', 'sub', 'aud', 'миқёс', 'қарор', 'сабаб', 'jti', 'ip', 'asn', 'latency', 'quota _ state'.
Нишондиҳандаҳо:- Муваффақияти тасдиқи токен (%), вақти санҷиши p95.
- Басомади инҳирофи такрорӣ, нусхаҳои Idempotency-Key.
- Фоизи дархостҳо бо Po
- 'хатогиҳо/миқёс', мӯҳлати 'exp', бастҳои вақт (NTP).
- Auth/AS ≥ 99 мавҷуд аст. 95 %/моҳ; p95 introspection ≤ 50 мс.
- Нишонаҳои сифр бо TTL <60 s дар prod (метри посбон).
- Камтар аз 0. 1% хатогиҳо дар як рӯз (сифати ҳамгироӣ).
Намунаҳои конфигуратсия
Фиристанда: JWT ва санҷиши шунавандагон
yaml http_filters:
- name: envoy. filters. http. jwt_authn typed_config:
providers:
as:
issuer: https://auth. example. com/
audiences: ["wallet-api"]
remote_jwks:
http_uri:
uri: https://auth. example. com/.well-known/jwks. json cluster: jwks_cluster cache_duration: 600s rules:
- match: { prefix: "/v1/withdraw" }
requires:
provider_and_audiences:
provider_name: as audiences: ["wallet-api"]
NGINX: mTLS k пуштибонӣ
nginx proxy_ssl_server_name on;
proxy_ssl_name wallet. internal;
proxy_ssl_certificate /etc/nginx/mtls/client. crt;
proxy_ssl_certificate_key /etc/nginx/mtls/client. key;
proxy_ssl_trusted_certificate /etc/nginx/mtls/ca. crt;
proxy_ssl_verify on;
proxy_ssl_verify_depth 2;
Намунаи сарлавҳаи имзо (webhooks)
X-Signature: t=1730803210,n=ac12...,s=base64(HMAC_SHA256(secret, "POST\n/webhook\nsha256(body)\n1730803210\nac12..."))
Сервер рад мекунад, агар 't' аз 300 c калонтар бошад, 'n' аллакай вохӯрдааст ё 'зада намешавад.
Ҳифзи маълумот ва махфият
Аломатҳои фарқкунанда (хусусан PII) ва мӯҳлати ҳаётро кам кунед.
Рамзгузории маркаҳои ҳассос (JWEs) барои ҳамгироии тарафи сеюм.
Маска/DLP дар гузоришҳо: ҷасадҳоро бо PAN/PII, нишонаҳо сабт накунед - танҳо "кудак "/парчамҳо, на худи махфӣ.
Хатогиҳои умумӣ
Нишонаҳои дастрасии дарозмуддат ва таровати "абадӣ".
Набудани 'aud '/' миқёс' → нишонаҳо бисёрфунксионалӣ мебошанд.
Имзои webhooks бе 'timestamp '/' nonce'.
Тафтиши JWT танҳо дар барнома, на дар дарвоза (PEP).
Не гардиш ва гардиши дугона.
"CORS" ва усулҳои ноамнро бидуни назорати сарлавҳа иҷозат додааст.
Нигоҳ доштани нишонаҳо дар 'Storage' бе BFF.
Харитаи роҳсозӣ
1. Инвентаризатсия ва таснифи API (ҷамъиятӣ/шарикӣ/дохилӣ, ҳассосият).
2. Интихоби модели Authn: OAuth2/OIDC барои фармоишӣ, MTLS + Client Centials/HMAC барои m2m.
3. Токенҳо: TTL-и кӯтоҳ, 'aud' -и қатъӣ, миқёс, DP oP/P барои амалиёти муҳим.
4. PEP дар дарвозаҳо: Тасдиқи JWT, имзоҳо ва маҳдудиятҳои нарх барои барнома.
5. Анти-такрорӣ ва номутаносибӣ: timestamp/nonce/Idempotency-Key.
6. Ротатсия ва JWKS: калиди дугона, автоматизатсия ва огоҳӣ.
7. Мушоҳида: ченакҳо/SLO, гузоришҳои дастрасӣ, сигналҳои UEBA.
8. Машқҳо: калиди имзо, ихроҷи тароват, изофабори квота.
Хусусияти IGaming/fintech
Пардохтҳо/пардохтҳо: танҳо MTLS + POP/HMAC, миқёси қатъӣ ('бозпас гирифтан. эҷод кардан '), idempotency лозим аст.
Шарикон (провайдерҳои PSP/мундариҷа): калидҳои/шаҳодатномаҳои шарикӣ, рӯйхати иҷозатдиҳии IP/ASN, квотаҳои инфиродӣ ва панели панелҳо.
DSS GDPR/PCI: кам кардани маркаҳо, манъ кардани PII дар нишонаҳои тарафи сеюм, сабти дастрасӣ ба захираҳои ҳассос, баррасии мунтазами дастрасӣ.
Анти-сӯиистифода: маҳдудиятҳои рафторӣ, назорати гео, муҳофизат аз сӯиистифода аз бонус дар сатҳи API.
FAQ
JWT ё аломати истинод?
JWT - иҷро ва мустақилият; истинод - фикру мулоҳизаҳои мутамарказ ва соддагии вокуниш ба ҳодисаҳо. Аксар вақт гибрид: берунӣ - JWT, дохилӣ - истинод.
Оё JWE лозим аст?
Танҳо дар сурате, ки сарборӣ PII/сирри худро дошта бошад. Дар акси ҳол - JWS бо аломатҳои ҳадди аққал.
Оё ман метавонам дар калидҳои API зиндагӣ кунам?
Бале, аммо танҳо бо TTL кӯтоҳ, квотаҳои қатъӣ, IP-иҷозат-рӯйхат ва имзои дархост. Барои корбарон OA juth/OIDC бартарӣ дорад.
DP KDP/POP ҳатмӣ?
На ҳамеша. Аммо барои амалиёти дорои хавфи баланд (пардохтҳо, хулосаҳо) хеле матлуб аст.
Ҷамъ
Амнияти боэътимоди API ба нишонаҳои кӯтоҳмуддат, миқёс ва шунавандагони дақиқ, каналҳои бехатар (TLS/MTLS), имзои дархост ва муҳофизати қатъии зидди такрорӣ, ки бо маҳдудиятҳо ва мушоҳидаҳо такмил дода шудаанд, сохта шудааст. Ротатсияи худкор, гардиши дугона ва назорати сиёсиро дар дарвозаҳо илова кунед - ва API-и шумо ба ихроҷ, такрорӣ ва сӯиистифода тобовар хоҳад буд ва ҳамзамон иҷрои баланд ва идоракуниро нигоҳ медорад.