身份驗證和授權
AuthN/AuthZ的可靠路徑是一個真實點,說明您是誰(身份驗證)以及您允許什麼(授權)。在具有多個品牌,區域,集成和高監管要求的平臺中,此輪廓必須是模塊化的,可觀察的和政策驅動的,而不是「按服務劃分的if砂漿」。
1)基本術語和角色
身份識別(ID):身份識別(user, service, provider)。
身份驗證(AuthN):身份證明(密碼,MFA,證書)。
授權(AuthZ):根據策略和上下文做出「可以/不能」的決定。
PDP/PEP:政策決策點(做出決定)/政策執行點(應用)。
IdP:身份提供商(OIDC)。
主題/資源/行動/上下文:誰/對什麼/在什麼條件下做什麼。
2)通用電路架構
[ IdP (OIDC) ]
│ OIDC/OAuth 2. 1 (PKCE, JAR/JARM)
[ Token Service / JWKS / KMS ]
│klyuchi (rotate)
│ JWT/Access/Refresh, mTLS
[API Gateway (PEP)] Solution/Policy ──kesh
│ authN/CSRF/CORS/rate-limit
[ Microservices (PEP)]──PDP (OPA/cedar) ──Policy Store (GitOps)
│audit/metriki
[ Data/Providers ]── service-to-service (mTLS+JWT/Spiffe)
原則:代幣生成和策略的集中化,本地應用;「最低特權」和明確委派。
3)用戶身份驗證(OIDC/OAuth 2)。1)
模式是:- 授權代碼+PKCE(始終用於SPA/Mobile)。
- SSO:支持b2b/語句的外部 IdP(SAML/OIDC)。
- MFA:TOTP/WebAuthn/SMS(由WebAuthn和TOTP推薦;SMS — fallback).
- 基於風險的Step-Up:在敏感活動(取款,更改道具)中需要MFA/pe-Auth。
- Refresh令牌旋轉+帶有重用檢測器的RT註冊表。
- Nonce/State+PKCE,用於瀏覽器流的嚴格CORS/CSRF。
- Short-lived access tokens (5–15 мин) + silent refresh/RT.
- 用於關鍵操作的設備綁定(DPoP/mtls-bound tokens)。
json
{
"iss": "https://auth. example. com",
"sub": "user_9f12",
"aud": ["wallet","catalog"],
"exp": 1730385600,
"iat": 1730384700,
"tenant": "brand_eu",
"region": "EE",
"amr": ["pwd, ""webauthn"] ,//authentication methods
"scp": ["wallet:read","bets:place","kyc:status. read"],
"sid": "sess_a1b2c3", // session id
"acr": "urn: mfa: strong "//warranty level
}
4)服務認證服務(mTLS, SPIFFE, JWT)
服務之間的mTLS+SPIFFE/SPIRE用於可持續工作負載ID。
由HSM/KMS簽署的短期服務JWT(≤5分鐘);簽發審計。
受眾分析:JWT僅適用於特定服務/域。
信任區:來自不同地區/特南特的服務是單獨的PKI和策略。
5)授權模型: RBAC,ABAC,ReBAC
RBAC(角色→分辨率):簡單而透明(適用於管理面板和操作員)。
ABAC(主體/資源/上下文屬性): 靈活地使用"tenant=……AND region=…AND kyc_tier≥2».
ReBAC(關系):對復雜所有權(「擁有品牌/資料夾/活動的人」)有用。
建議:混合體-基本的RBAC+上下文的ABAC條件+點點ReBAC關系。
6)政策及其執行(PDP/PEP)
Gateway和服務中的PEP:提取上下文(JWT,任務,IP/ASN,時間,區域,KYC級別),形成PDP請求。
PDP(例如OPA/cedar)獲得:json
{
"subject": { "sub":"user_9f12", "roles":["support"], "kyc":2, "tenant":"brand_eu" },
"action": "bets. place",
"resource": { "game_id":"g_42", "provider":"pr_x" },
"context": { "region":"EE", "ip_asn":"AS12345", "time":"2025-10-31T12:34:56Z" }
}
並返回「ALLOW/DENY」+解釋。
PEP的決策緩存(TTL 30-120 c)降低了潛伏期;「更改角色/策略」事件障礙。
政策示例(偽雷戈):rego package bets
default allow = false
allow {
input. action == "bets. place"
input. subject. kyc >= 2 input. subject. tenant == input. context. tenant not blocked_region within_limits
}
blocked_region { input. context. region == "NL" }
within_limits { input. context. bet_amount <= data. limits. max_bet[input. subject. tenant] }
7) Scoops和許可證
命名是:- 資源:動作-"wallet:read","wallet:transfer","bets:place","kyc:status。read`.
- 對於管理員,在隔離域中為「admin:」。
- 對於提供商-'provider: report。read`, `provider:events.push`.
最小特權原則:我們只指定必要的漏洞;「升級」(臨時授權)-通過tiket和TTL。
8)多特南特和地區(居住)
令牌包含「tenant」,「region」,「licence」;PDP檢查資源是否匹配。
角色/策略-per tenant名稱空間(「role:brand_eu/support」)。
按地區劃分簽名密鑰和召回列表;跨區域查詢-僅通過受信任的網關。
9)會議和設備管理
Web服務器側會話商店(綁定到設備/瀏覽器,旋轉標識符)。
Idle/Absolute Timeout(同上,30分鐘/24小時);敏感活動-re-Auth/MFA。
上市活動設備,「退出努力」。
異常:來自不同地區的同時輸入,頻繁的MFA失敗-風險信號。
10)委派和同意(同意)
On-behalf-of(OBO):該服務代表用戶運行(具有單個「sub」/「act」的代理令牌)。
同意:合作夥伴訪問數據的顯式屏幕,同意召回日誌。
臨時access-mandates: N小時/天的權利,自動到期。
11)密鑰、簽名和輪換
帶有「kid」的JWKS,自動旋轉,在KMS/HSM中存儲私有密鑰。
算法: JWT的ES256/EdDSA;TLS 1.2+/mTLS.
雙鍵期:在完成客戶更新之前接收兩個「kid」。
RT和Token Introspection召回重大事件。
12)客戶端應用程序安全
SPA: Authorization Code + PKCE, no `implicit`, строгий CORS/Content-Security-Policy.
Mobile: App Attestation/Device Check, RT安全存儲,Rute/Jailbrake防護。
Desktop:用於登錄的系統瀏覽器(no embedded web views), PKCE。
13)方便的SDK合同
Evaluate (AuthZ) API:
http
POST /authz/evaluate
Authorization: Bearer <access_jwt>
Body: { "action":"bets. place", "resource":{"game_id":"g_42"}, "context":{"bet_amount":5. 0} }
→ 200 { "decision":"ALLOW", "ttlMs":60000, "explain":"kyc>=2, limit ok" }
Token Exchange (OBO):
http
POST /oauth/token grant_type=urn:ietf:params:oauth:grant-type:token-exchange subject_token=<user_jwt>&actor_token=<service_jwt>&audience=wallet
14)可觀察性和審計
度量標準:- `authn_success_rate`/`mfa_challenge_rate`/`mfa_fail_rate`
- `authz_p95_ms`, `authz_denied_rate{reason}`
- `invalid_token_rate`, `jwks_skew_ms`, `rt_reuse_detected`
- 輸入異常(新設備,geo-velocity),可疑漏洞。
- `who/what/when/where/why`, `decision`, `policy_version`, `token_kid`, `client_id`.
- 合成導出(調節器/供應商審核)。
15)外圍和客戶保護
Gateway PEP:限量版,bot/signature檢查,CSRF保護,嚴格的CORS,HSTS。
內部流量:mTLS+服務JWT+有限網絡。
Webhooks/外部 collbacks:身體簽名(HMAC/JWS),時間窗口,反倒帶。
16)典型錯誤
長壽訪問令牌→泄漏。
含義OAuth流入SPA。
沒有按鍵旋轉和雙鍵周期。
冗余角色而不是策略(無法審核/解釋決策)。
將特南特/地區混為一體「role」或「key」。
在敏感動作上沒有MFA。
AuthZ解決方案緩存,不因角色更改而致殘。
17)花花公子(runbooks)
1.JWT簽名密鑰的損害
立即恢復「kid」,發布新的JWKS,強迫殘疾RT/會議,向審計報告。
2.大眾的「invalid_token」
檢查時鐘/壽命、JWKS相關性、腰果故障。
3.輸入異常
包括增加風險評分,要求上調,通知用戶,暫時限制付款。
4.IdP失敗
切換到會話緩存/角色設備,限制新的登錄,將當前會話保留到TTL。
18)售前支票清單
[] OIDC/OAuth 2.1與PKCE,短AT,RT輪換,設備綁定的關鍵操作。
- MFA(WebAuthn/TOTP)和步驟,用於推斷/道具更改/角色升級。
- 服務到服務:mTLS+SPIFFE,短期服務JWT。
- 集中式PDP中的AuthZ政策(RBAC+ABAC/ReBAC);門戶和服務上的PEP。
- 殘疾解決方案緩存;audit trail不變。
- multi tenant/regions: 密鑰隔離/策略/log,許可證核算。
- KMS/HSM中的JWKS/密鑰,雙鍵旋轉,監視「kid」。
- CSRF/CORS/HSTS/Rate-limit/Bot過濾器。
- 事件花花公子,run按鈕revoke/rotate/lockdown。
- 測試套件:unit (policies), contract (SDK/flows), chaos (IdP, JWKS), e2e (step-up, OBO, revoke)。
19)迷你配置模板
Scope註冊表(YAML):yaml scopes:
wallet: read: {desc: "Reading balance"}
wallet: transfer: {desc: "Transfer of funds," sensitive: true, step_up: true}
bets: place: {desc: "Bet"}
kyc:status. read: {desc: "KYC status"}
roles:
support:
allow: [wallet:read, kyc:status. read]
finance:
allow: [wallet:read, wallet:transfer]
player:
allow: [bets:place]
PDP策略(區域條件):
yaml deny:
- when: { region: ["NL","BE"] }
actions: ["bets."]
結論
身份驗證和授權輪廓不是庫,而是平臺能力:短壽命令牌和可控密鑰,集中式策略及其本地應用,多因素和步進,嚴格隔離Tenant/Region,審核和遙測。這種設計使更改安全,可以為監管機構解釋,並且對產品透明-通過市場和團隊進行擴展成為例行操作而不是壯舉。