GH GambleHub

API身份驗證:OAuth2、JWT、HMAC

TL;DR

OAuth2/OIDC+JWT是具有復雜授權(scopes/roles/tenants),SSO和短TTL令牌的客戶端應用程序和服務器集成的標準。
HMAC簽名是webhook和簡單的「server→server」合作夥伴呼叫的最佳選擇,具有確定性驗證和嚴格的重播保護。
增強安全性:mTLS或DPoP (sender-constrained tokens)、短TTL (5-15分鐘)、鑰匙旋轉(JWKS)、帶旋轉/反重置的refresh令牌、嚴格驗證'aud/iss/exp/nbf/kid'和gateway上的策略代碼。

1)解決方案圖: 在哪裏應用

腳本我們推薦
外部客戶端(Web/iOS/Android、SSOOAuth2/OIDC: Authorization Code + PKCE
Server↔server(機器集成)OAuth2 Client Credentials (mTLS/DPoP)
固定路線的合作夥伴呼叫OAuth2或HMAC(如果scopes很簡單)
Webhuki(PSP/反親屬/付款)HMAC簽名+時間軸+冪等
內陸東西向交通mTLS+短JWT(或opaque+introspection)
高度敏感的交易(付款)OAuth2+mTLS/DPoP,如果可能的話(SCA/3DS)

2)OAuth2/OIDC: 線程和客戶

2.1個線程

授權代碼+PKCE (Web/Mobile):保護授權代碼免受攔截。
Client Credentials:沒有用戶的server↔server;scopes-最低要求。
設備代碼:對於沒有瀏覽器的設備。
Refresh Token:僅適用於值得信賴的客戶;瀏覽並啟用reuse檢測。

2.2個客戶端類型

機密(服務器,BFF):存儲秘密;使用mTLS。
Public (SPA/mobile):無法→ PKCE、DPoP、短TTL和有限的範圍存儲秘密。

3) JWT: 結構,時限,驗證

3.1個字段(claims)

強制性的:「iss」,「sub」,「aud」,「exp」,「iat」,「nbf」,「jti」,「scope」/「permissions」,「tenant」(如果是多功能),「kid」。

3.2生命周期

Access token: 5-15分鐘。
Refresh令牌:每天/周,每次交換時輪換;重新提交舊文件時-我們阻止會議。
Clock skew:公差≤ 60秒。

3.3個JWKS和鑰匙

將密鑰存儲在KMS/Vault中,「kid」是必需的。
兩個活動密鑰(滾動),每60-90天或發生事件時超過一次。
Gateway上的JWKS緩存≤ 5分鐘,有自動殘疾。

3.4在網關/服務上進行驗證

檢查:標題,「aud」(允許的服務),「iss」,「exp/nbf」,鎖定列表(revocation)。
無需簽名驗證即可信任身體中的字段;忽略'alg=none'。

查詢標題示例:

Authorization: Bearer <JWT>
X-Trace-Id: <uuid>

4)令牌綁定到客戶端: mTLS, DPoP

mTLS (TLS客戶端證書):只有在有客戶端證書的情況下才能簽發和驗證令牌→令牌在key+證書捆綁包之外是無用的。
DPoP(上市證明的演示):客戶端以一次性密鑰簽署每個請求→以防止公共客戶中的重播和代幣盜竊。
對於關鍵路線(支付突變),需要一種機制。

5)授權: scopes, roles, ABAC

Scopes-最小動作(「payments: write」,「payouts: status: read」)。
Roles是海軍上將的單位;不要直接使用它們而不使用scopes。
ABAC是→ 網關/OPA策略的令牌(「tenant」,「country」,「kyc_level」,「risk_flags」)中的屬性。
路由/字段級別(GraphQL)和域操作級別(REST/gRPC)策略。

6) HMAC簽名: webhooks和合作夥伴

6.1個概念

每個集成都有自己的秘密。

規範字符串上的簽名: 「timestamp +」\n「+method+」\n「+path+」\n「+sha 256(body)」

標題:

X-Signature: v1=base64(hmac_sha256(secret, canonical_string))
X-Timestamp: 2025-11-03T12:34:56Z
X-Event-Id: 01HF...

時間窗口:≤ 300秒;逾期/未來「X-Timestamp」拒絕的請求。
相似性:在TTL (24小時)上存儲「X-Ivent-Id」-丟棄重復內容。

6.2最佳實踐

KMS/Vault中的秘密,每90天輪換一次。
對於公共客戶,HMAC不合適(秘密泄露);使用OAuth2/DPoP。

7)復制保護,brute force和泄漏

用於敏感操作的Nonce/「jti」;使用的標識符黑名單。
Rate/quotas:按鍵/客戶/tenant/路線;「昂貴」的操作是單獨的配額。
針對合作夥伴和網絡手冊的IP/ASN/Geo allow-lists。
內容類型聯盟(「application/json」),體型限制。
在日誌中掩蓋PII;禁止偽造令牌/秘密。

8)錯誤和響應(單一格式)

錯誤結構:
json
{
"error": "invalid_token",
"error_description": "expired",
"trace_id": "4e3f-..."
}
狀態是:
  • 「401」是無/非驗證令牌(WWW-Authenticate)。
  • 「403」-沒有足夠的權限(scope/ABAC)。
  • 「429」-限制/配額。
  • gRPC: `UNAUTHENTICATED`/`PERMISSION_DENIED`/`RESOURCE_EXHAUSTED`.

