OAuth2/OpenID Connect
OAuth2 үстіндегі OIDC - «пайдаланушы/клиент кім» екенін дәлелдеудің және API-ге қысқа мерзімдік қолжетімділікті берудің стандартты тәсілі. Платформаның өзегінде ол орталық қабілетке айналады: клиенттер, операторлар және сервистер үшін бірыңғай кіру; ең аз артықшылықтар; өлшенетін тәуекел; өңірлік және лицензиялық ережелерді сақтау.
1) Мақсаттар мен қағидаттар
«deploy vs enable» бөлімі: кодты бөлек шығарып, жалаушалармен/саясатпен қосамыз.
Қысқа өмір сүретін токендер + қауіпсіз жаңарту: ағу кезінде залалды азайтамыз.
Мульти-тенант/өңір: барлық артефактілер 'tenant/region/licence' деп белгіленеді.
Токендер үстіндегі саясат: шешімдер PDP (RBAC/ABAC), PEP gateway/сервистерде жасайды.
Арналарды қорғау: TLS1. 2 +, мүмкіндігінше mTLS/DPoP, қатаң CORS/CSRF.
Бақылау және аудит: ағын бойынша, клиент бойынша, өңір бойынша көріну.
2) Ағындар және оларды қашан қолдану
Authorization Code + PKCE (SPA/Mobile/Web) - пайдаланушы логиндері үшін дефолт.
Device Authorization (консольдер/TV/CLI) - шолғыш болмағанда.
Client Credentials (machine-to-machine) - пайдаланушысыз сервистік интеграция.
Token Exchange (RFC 8693, OBO) - сервис пайдаланушының атынан әрекет етеді.
CIBA/Back-channel (қалауы бойынша) - редакторсыз пуш-аутентификация.
- PAR (Pushed Authorization Requests) - авторизация параметрлері қорғалған сервер арнасы арқылы беріледі.
- JAR (JWT Secured Authorization) - сұрау параметрлері қол қойылған/шифрланған.
- JARM - ауыстыруға төзімді қорғалған авторизация жауабы (JWT).
- RAR (Rich Authorization Requests) - қол жеткізу құқығына бай сұрау салулар (егжей-тегжейлі рұқсаттар).
3) Токендер мен таңбалар
Түрлері:- ID Token (OIDC) - кім кірді (тек клиентке/майданға көрсету).
- Access Token (AT) - әрекет ету құқығы (қысқа өмір).
- Refresh Token (RT) - АТ жаңартады; тек сенімді ортада сақталады.
- АТ: 5-15 мин (web/mobile), 2-5 мин (service-to-service).
- RT: 7–30 дней (web/mobile) с rotation + reuse detection.
- ID: ≤ 5 мин.
json
{
"iss":"https://auth. core",
"sub":"user_42",
"aud":["wallet","catalog"],
"exp":1730388600,"iat":1730388000,
"tenant":"brand_eu","region":"EE","licence":"EE-A1",
"scp":["wallet:read","bets:place"], // scopes
"sid ": "sess _ abcd, ""amr": [" pwd,"" webauthn"] ,//login methods
"act":{"sub":"svc. catalog" }//if OBO
}
Қол қою: ES256/EdDSA, жария кілттер - JWKS-де 'kid' және ротациясы бар.
4) Сессиялар контуры және logout
Server-side session для web (cookie `SameSite=Lax/Strict`, `HttpOnly`, `Secure`).
Back-Channel Logout + Front-Channel Logout (OIDC) - барлық клиенттердің синхронды аяқталуы.
Step-Up MFA: сезімтал әрекеттерде - қайта тексеру ('acr' жоғарылайды).
Revocation & Introspection: оқиға бойынша RT/AT дереу өшіріледі.
5) Клиенттердің қауіпсіздігі
Web/SPAs: Authorization Code + PKCE, ешқандай implicit; қатаң CORS/Content-Security-Policy.
Mobile: жүйелік браузер (AppAuth), тұтастығын тексеру (App Attestation/DeviceCheck), RT қорғалған сақтау орны.
Desktop/CLI/TV: Device Flow; RT-ті OS құпия қоймаларында сақтаңыз.
АТ құрылғысына/қосылысына байланыстыру үшін DPoP немесе mTLS-bound tokens.
6) Сервис-к-сервисі
mTLS + қысқа Service JWT (aud-scoped), KMS/HSM бар STS береді.
Workload сәйкестігі: SPIFFE/SPIRE.
Саясат "тар": "орнына нақты audience және scopes.
7) Scope-тізілім және келісім (consent)
Атауы: 'ресурс: әрекет' - 'wallet: read', 'wallet: transfer', 'bets: place', 'kyc: status. read`.
Сатып алулардың көрінуі мен сезімталдығын теңшеңіз.
Consent screen RAR/Scopes бағдарламасынан жиналады; келісу тарихын сақтаңыз және кері қайтарып алуға мүмкіндік беріңіз.
json
{
"type":"wallet. transfer",
"actions":["create"],
"locations":["https://api. core/wallet"],
"datatypes":["payment"],
"resources":[{"wallet_id":"w_123","currency":"EUR","amount_max":1000}]
}
8) Авторизациямен интеграция (PDP/PEP)
API Gateway-дегі PEP AT/DPoP/mTLS-ті валидациялайды, контексті байытады (IP/ASN/region/tenant), PDP-ге сұрау салады.
PDP (OPA/cedar) RBAC/ABAC/ReBAC саясатын қолданады және түсіндірме мен TTL-мен 'ALLOW/DENY' қайтарады.
Оқиғалар бойынша мүгедектігі бар PEP (TTL 30-120 с) шешімдерінің кэші (рөлдерді/ережелерді ауыстыру).
9) Мульти-тенант және өңірлер
Барлық токендер мен сессиялар 'tenant/region/licence' деп таңбаланады; PDP ресурсқа сәйкестігін растайды.
Жеке JWKS/кілттер және өңірлер бойынша кері қайтару тізімдері; кросс-өңір - сенімді шлюздер арқылы.
Деректердің резиденттігін шектеу: интроспекция/ревокация шыққан өңірінде орындалады.
10) Хаттамалық күшейтулер
PAR + JAR + JARM - авторизация параметрлері мен жауаптарын қорғайды.
Nonce/State/PKCE - барлық ашық клиенттер үшін.
Pushed Device Authorization (жоғары тәуекел кезінде).
Ең аз таңбалары бар JWT Access Tokens + интроспекция арқылы сыртқы интеграцияға арналған opaque нұсқасы.
FAPI-ұқсас практикалар: қатаң қол қою алгоритмдері, TLS/redirect_uri/PKCE қойылатын талаптар.
11) Қателер және қайтару саясаты
Жауаптарды стандарттаңыз:json
{ "error":"invalid_grant", "error_description":"refresh token reused", "error_code":"RT_REUSE" }
Критичные коды: `invalid_request`, `invalid_client`, `invalid_grant`, `invalid_scope`, `unauthorized_client`, `access_denied`, `temporarily_unavailable`.
Сезімтал эндпоинттерге арналған Rate-limit ('/token ', '/introspect', '/revoke '), экспоненциалды backoff.
12) Бақылау және аудит
Өлшемдері:- `auth_code_success_rate`, `pkce_missing_rate`, `mfa_challenge/fail_rate`,
- `token_issuance_p95_ms`, `jwks_skew_ms`, `invalid_token_rate`, `rt_reuse_detected`,
- по API: `authz_p95_ms`, `deny_rate{reason}`, `dpop_mismatch_rate`, `mtls_fail_rate`.
Логи/трейсы: `client_id`, `grant_type`, `kid`, `acr/amr`, `tenant/region`, `decision`, `policy_version`, `aud`, `scp`, `sid`, `trace_id`.
Аудит (өзгермейтін): токендерді беру, құқықтарды эскалациялау, келісімдерді қайтарып алу, кілттерді ротациялау.
13) Кілттерді басқару және ротация
JWT қолы: KMS/HSM, JWKS жариялауы с 'kid'.
Dual-key кезеңі: IdP жаңасына қол қояды, тексерушілер қайта қосылғанға дейін ескісін + жаңасын қабылдайды.
Тұрақты ротация және шұғыл revoke; kid "тұтыну мониторингі.
14) Плейбуктар (runbooks)
1. Қолтаңба кілті
Дереу revoke 'kid', жаңа, форс-мүгедектігі RT/сессиялар, аудит есебін шығару.
2. Массалық 'invalid _ token '/бойы 401
Сағаттардың рассинхронын, өткен АТ, сынған JWKS-кэшін тексеру; 'clock _ skew' деген толерансты уақытша ұлғайту.
3. RT қайта пайдалану
Сессияны бұғаттау ('sid'), пайдаланушыға хабарлау, жаңа кіру үшін step-up талап ету, тексеру.
4. IdP құлдырауы
«read-only авторизациялау» режимін қосу: қолданыстағы АТ-ны TTL-ге дейін ұстап тұру, жаңа логиндерді шектеу, интроспекция кэшін тегістеу.
5. '/token 'дегенге шабуыл жасау
rate-limit/бот-сүзгілерді күшейту, сезімтал клиенттер үшін mTLS/DPoP қосу, жеке сегментке «салқын» RT шығару.
15) Тестілеу
Contract: OIDC discovery, JWKS, OpenID provider config.
Security: PKCE/nonce/state міндетті; negative-жинақтар ('redirect _ uri', reuse RT ауыстыру).
Interoperability: клиенттер (web/mobile/CLI), әртүрлі уақыт белдеулері/локальдар.
Chaos: PAR/JARM істен шығуы, JWKS кідірісі, rotated 'kid' «ұшуда».
E2E: step-up MFA, OBO (token exchange), logout (front/back-channel), revoke/rotate.
16) Конфигурация мысалдары
OIDC/Authorization Server (YAML фрагменті):yaml issuer: https://auth. core jwks:
rotation_days: 30 alg: ES256 tokens:
access_ttl: 10m refresh_ttl: 14d id_ttl: 5m policies:
require_pkce: true require_par: true require_jarm: true dpop_enabled: true mfa_step_up:
actions: ["wallet:transfer","payout:initiate"]
tenancy:
include_claims: ["tenant","region","licence"]
jwks_per_region: true
Scope тізілімі:
yaml scopes:
wallet: read: {desc: "Reading balance"}
wallet: transfer: {desc: "Transfer of funds," sensitive: true, step_up: true}
bets: place: {desc: "Betting"}
kyc:status. read: {desc: "KYC status"}
roles:
player: { allow: [bets:place] }
support: { allow: [wallet:read, kyc:status. read] }
finance: { allow: [wallet:read, wallet:transfer] }
17) Азық-түлік алдындағы чек-парағы
- PKCE/nonce/state қосылған; PAR/JAR/JARM белсенді.
- AT/RT/ID TTL берілген; RT rotation + reuse detection қосылған.
- Сезімтал клиенттер/операциялар үшін DPoP немесе mTLS-binding.
- JWKS c `kid`; автоматты ротация және кілттерді тұтыну мониторингі.
- Consent/RAR және сатып алулар тізілімі; сезімтал әрекеттерге арналған MFA step-up.
- PDP/PEP интеграцияланған, мүгедектігі бар шешімдердің кэші.
- Токендерде 'tenant/region/licence' бар; residency сақталады.
- Бақылау қабілеті: метрика, логия, трассировка; 'invalid _ token', 'rt _ reuse', 'jwks _ skew'.
- revoke/rotate/lockdown-дағы ойнатқыштар; авариялық логаут түймешігі.
- E2E/chaos/interop тесттер жиынтығы стендтерде өткізілді.
Қорытынды
Платформалық қабілеттілік ретінде OAuth2/OIDC ендіру арқылы сіз болжамды авторизация ағындарын, басқарылатын белгілерді, бірыңғай кіру саясатын және өлшенетін тәуекелді аласыз. Қысқа АТ, RT қорғалған, кілттерді ротациялау, PAR/JARM/DPoP, келісім және step-up - бұл қауіпсіздікті әдепкі ететін, ал эволюцияны командалар мен серіктестерге тез және ауыртпалықсыз ететін тәжірибелер.