Skip to content

監査イベントカタログ

OP は op/audit.go で閉じたカタログとして定義された、構造化された監査イベントを発火します。ただしカタログは語彙であり、すべての定数が発火するという約束ではありません。本ページでは OP が発火するシグナルと、将来または組み込み側の account/device plane 向けに予約された名前を区別します。各イベントは <area>.<verb>(または <area>.<verb>.<qualifier>)形の安定した文字列です。SOC ダッシュボードは自由形式のメッセージを解析しなくても、area 単位で集計できます。

閉じたカタログ 1 つ、届き先 3 つ
OP の各処理パスは、閉じた 1 つのカタログから監査イベントを発火します。各イベントは文脈を extras に載せ、構造化ログ、SOC パイプライン、Prometheus のカウンタへ届きます。発火元届き先login / MFA要素の判定結果、ステップアップtoken / grant発行、ローテーション、失効DCR / device動的登録、デバイスの承認監査イベントop.Audit* — 閉じた集合文脈は extras に載せて運び、整形済みメッセージには入れないslog の JSONイベント 1 件につき 1 オブジェクトSOC / SIEMイベント名で検索できるPrometheus結果をラベルにしたカウンタ
右の列が成立するのは、カタログが閉じているからです。イベント名の集合が固定されバージョン管理されているため、アラートをイベント名で組めます。呼び出し箇所のフォーマット文字列から組み立てているのではありません。

購読する

go
op.New(
    /* 必須オプション */
    op.WithAuditLogger(slog.New(myJSONHandler)),
)

op.WithAuditLogger*slog.Logger を受け取ります。各イベントは構造化ログのエントリとして記録されます。event 属性はイベント識別子(たとえば "token.issued")を、msg は人間向けの短いメッセージを持ちます。残りの属性は request_id / subject / client_id と、カテゴリ固有のフィールドをまとめた extras グループです。発火は request goroutine 上で同期的に行われます。handler は遅い I/O や無制限 queue で block させず、多数の request から並行して呼ばれても安全にしてください。

WithAuditLogger を渡さない場合は、WithLogger で設定したロガーに流れます。どちらも渡していない場合、監査イベントは破棄されます。

Prometheus にも同時に送る

WithPrometheus を併用すると、これらのイベントの厳選サブセットが Prometheus カウンタにも反映されます。1 回の発火で slog のストリームと該当カウンタの両方が更新されるので、metrics 用の追加発火はありません。

コードからカタログを列挙する

以下のカタログは OP 自身が使うレジストリから起こしたもので、そのレジストリは公開されています。op.AuditEventCatalog() は安定イベント全件のコピーを []op.AuditEventDefinition として返します:

go
for _, def := range op.AuditEventCatalog() {
    // def.Event       — 監査イベント識別子。例: "token.issued"
    // def.MetricName  — 対応する Prometheus カウンタ。監査のみのイベントでは空
    // def.MetricLabel — カテゴリカウンタで使う値域限定のラベル。空のことも多い
}

イベント集合を散文ではなくデータとして扱いたいとき、たとえば SIEM のルールを生成する、ダッシュボードが全イベントを網羅していることをテストで検証する、metrics 投影を持つイベントを洗い出す、といった場面で使います。ライブラリ内の発火箇所と Prometheus ブリッジが同じレジストリを参照しているため、イベントの一覧と metrics のルーティングが食い違うことはありません。

共通の属性

発火したイベントには常に auditevent、レコード時刻があります。次の属性は emitter が設定したときに出力されます:

属性補足
request_idstringリクエスト単位の識別子。未知の場合は出力されません
actor_idstringユーザ起点のイベントでは subject 識別子、クライアント起点では client_id。未知の場合は出力されません
client_idstringOAuth client_id。未知の場合は出力されません
extrasgroupカテゴリ固有のフィールド(各セクションを参照)。空の場合は出力されません
timetimestampslog.Record.TimeWithClock に従い、未設定ならシステム時刻を使います

イベントカタログ

カタログを機能領域ごとに再編成しました。各グループは、SOC や運用にとってこの一群のイベントが何を意味するかを短く述べたあと、event 定数op/audit.go の Go 識別子)、発火タイミングまたは予約理由、想定シビアリティinfo は通常運転、warn は怪しい / 失敗系、alert は replay やストア障害といった即応すべきシグナル、という大まかな目安)、関連ページ の表に落としています。予約 と明記した行は OP が発火しません。予約イベントが存在しないことは、元の操作が起きなかった証拠ではありません。

