內核中的OAuth2/OpenID連接
OAuth2頂部的OIDC是證明「用戶/客戶端是誰」並發布對API的短暫訪問的標準方法。在平臺的核心中,它成為中心能力:為客戶,運營商和服務提供單一輸入;最低特權;可衡量的風險;遵守區域和許可證規則。
1)目標和原則
拆分「deploy vs enable」:分別推出代碼,包括旗幟/策略訪問。
短壽命令牌+安全更新:減少泄漏損壞。
多重特南特/地區:所有文物都突出「特南特/地區/許可證」。
令牌之上的策略:解決方案使PDP (RBAC/ABAC)成為網關/服務上的PEP。
渠道保護:TLS1。2+,如果可能的話,mTLS/DPoP,嚴格的CORS/CSRF。
可觀察性和審核:按客戶、區域按流可見性。
2)線程以及何時應用
授權代碼+PKCE(SPA/Mobile/Web)是自定義登錄的默認值。
設備授權(控制臺/TV/CLI)-沒有瀏覽器時。
Client Credentials(機器到機器)-無用戶服務集成。
Token Exchange (RFC 8693, OBO)-該服務代表用戶運行。
CIBA/Back頻道(可選)是無需重新定向的推送身份驗證。
- PAR(推送授權請求)-授權參數通過受保護的服務器通道傳輸。
- JAR (JWT Secured Authorization)-已簽名/加密請求設置。
- JARM是受保護的授權響應(JWT),可抵抗欺騙。
- RAR (Rich Authorization Requests)-豐富的訪問權限請求(詳細權限)。
3)代幣和烙印
類型:- ID Token (OIDC)-誰登錄了(僅顯示客戶端/前端)。
- Access Token (AT)-行動權(短壽命)。
- Refresh Token (RT)-更新AT;僅存儲在受信任的環境中。
- AT:5-15分鐘(web/mobile),2-5分鐘(服務到服務)。
- 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)會議大綱和記錄
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/SPA:授權代碼+PKCE,不實現;嚴格CORS/內容-安全-政策。
移動:系統瀏覽器(AppAuth)、完整性檢查(App Attestation/DeviceCheck)、安全的RT存儲。
Desktop/CLI/TV: Device Flow;將RT存儲在OS密碼存儲中。
DPoP或mTLS-bound tokens將AT綁定到設備/連接。
6)服務與服務
mTLS+短服務JWT(aud-scoped),用KMS/HSM發出STS。
工作負載標識:SPIFFE/SPIRE。
狹義到寬泛的政策: 特定的聽眾和範圍代替。"
7)Scope註冊表和同意(同意)
命名: "資源:動作"-"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)
Gateway API上的PEP驗證AT/DPoP/mTLS,豐富上下文(IP/ASN/region/tenant),並查詢PDP。
PDP(OPA/cedar)應用RBAC/ABAC/ReBAC策略,並返回帶有解釋和TTL的「ALLOW/DENY」。
PEP(TTL 30-120 s)的解決方案緩存因事件而殘疾(角色/規則更改)。
9)多特南特和地區
所有令牌和會話均標有「tenant/region/licence」;PDP驗證資源合規性。
按地區劃分的JWKS/密鑰和召回列表;跨區域-通過可信賴的網關。
數據駐留限制:在原產地區域執行內測/重復。
10)協議增益
PAR+JAR+JARM-保護參數和授權響應。
Nonce/State/PKCE-適用於所有公共客戶。
推送設備授權(高風險)。
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`.
敏感端口('/token','/introspect','/revoke')的速率限制,指數反沖。
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」出版物。
雙鍵期:IdP簽名新,驗證者在切換前接受舊+新。
定期輪換和緊急恢復;「kid」消費監測。
14)花花公子(runbooks)
1.簽名密鑰的損害
立即恢復「kid」,發布新的RT/會話強制殘疾,向審計報告。
2.大眾「invalid_token」/身高 401
檢查AT過期時鐘,JWKS-kesh斷裂;暫時增加tolerance 「clock_skew」。
3.RT重復使用
阻止會話(「sid」),通知用戶,要求重新登錄,調查。
4.IdP的下降
啟用「僅讀取授權」模式:將有效的AT保持為TTL,限制新登錄,滑動內窺鏡緩存。
5.攻擊「/令牌」
強化限量/機器人過濾器,為敏感客戶啟用mTLS/DPoP,將「冷」RT帶入單獨的細分市場。
15)測試
Contract: OIDC discovery, JWKS, OpenID provider config.
安全:PKCE/nonce/state是強制性的;negative集(redirect_uri, reuse RT)。
互操作性:客戶端(web/mobile/CLI),不同的時區/本地。
混亂:PAR/JARM故障,JWKS延遲,rotated 「kid」「即時」。
E2E: step-up MFA, OBO (token exchange), logout (front/back-channel), revoke/rotate.
16)配置示例
OIDC/授權服務器(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檢測。
- 用於敏感客戶/操作的DPoP或mTLS綁定。
[] JWKS c `kid`;自動輪換和密鑰消耗監測。
- Consent/RAR和Scoops註冊表;step-up MFA用於敏感活動。
- PDP/PEP集成,殘障解決方案緩存。
- 令牌包含「tenant/region/licence」;遵守居住。
- 可觀察性:度量,邏輯,跟蹤;「invalid_token」、「rt_reuse」、「jwks_skew」上的alerta。
- revoke/rotate/lockdown上的花花公子;緊急登錄按鈕。
- E2E/chaos/interop測試集在展臺上通過。
結論
通過將OAuth2/OIDC嵌入為平臺能力,您可以獲得可預測的授權流,托管令牌,單一訪問策略和可衡量的風險。短的AT,受保護的RT,按鍵旋轉,PAR/JARM/DPoP,同意和步進是使默認安全成為現實的做法,並且對於團隊和合作夥伴而言,進化是快速而無痛的。