9)會期和會議的政策

Access ≤ 15分鐘;Refresh-輪換+reuse檢測(提交舊的會議召回)。
HMAC Webhooks:TTL簽名≤ 5分鐘;用指數後端重新交付。
召回會話/密鑰→立即擊中revocation list (gateway緩存≤ 1分鐘)。

10)可觀察性和審計

「trace_id」/「span_id」上的相關性。
度量標準:成功率,「401/403/429」,OIDC/JWKS潛伏率,旋轉頻率,reuse refresh,流量的DPoP/mTLS份額。
審核日誌:"誰,什麼時候,什麼"sub/tenant/scope"導致什麼,密鑰更改,HMAC簽名失敗。

11)嵌入到Gateway API中

JWT驗證(JWKS kesh)和OPA/ABAC在網關上。
可信賴的客戶/合作夥伴的mTLS配置文件。
HMAC對邊緣的webhook進行驗證(直到內部服務)。
Rate/Quota保單,OIDC提供商的電路斷路器(緩存JWK)。
功能閃光燈:快速關閉客戶端/密鑰,更改簽名算法。

12)迷你嗅探

偽: JWT驗證

pseudo jwks = cache. getOrFetch(iss + "/.well-known/jwks. json")
key = jwks[kid]
assert verify_signature(jwt, key)
assert aud in ALLOWED_AUDIENCES and iss in TRUSTED_ISSUERS assert now in [nbf-60s, exp+60s]

偽: HMAC webhook驗證

pseudo canonical = timestamp + "\n" + method + "\n" + path + "\n" + sha256(body)
sig = base64(hmac_sha256(secret, canonical))
assert abs(now - timestamp) <= 300 assert not seen(event_id)
assert timingSafeEqual(sig, header["X-Signature"].split("v1=")[1])
markSeen(event_id, ttl=86400)

scope策略示例(OPA/Rego想法)

rego allow {
input. jwt. scope[_] == "payments:write"
input. jwt. tenant == input. route. tenant
}

13)事件花花公子

私鑰泄漏/JWT簽名:過度釋放密鑰、JWKS更新、立即關閉舊密鑰(「kid 」→ deny)、殘障退貨、強制登錄。
取代webhooks:秘密輪換,IP allow-list,「X-Timestamp」窗口增強,重復傳遞遺漏的事件。
Replay/野蠻:在關鍵路由上啟用DPoP/mTLS,縮小配額,通過IP/ASN臨時塊,啟用「jti」塊列表。
Outage OIDC:緩存令牌(grace)降級,電路斷路器提供商,客戶通知。

14)實施支票

身份驗證(最低):
[] OAuth2: Code+PKCE (Web/Mobile), Client Credentials (server-to-server)
  • TTL:Access ≤ 15分鐘,Refresh輪換和重復檢測
  • JWKS:兩個活動密鑰,「kid」,緩存≤ 5分鐘
  • Webhooks:HMAC v1,「X-Timestamp」,「X-Ivent-Id」,窗口≤ 300秒,等距
  • Sender-constrained: mTLS/DPoP在關鍵路線
  • ABAC/OPA:網關策略中的scopes+tenant/risk
[] Rate/Quota и 429;IP/ASN allow-lists for partners
  • 審核和Alerta (401/403/429,reuse refresh,HMAC簽名)
隱私/寫作:
  • 不要用令牌/保密/卡全身
  • 偽裝PII;DSAR支持;log的保留期受到限制

15)反模式

「alg=none」 或沒有簽名驗證/JWKS的令牌信任。
長壽訪問令牌(小時/天)。
所有合作夥伴共享一個HMAC密碼。
Webhooks沒有Taymstamp/IP。
Refresh令牌無需旋轉或重復檢測。
缺乏「aud」/「iss」驗證和「kid」旋轉。
在沒有KMS/Vault的環境變量中存儲秘密。

16)NFT/SLO(地標)

OIDC/JWKS可用性≥ 99。95%(邊緣緩存減少依賴性)。
JWT驗證網關上的添加劑≤ 2-5 ms p95。
身份驗證錯誤(「401」)≤ 0。占總流量的5%(不包括機器人)。
已簽署的網頁:已成功核實的≥ 99的百分比。9%,平均交貨延遲≤ 3秒。

總結

結合以下機制:用戶和豐富的服務器腳本的OAuth2/OIDC+JWT、網絡手冊/簡單合作夥伴的HMAC和關鍵操作的mTLS/DPoP。保持短的TTL、密鑰輪換(JWKS)、嚴格的ABAC/OPA策略、保護輪廓免受重置和泄漏,並自動執行Gateway API級別的所有操作。因此,身份驗證將變得可預測,可擴展和安全-對UX和貨幣化沒有妥協。

Contact

與我們聯繫

如有任何問題或支援需求,歡迎隨時聯絡我們。我們隨時樂意提供協助!

開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

您的姓名 選填
Email 選填
主旨 選填
訊息內容 選填
Telegram 選填
@
若您填寫 Telegram,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。