Provider ライフサイクル

startup.profile は OP instance の監査ストリームの起点です。op.New が設定を検証し、provider を返す前に 1 回だけ発火します。extras は次の 2 群で構成されます。

  • 宣言値profiles / features / grants
  • 解決後のポリシー — PKCE、PAR、nonce、送信者制約、client authentication、token TTL、token format、JAR、JARM、introspection。
event 定数発火タイミング想定シビアリティ関連ページ
AuditStartupProfile検証済み provider の起動時infoOptions 索引

アカウント管理

予約語です。 OP が直接ホストしない仕様外の管理経路(プロビジョニング / リカバリ / フェデレーションリンクなど)を表します。組み込み側は自身の監査 sink から発火できますが、OP 自体は発火しません。

event 定数発火タイミング想定シビアリティ関連ページ
AuditAccountCreated予約 — 組み込み側がユーザアカウントを払い出したinfo
AuditAccountDeleted予約 — 組み込み側がユーザアカウントを削除したinfo
AuditAccountEmailAdded予約 — アカウントに email を追加したinfo
AuditAccountEmailVerified予約 — email の所有を確認したinfo
AuditAccountEmailRemoved予約 — email を削除したinfo
AuditAccountEmailSetPrimary予約 — プライマリ email を変更したinfo
AuditAccountPasskeyRegistered予約 — WebAuthn credential を登録したinfo
AuditAccountPasskeyRemoved予約 — WebAuthn credential を削除したinfo
AuditAccountTOTPEnabled予約 — TOTP 登録を完了したinfo
AuditAccountTOTPDisabled予約 — TOTP を解除したinfo
AuditAccountPasswordChanged予約 — パスワードを変更したinfo
AuditAccountRecoveryRegenerated予約 — recovery batch を再発行したinfo
AuditRecoverySupportEscalation予約 — サポートによる override / 手動 recoverywarn
AuditAccountFederationLinked予約 — 外部 IdP の credential を連携したinfo
AuditAccountFederationUnlinked予約 — 外部 IdP の credential 連携を解除したinfo

ログイン / MFA / step-up

login.*mfa.* は、primary または additional factor が解決したあとに authenticator chain から発火します。login.failed / mfa.failed は通常レベルの探索シグナルで、レートが恒常的に上がるようなら credential stuffing の典型的な兆候です。AuditMFARequiredAuditStepUpRequiredAuditStepUpSuccess予約 であり、OP は発火しません。step-up は resource server が決め、OP には通常の authorize request が届きます。

event 定数発火タイミング想定シビアリティ関連ページ
AuditLoginSuccessプライマリ credential の検証が成功し、subject が確定したinfo使い方: MFA / step-up
AuditLoginFailedプライマリ credential が拒否されたwarn使い方: MFA / step-up
AuditLockoutStalledcross-factor lockout の CAS 競合で失敗試行をカウントせず中断したalert使い方: MFA / step-up
AuditMFARequired予約 — OP は requirement 専用イベントを発火しないinfo使い方: MFA / step-up
AuditMFASuccess第 2 factor が受理されたinfo使い方: MFA / step-up
AuditMFAFailed第 2 factor が拒否されたwarn使い方: MFA / step-up
AuditStepUpRequired予約 — resource server の判断であり、OP は発火しないinfo使い方: MFA / step-up
AuditStepUpSuccess予約 — resource server の結果であり、OP は発火しないinfo使い方: MFA / step-up
extras
  • factorpasswordpasskeytotpemail_otpcaptcharecovery_code、または user-defined Step kind
  • login/MFA イベントは aalacramr_values を自動的には持ちません

同意

AuditConsentGrantedAuditConsentGrantedFirstParty は同意画面とファーストパーティの自動同意経路から発火します。その他の consent 定数は 予約 です。追加 scope の同意も通常の consent.granted として記録され、既存 grant の再利用にはイベントがなく、grant の取り下げには Grant Management の grant_management.revoked を使います。

