認証と認証
信頼できるAuthN/AuthZループは、あなたが誰であるか(認証)と、あなたが何をすることが許可されているか(認可)についての真実の1つのポイントです。多くのブランド、地域、統合、高い規制要件を備えたプラットフォームでは、この輪郭は「サービスによるif-sの散乱」ではなく、モジュラーであり、監視され、政治家によって管理されるべきです。
1)基本的な用語と役割
識別(ID):識別(ユーザー、サービス、プロバイダー)。
認証(AuthN):身元証明(パスワード、MFA、証明書)。
Authorization (AuthZ) -Policyとコンテキストベースのcan/canを決定できません。
PDP/PEP:ポリシー決定ポイント/ポリシー執行ポイント。
IdP: Identity Provider (OIDC)。
Subject/Resource/Action/Context: who/what/what/what does/under what conditions。
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-フォールバック)。
- リスクベースのステップアップ:機密性の高いアクション(資金の引き出し、詳細の変更)には、MFA/pe-Authが必要です。
- トークン回転+RTレジストリを再利用検出してリフレッシュします。
- Nonce/State+PKCE、ブラウザストリーム用の厳密なCORS/CSRF。
- 短期間のアクセストークン(5-15 M3)+サイレントリフレッシュ/RT。
- 重要な操作のためのデバイスバインディング(DPoP/mtls-boundトークン)。
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。
HSM/KMSによって署名された短い期間(≤ 5分)のサービスJWT;発行の監査。
オーディエンススコープ:JWTは特定のサービス/ドメインにのみ適しています。
トラストゾーン:別の地域/テナントからのサービス-個別のPKIとポリシー。
5)承認モデル: RBAC、 ABAC、 ReBAC
RBAC(ロール→パーミッション):シンプルで透明(管理パネル、オペレータに適しています)。
ABAC (subject/resource/context属性): "テナント=……AND region=……AND kyc_tier≥2"
ReBAC(リレーションシップ):複雑なホールディングス(「ブランド/フォルダ/キャンペーンを所有している人」)に役立ちます。
推奨事項:ハイブリッド-基本的なRBAC+コンテキストABAC条件+ポイントReBAC関係。
6)政策と執行(PDP/PEP)
PEP on the Gateway and in services:コンテキスト(JWT、チケット、IP/ASN、時間、地域、KYCレイヤー)を取得し、PDPへの要求を形成します。
PDP(例:OPA/杉)を受け取ります: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)スコープと解像度
名前を付けること:- リソース:アクション-'wallet: read'、 'wallet: transfer'、 'bets: place'、 'kyc: status。「読む」
- 管理者の場合-スタンドアロンドメインの'admin:'。
- プロバイダの場合-'provider: report。read'、'provider:イベント。「プッシュ」
最小権限の原則:必要なスコープのみを割り当てます。「エスカレーション」(権利の一時的な拡張)-チケットとTTLで。
8)マルチテナントと地域(居住地)
トークンには'tenant'、 'region'、 'licence'が含まれています。PDPはリソースとの対応をチェックします。
役割/ポリシー-テナントごとの名前空間('role: brand_eu/support')。
署名キーと失効リストを地域ごとに分離する。クロスリージョンリクエスト-信頼できるゲートウェイを介してのみ。
9)セッションおよびデバイス管理
Web用のサーバー側セッションストア(デバイス/ブラウザバインディング、識別子回転)。
アイドル/絶対タイムアウト(例:30分/24 h);敏感な行為-re-Auth/MFA。
アクティブデバイスのリスト、「すべてから終了」。
異常:異なる領域からの同時入力、頻繁なMFAディップ-リスク信号。
10)委任及び同意(同意)
(OBO):サービスはユーザーに代わって動作します(別個の'sub'/'act'を持つプロキシトークン)。
同意:パートナーがデータにアクセスするための明示的な画面、リコールによる同意のログ。
一時的なアクセス義務:N時間/日の権利は自動的に期限切れになります。
11)キー、署名および回転
「子供」とJWKS、自動回転、KMS/HSMの秘密鍵のストレージ。
アルゴリズム:JWTのためのES256/EdDSA;TLS 1。2 +/mTLS。
デュアルキー期間:クライアントのアップグレードが完了する前に両方の'kids'を受け入れます。
RTとToken Introspectionは重要なインシデントをリコールします。
12)クライアントアプリケーションセキュリティ
SPA: Authorization Code+PKCE、 no 'implicit'、 Scors/Content-Security-Policy。
モバイル:アプリの証明/デバイスチェック、安全なRTストレージ、ルート/脱獄保護。
デスクトップ:ログイン用のシステムブラウザ(埋め込みWebビューなし)、PKCE。
13)便利なSDK契約
評価(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" }
トークン交換(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'
- 入力の異常(新しいデバイス、ジオベロシティ)、疑わしいスコープ。
- 'who/what/when/where/why'、 'decision'、 'policy_version'、 'token_kid'、 'client_id'。
- コンプライアンス(規制/ベンダー監査)のための輸出。
15)周囲および顧客の保護
ゲートウェイPEP:レート制限、ボット/シグネチャーチェック、CSRF保護、厳格なCORS、 HSTS。
内部トラフィック:mTLS+サービスJWT+限られたネットワーク。
Webhooks/external collbacks:ボディ署名(HMAC/JWS)、時間窓、反再生。
16)典型的なエラー
長寿命のアクセストークン→リーク。
SPAでの暗黙的なOAuthフロー。
キーの回転とデュアルキーの期間がありません。
ポリシーの代わりにハードコアの役割(意思決定を監査/説明することは不可能です)。
1つの'role'または'key'でテナント/リージョンを混在させます。
敏感な行為のステップアップMFA無し。
ロール変更障害のないAuthZソリューションキャッシュ。
17)プレイブック(ランブック)
1.JWT署名キーの妥協
即座に「子供」を取り消し、新しいJWKSの出版、強制的なRT/セッション障害、監査報告書。
2.一括'invalid_token'
クロックのずれ/寿命、JWKSの関連性、キャッシュのクラッシュを確認します。
3.入力異常値
リスクスコアリングの増加、ステップアップの必要性、ユーザーへの通知、支払いの一時的な制限を有効にします。
4.IdPが失敗しました
セッションキャッシュ/ロールデバイスに切り替え、新しいログインを制限し、アクティブなセッションをTTLに保持します。
18)売り上げ前のチェックリスト
- OIDC/OAuth 2。PKCE、短いAT、 RTの回転、重要な操作のための装置結合を用いる1。
- MFA (WebAuthn/TOTP)および詳細/ロールエスカレーションの出力/変更のためのステップアップ。
- サービス・ツー・サービス:mTLS+SPIFFE、短命なサービスJWT。
- 集中PDPのAuthZポリシー(RBAC+ABAC/ReBAC);ゲートウェイとサービスのPEP。
- Disability Solutions Cache;監査証跡を変更できません。
- マルチテナント/リージョン:キー/ポリシー/ログ分離、ライセンス会計。
- KMS/HSMのJWKS/keys、二重キーの回転、監視'子供'。
- 周囲のCSRF/CORS/HSTS/Rate-limit/botフィルタ。
- インシデントプレイブック、取り消し/回転/ロックダウン実行ボタン。
- テストスイート:ユニット(ポリシー)、コントラクト(SDK/フロー)、カオス(IdP、 JWKS)、 e2e(ステップアップ、OBO、取り消し)。
19)ミニコンフィギュレーションテンプレート
スコープレジストリ(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."]
結論
認証と承認ループはライブラリではなく、プラットフォームの能力です。短命のトークンとマネージドキー、集中型ポリシーとローカルアプリケーション、マルチファクタとステップアップ、テナント/リージョンの厳格な分離、監査とテレメトリーです。この設計により、変更は安全で、レギュレータに説明可能で、製品に透明性があります。そして、市場とコマンドによるスケーリングは、偉業ではなく、日常的な操作になります。