event 定数発火タイミング想定シビアリティ関連ページ
AuditConsentGrantedユーザが同意画面で同意したinfoガイド: consent
AuditConsentGrantedFirstPartyファーストパーティの自動同意を適用した(同意画面なし)info使い方: ファーストパーティ consent
AuditConsentGrantedDelta予約 — 追加 scope は通常の AuditConsentGranted として発火infoガイド: consent
AuditConsentSkippedExisting予約 — 保存済み同意の再利用は発火しないinfoガイド: consent
AuditConsentRevoked予約 — Grant Management の取り下げは AuditGrantManagementRevoked を発火infoガイド: consent
extras
  • scopes_grantedscopes_requested — 文字列スライス
  • audience — audience 単位 scope の場合

code / token のライフサイクル

認可コード発行パスと token endpoint から発火します。replay 検出系(code.replay_detectedrefresh.replay_detected)とサブストア障害系(token.revoke_failedrefresh.chain_revoke_failedrefresh.grant_revoke_failed)が高シグナルなアラートで、それ以外は通常運転のライフサイクル telemetry です。

event 定数発火タイミング想定シビアリティ関連ページ
AuditCodeIssued認可コードを発行した。対話的経路とサイレント経路を含め、コードごとに 1 回だけ発火しますinfoガイド: 認可コード + PKCE
AuditCodeConsumed/token で code を消費したinfoガイド: 認可コード + PKCE
AuditCodeReplayDetected認可コードが二度提示された — chain を失効させるalertガイド: 認可コード + PKCE
AuditTokenIssuedgrant に対する最初の refresh token を永続化した(すべての access token 発行を数えるイベントではない)infoガイド: tokens
AuditTokenRefreshedリフレッシュトークンをローテーションし、新しいアクセストークンを発行したinfoガイド: リフレッシュトークン
AuditTokenRevoked/revoke または grant cascade で失効させたinfoガイド: tokens
AuditTokenRevokeFailed失効処理がサブストアの障害を観測。RFC 7009 §2.2 により、通信路上の応答は 200 のままalertガイド: tokens
AuditRefreshReplayDetectedリフレッシュトークンがローテーション猶予を超過して提示された — chain を失効させるalertガイド: リフレッシュトークン
AuditRefreshChainRevokeFailedreplay 検出時の連鎖失効でサブストアの障害を観測alertガイド: リフレッシュトークン
AuditRefreshGrantRevokeFailedrefresh-rotation cascade で grant tombstone の書き込みが失敗alertガイド: リフレッシュトークン
AuditRefreshPriorAccessTokenRevokeFailedrefresh rotation で直前の access token を失効できなかった。retry 可否も extras に入るalertガイド: リフレッシュトークン

code_idcompletion_id は認可コード識別子から作る不可逆な fingerprint です。相関用の値であり、生の認可コードや内部識別子ではありません。code.issued は発行したコードごとに 1 回だけ発火します。

extras
  • refresh_origin — refresh chain に記録された型付き origin。authorization_codedevice_codecibacustom_grant のいずれかで、欠落または閉じた集合外は metrics bridge が unknown に投影します。任意の request grant_type label ではなく、実際に chain を発行した grant を表します
  • format — アクセストークンの jwt / opaque
  • offline_access — bool。offline_access chain なら true
  • cnf — sender-bound のとき、dpop_jkt または mtls_x5t#S256
  • surfacetoken.revoke_failed で障害を観測した呼び出し元。/revokejwt_access_token / refresh_chain / opaque_access_token、token endpoint では認可コード再利用に伴う AT カスケードが失敗したときに code_replay_jwt_access_tokens
  • grant_idtoken.revoke_failed(token endpoint)と refresh.grant_revoke_failed で、tombstone 書き込みに失敗した grant
  • reasonrefresh.chain_revoke_failed / refresh.grant_revoke_failed で、サブストアから返ったエラー文字列
  • errtoken.revoke_failed で、サブストアから返ったエラー文字列
  • failure_stageretryablerefresh.prior_access_token_revoke_failed の値

session / logout

下記の session / logout 行は、セッションマネージャ、/end_session、detached Back-Channel Logout coordinator から発火します。AuditLogoutRPInitiated予約 です。/end_session は RP が要求したという marker ではなく、セッションと配送の結果を記録します。

event 定数発火タイミング想定シビアリティ関連ページ
AuditSessionCreated新しいブラウザセッションを発行した(ログイン後)infoガイド: sessions and logout
AuditSessionDestroyedsession を削除した(logout / 期限切れ / 退避)infoガイド: sessions and logout
AuditSessionAlreadyAbsentログアウト対象の session がすでに無い、または期限切れだったinfoガイド: sessions and logout
AuditSessionDestroyFailedsession 削除が store 障害になった。リクエストは静的 503 で状態を保持するalertガイド: sessions and logout
AuditLogoutClientLookupFailedRP 起点ログアウトの解決中に client registry の store lookup が失敗した。通信路上の応答は汎用的なままalertガイド: sessions and logout
AuditLogoutRPInitiated予約 — RP が要求したことだけを示す marker は発火しないinfoガイド: sessions and logout
AuditLogoutTokenRevokeFailedlogout token またはログアウト cascade の失効で store 障害になったalertガイド: sessions and logout
AuditLogoutBackChannelDeliveredBack-Channel logout token を RP に配送したinfo使い方: Back-Channel Logout
AuditLogoutBackChannelFailedBack-Channel 配送に失敗(HTTP エラー / タイムアウト / 検証失敗)warn使い方: Back-Channel Logout
AuditLogoutBackChannelResolveFailedgrant ベースの通知先解決に失敗したalert使い方: Back-Channel Logout
AuditLogoutBackChannelOverflow上限付き通知先解決が overflow したwarn使い方: Back-Channel Logout
AuditBCLNoSessionsForSubjectsession-bearing /end_session notice で grant 由来の RP 対象が 0 件(通知する RP がない)info使い方: Back-Channel Logout
bcl.no_sessions_for_subject の意図

このイベントは Notice.SessionID があり、grant ベースの audience 解決で RP 対象が 0 件になった場合だけ発火します。coordinator が SessionStore を辿った、または session が追い出されたことを意味しません。SessionStore/end_session の snapshot 前に行を失うと、handler は detached fan-out を起動せず、このイベントも発火しません。grant 由来の対象 0 件は通常の no-op でも起きるため INFO レベルとし、SOC ツールは個別イベントではなく発生レートの上昇に対してアラートを張ります。設定された WithSessionDurabilityPosture の値は trigger / snapshot の喪失と対象 0 件を解釈する文脈として含まれます。

防御シグナル

下記では CORS、(loose verifier の opt-in 時の)DPoP、retired key のシグナルを OP が発火します。rate-limit は 組み込み側向け予約語 です。PKCE、redirect mismatch、legacy algorithm の定数も 予約語 であり、OP は拒否を返しますが監査イベントは発火しません。

event 定数発火タイミング想定シビアリティ関連ページ
AuditRateLimitExceededレートリミッタがリクエストを拒否した — 組み込み側が発火 する語彙。本ライブラリは汎用の per-IP / per-endpoint HTTP throttle を実装しませんwarn
AuditRateLimitBypassedbypass トークンを消費した(運用者による上書き) — 組み込み側が発火 する語彙。スコープは AuditRateLimitExceeded と同じwarn
AuditPKCEViolation予約 — PKCE 拒否は通信路上で返し、OP 監査イベントは発火しないalertガイド: 認可コード + PKCE
AuditRedirectURIMismatch予約 — redirect 拒否は通信路上で返し、OP 監査イベントは発火しないwarnガイド: redirect URI
AuditAlgLegacyUsed予約 — 旧 alg の telemetry を発火する OP パスはないwarnガイド: JOSE basics
AuditCORSPreflightAllowedCORS preflight が厳格な許可リストに合致したinfo使い方: SPA 向け CORS
AuditDPoPLooseMethodCaseAdmitted条件付き — loose method-case bridge を設定した verifier のみ発火。標準 op.New は strictinfoガイド: DPoP
AuditKeyRetiredKidPresentedリクエストが JWKS の猶予期間を過ぎた kid を提示 — verifier で拒否warn運用: 鍵ローテーション

interaction

interaction driver が応答を commit する前に render に失敗した場合だけ、render failure signal を発火します。driver が応答を commit 済みなら、OP は応答を置き換えられないため、重複イベントを発火しません。

event 定数発火タイミング想定シビアリティ関連ページ
AuditInteractionRenderFailedinteraction driver の render が応答 commit 前に失敗した。OP は汎用の server_error ページを返すalert使い方: SPA 向け対話のカスタマイズ

introspection

/introspect がクライアント認証を拒否したとき、または opaque access token / refresh token の store lookup が失敗したときに発火します。正常な inactive miss ではエラーイベントを発火しません。NotFound 以外の lookup 障害では、監査イベントで障害を把握しつつ、RFC 7662 の通信路上の応答は HTTP 200 と {"active":false} のままです。クライアント認証失敗は従来の標準エラー応答です。

event 定数発火タイミング想定シビアリティ関連ページ
AuditIntrospectionError/introspect がクライアント資格情報を拒否した、または opaque token store が NotFound 以外の障害を返したwarn / alert運用: 可観測性

クライアント認証

/token/par/device_authorization/bc-authorize がクライアント認証を拒否したときに発火します。通信路上の応答は標準どおりの invalid_client のままに保ちつつ、このイベントから試行された client_id と短い理由コードを取り出せます。/introspectAuditIntrospectionError/revoke はこのイベントを使いません。

event 定数発火タイミング想定シビアリティ関連ページ
AuditClientAuthnFailure/token/par/device_authorization/bc-authorize がクライアントを拒否(誤った secret、期限切れ assertion、alg 不一致、private_key_jwt の不在など)warnガイド: クライアントの種類

DCR

/register および /register/{client_id} から発火します。RAT / IAT 系の失敗イベントは、DCR 配下では probing の典型的なシグナルです。

event 定数発火タイミング想定シビアリティ関連ページ
AuditDCRIATConsumedInitial Access Token を消費したinfo使い方: Dynamic Client Registration
AuditDCRIATExpiredTTL 超過の IAT を提示したwarn使い方: Dynamic Client Registration
AuditDCRIATInvalidIAT の signature / format が不正warn使い方: Dynamic Client Registration
AuditDCROpenRegistrationUsedopen(IAT 不要)登録を受理したinfo使い方: Dynamic Client Registration
AuditDCRClientRegistered新規 client を作成したinfo使い方: Dynamic Client Registration
AuditDCRClientMetadataReadRAT 持ちの GET on /register/{client_id}info使い方: Dynamic Client Registration
AuditDCRClientMetadataUpdatedRAT 持ちの PUT on /register/{client_id}info使い方: Dynamic Client Registration
AuditDCRClientDeletedRAT 持ちの DELETE on /register/{client_id}info使い方: Dynamic Client Registration
AuditDCRRATInvalidRegistration Access Token を拒否したwarn使い方: Dynamic Client Registration
AuditDCRMetadataValidationメタデータペイロードがポリシー違反warn使い方: Dynamic Client Registration
AuditDCRCascadeRefreshRevokeFailedclient 削除時に refresh-token 行の失効に失敗alert使い方: Dynamic Client Registration
AuditDCRCascadeGrantRevokeFailedclient 削除時に grant の失効に失敗alert使い方: Dynamic Client Registration
AuditDCRCascadeAccessTokenRevokeFailedclient 削除時に JWT access-token 行の失効に失敗alert使い方: Dynamic Client Registration
AuditDCRCascadeOpaqueAccessTokenRevokeFailedclient 削除時に opaque access-token 行の失効に失敗alert使い方: Dynamic Client Registration

Device Code (RFC 8628)

/device_authorizationop/devicecodekit の verification ヘルパ、token endpoint の device-code grant から発火します。device_code.verification.user_code_brute_forcedevice_code.token.slow_down は、典型的なポーリング乱用シグナルです。

event 定数発火タイミング想定シビアリティ関連ページ
AuditDeviceAuthorizationIssued/device_authorization が新しい device_code + user_code ペアを返却infoガイド: device code
AuditDeviceAuthorizationRejected/device_authorization がリクエストを拒否(未知 client、scope 拒否など)warnガイド: device code
AuditDeviceAuthorizationUnboundRejectedDPoP / mTLS の証明が必要だが /device_authorization に無かったwarnガイド: 送信者制約付きトークン
AuditDeviceCodeVerificationApproved組み込み側の verification ページがユーザの承認を報告info使い方: device code
AuditDeviceCodeVerificationDenied組み込み側の verification ページがユーザ拒否を報告(またはレコード単位の総当たり対策がロックアウト)warn使い方: device code
AuditDeviceCodeUserCodeBruteForceuser_code 提出が外れた。カウンタを増やし、devicecodekit.MaxUserCodeStrikes(既定 5)でロックアウト発火alert使い方: device code
AuditDeviceCodeTokenIssued承認済 device authorization に対し /token がトークンを発行info使い方: device code
AuditDeviceCodeTokenRejected/token が device-code grant を拒否(access_deniedexpired_token など)warn使い方: device code
AuditDeviceCodeTokenSlowDown/tokenslow_down を返却。サブストア上のレコードで interval が倍化されるwarn使い方: device code
AuditDeviceCodeRevokedop/devicecodekit.Revoke がレコードを拒否状態に遷移させた。Deps.AccessTokens が渡されている場合は、ヘルパが発行済みアクセストークンも連鎖失効させ、revoked_access_tokens を記録するinfo使い方: device code
AuditDeviceCodePollObservationFailedポーリングの LastPolledAt 永続化が失敗。判定自体は続行する(best-effort な観測)warn使い方: device code

CIBA

/bc-authorize と token endpoint の CIBA grant から発火します。ciba.poll_abuse.lockout がクライアントの不正挙動を捕まえる主要シグナルです。authentication-device の approve / deny 定数は 予約 です。組み込み側が CIBARequestStore.Approve / Deny を直接呼ぶため、OP の発火点がありません。

event 定数発火タイミング想定シビアリティ関連ページ
AuditCIBAAuthorizationIssued/bc-authorize が新しい auth_req_id を返却infoガイド: CIBA
AuditCIBAAuthorizationRejected/bc-authorize がリクエストを拒否(未知ユーザ、hint resolver 失敗、scope 拒否)warnガイド: CIBA
AuditCIBAAuthorizationUnboundRejectedDPoP / mTLS の証明が必要だが /bc-authorize に無かったwarnガイド: 送信者制約付きトークン
AuditCIBAAuthDeviceApproved予約 — 組み込み側 callback が直接 Approve を呼ぶため OP は観測しないinfo使い方: CIBA
AuditCIBAAuthDeviceDenied予約 — 組み込み側 callback が直接 Deny を呼ぶため OP は観測しないwarn使い方: CIBA
AuditCIBAPollAbuseLockoutポーリング間隔が交渉済みの interval を大きく下回り続け、リクエストをロックアウトalert使い方: CIBA
AuditCIBATokenIssued承認済 CIBA リクエストに対し /token がトークンを発行info使い方: CIBA
AuditCIBATokenRejected/token が CIBA grant を拒否(access_deniedexpired_tokenauthorization_pendingwarn使い方: CIBA
AuditCIBATokenSlowDown/tokenslow_down を返却。クライアントが交渉 interval より速くポーリングしたwarn使い方: CIBA
AuditCIBAPollObservationFailedポーリングの LastPolledAt 永続化が失敗。判定自体は続行する(best-effort な観測)warn使い方: CIBA

Token Exchange (RFC 8693)

同梱の RegisterTokenExchange ハンドラから発火します。requested は parse と構造検証より前の handler 入口で発火するため、構造上の拒否も含みます。成功時は requested + granted を発火し、後段の拒否時は requested + 失敗系イベント 1 つを発火します。policy_denied / scope_inflation_blocked / audience_blocked が、SOC ダッシュボードで通常追うポリシー判定シグナルです。

event 定数発火タイミング想定シビアリティ関連ページ
AuditTokenExchangeRequested/token が RFC 8693 の試行を exchange handler に dispatch した。parse と構造検証より前infoガイド: token exchange
AuditTokenExchangeGrantedexchange を許可し、新しいアクセストークン(任意で refresh)を発行info使い方: token exchange
AuditTokenExchangePolicyDenied組み込み側の TokenExchangePolicy が拒否(deny)を返却warn使い方: token exchange
AuditTokenExchangePolicyErrorポリシーが拒否(deny)以外のエラーを返却(一過性のインフラ障害など)warn使い方: token exchange
AuditTokenExchangeScopeInflationBlocked要求 scope が subject_token の scope または client 許可リストを超えたwarn使い方: token exchange
AuditTokenExchangeAudienceBlocked要求 audience がポリシーの許可リストの外だったwarn使い方: token exchange
AuditTokenExchangeTTLCapped発行 TTL を(ハンドラの希望、subject_token の残り、グローバル上限)の最小値で切り詰めたinfo使い方: token exchange
AuditTokenExchangeActChainTooDeepネストした act チェーンの深さが上限を超えたwarn使い方: token exchange
AuditTokenExchangeEmptyScopeRejectedscope subset を空集合に解決して拒否warn使い方: token exchange
AuditTokenExchangeActorEqualsSubjectactor_token が subject_token と同じ subject に解決(委譲なし)info使い方: token exchange
AuditTokenExchangeSubjectTokenExternalsubject_token がローカルレジストリで解決できず、外部発行の opaque トークンとして扱ったinfo使い方: token exchange
AuditTokenExchangeActorTokenExternalactor_token がローカルレジストリで解決できず、外部発行の opaque トークンとして扱ったinfo使い方: token exchange
AuditTokenExchangeSubjectTokenInvalidsubject_token の検証に失敗(signature / TTL / cnf 不一致)warn使い方: token exchange
AuditTokenExchangeSubjectTokenRegistryErrorレジストリの参照(lookup)が NotFound 以外の障害を観測。通信路上の応答は invalid_grant のままalert使い方: token exchange
AuditTokenExchangeRefreshIssuedexchange が refresh 発行を明示した(IssueRefreshToken=op.PtrBool(true)info使い方: token exchange
AuditTokenExchangeSelfExchangeexchange の宛先が呼び出し client 自身(受動的なトークン replay シナリオ)warn使い方: token exchange

Custom Grant

dispatcher は登録済みの custom handler に到達したすべての dispatch 試行について、成功と handler を呼ぶ前の gate 失敗を含め、入口で custom_grant.requested を発火します。未登録の grant_type は custom-grant dispatch の入口に到達する前に返るため、custom-grant の監査イベントは発火しません。失敗時は 1 つの失敗出口から custom_grant.failed を 1 回発火します。handler の panic は recover され、panic の情報を extras に含む同じ失敗イベント 1 回になります。

イベント意味レベル参照
AuditCustomGrantRequested (custom_grant.requested)登録済み custom handler に到達したすべての dispatch 試行(handler 前の gate 失敗も含む)info使い方: custom grant
AuditCustomGrantFailed (custom_grant.failed)custom grant の dispatch または handler が失敗した。panic を recover した場合も、試行ごとに 1 回だけ発火しますwarn使い方: custom grant
AuditCustomGrantRefreshDropped (custom_grant.refresh_dropped)ハンドラが IssueRefreshToken でリフレッシュトークン発行を求めたが、クライアントが refresh_token grant に登録されていない。アクセストークン応答自体は成功するinfo使い方: custom grant

Grant management

OAuth 2.0 Grant Management endpoint のイベントです。認証済み revoke request の grant cascade が完了しないときは failure シグナルが発火します。

イベント定数発火タイミングseverity の目安リンク先
AuditGrantManagementRevokedgrant management エンドポイントへの DELETE が grant を失効させ、トークンをカスケードしたinfo使い方: grant management
AuditGrantManagementRevokeFailedDELETE の認証後、grant の失効副作用が失敗したalert使い方: grant management

安定性

監査イベント名は公開 API 表面の一部です:

  • 新しいイベントは、マイナーリリースで追加され得ます。
  • 既存のイベント名は、メジャーリリースで deprecation notice 付きでしか改名されません。

ダッシュボードや SIEM ルールはイベント名で固定し、出現順序や、このページに記載のない extras フィールドの形には依存しないでください。

このリストの裏取り

sh
git clone https://github.com/libraz/go-oidc-provider.git
cd go-oidc-provider
audit_catalog_tmp=$(mktemp ./audit-catalog-XXXXXX.go)
trap 'rm -f "$audit_catalog_tmp"' EXIT
cat >"$audit_catalog_tmp" <<'EOF'
package main

import (
  "fmt"
  "github.com/libraz/go-oidc-provider/op"
)

func main() {
  for _, def := range op.AuditEventCatalog() {
    fmt.Println(def.Event)
  }
}
EOF
go run "$audit_catalog_tmp"

公開 API op.AuditEventCatalog() を呼び出し、このページがミラーしている閉じたカタログを出力します。