使い方
各カードはソースリポジトリの examples/ の実行可能例にマップされています。例は example build tag の背後でビルドされ、go.sum を肥大化させたり go test ./... に巻き込まれたりしません。
(cd examples/01-minimal && go run -tags example .)各ページは、おおよそ同じ判断の流れで読めるようにしています。
- 何を解決するか。 冒頭で option 名だけでなく、その機能が必要になる背景を説明します。
- 使うべき状況。 複雑な機能では、その複雑さを受け入れる価値がある構成を明示します。
- 使わない方がよい状況。 より単純な組み込み経路で足りる場合は、先にそちらへ誘導します。
初めて読む場合は 最小 OP、次に Comprehensive bundle を確認し、自分の構成にその必要が出てきた段階で下の各ページへ進むのがおすすめです。
リファレンスアプリケーション
番号付きの example は 1 つのオプションを 200 〜 500 行で切り出したものです。sample/ はそれとは別で、example が飛ばしている「アカウントが生まれてから使われるまで」の一連の流れを扱います。アプリケーション側が持つサインアップ、Argon2id によるパスワード保管、アプリケーション自身が実装する interaction.Driver を通したログインと同意、アカウント設定画面からの TOTP 登録、そして round-trip を完了する RP までを、op/storeadapter/composite で束ねた MySQL + Redis の上で、docker compose up 一発で動かせます。
docker compose -f sample/compose.yaml up -d --build同意画面は scope 単位の granular consent の実装例になっています。これは同梱の HTML driver が意図的に提供していない部分です。ただしテンプレートではなくデモとして扱ってください。スキーマはあくまで一組み込み側のモデルで、署名鍵と cookie key は起動のたびに再生成され、公開ホスティングを想定した作りにもなっていません。
一覧
各 example フォルダはいずれかのページに対応しています。
Bootstrap / wiring
| 使い方 | 例 | ページ |
|---|---|---|
| 最小 OP | 01-minimal | 最小 OP |
| 典型的な option をまとめた構成 | 02-bundle | Comprehensive bundle |
Profile / flow
| 使い方 | 例 | ページ |
|---|---|---|
| OAuth 2.1 または既存 OIDC の姿勢を宣言 | 00-security-profile | セキュリティプロファイルの宣言 |
| OIDC と並走する純粋 OAuth 2.0 | 04-oauth2-only | OAuth 2.0(openid なし) |
| FAPI 2.0 Baseline (PAR + JAR + DPoP) | 03-fapi2 | FAPI 2.0 Baseline |
| Service-to-service token | 05-client-credentials | client_credentials |
| DPoP server nonce flow | 51-dpop-nonce | DPoP nonce |
UI
| 使い方 | 例 | ページ |
|---|---|---|
| SPA から UI を扱う | 16-custom-interaction、10-react-login、17-spa-composite-store | SPA / 対話画面のカスタマイズ |
| カスタム HTML 同意画面 | 11-custom-consent-ui | カスタム同意 UI |
| カスタム HTML アカウント選択 | 12-custom-chooser-ui | カスタムアカウント選択 UI |
マルチアカウント選択(prompt=select_account) | 13-multi-account | マルチアカウント選択 |
| クロスオリジン SPA (CORS) | 14-cors-spa | SPA 向け CORS |
| ロケール解決 | 15-i18n-locale | i18n / ロケール |
ストレージ
| 使い方 | 例 | ページ |
|---|---|---|
| 実 DB に永続化 | 06-sql-store、07-mysql-store | SQL ストア |
| DynamoDB に永続化 | 18-dynamodb-store | DynamoDB ストア |
| SQL アダプタのテーブル名を差し替える | 25-byo-table-names | SQL ストア § テーブル名を差し替える |
| ストアをゼロから実装する | 26-byo-store-from-scratch | ストアバックエンドを自前実装する |
| Hot / Cold 分離(Redis 揮発) | 08-composite-hot-cold、09-redis-volatile | Hot / Cold 分離 |
スコープ / claim
| 使い方 | 例 | ページ |
|---|---|---|
| Public / Internal スコープ分離 | 60-scopes-public-private | Public / Internal スコープ |
| OIDC §5.5 claims リクエスト | 61-claims-request | Claims リクエスト |
認証
| 使い方 | 例 | ページ |
|---|---|---|
| MFA、captcha、ステップアップ | 20-mfa-totp、21-risk-based-mfa、22-login-captcha、23-step-up | MFA / ステップアップ |
| Email OTP、recovery code、passkey | 28-email-otp-recovery、29-passkey | MFA / ステップアップ |
| 既存ユーザストアの投影 | 24-byo-userstore | 既存ユーザストアの投影 |
Advanced grants
| 使い方 | 例 | ページ |
|---|---|---|
| Custom grant_type URN | 30-custom-grant | Custom Grant |
| Device Code (RFC 8628) | 31-device-code-cli | Device Code |
| CIBA poll mode | 32-ciba-pos | CIBA |
| Token Exchange (RFC 8693) | 33-token-exchange-delegation | Token Exchange |
Crypto / subject
| 使い方 | 例 | ページ |
|---|---|---|
| Pairwise subject(OIDC Core §8.1) | 34-pairwise-saas | Pairwise subject |
| Encrypted id_token(JWE) | 35-encrypted-id-token | JWE 暗号化 |
ガバナンス
| 使い方 | 例 | ページ |
|---|---|---|
| ファーストパーティ同意スキップ | 40-first-party-skip-consent | ファーストパーティ同意スキップ |
| Dynamic Client Registration(RFC 7591) | 41-dynamic-registration | Dynamic Client Registration |
| Back-Channel Logout 1.0 | 42-back-channel-logout | Back-Channel Logout |
運用
| 使い方 | 例 | ページ |
|---|---|---|
| Prometheus メトリクス | 52-prometheus-metrics | Prometheus メトリクス |
| FAPI TLS ポリシーと public JWKS の読み込み | 50-fapi-tls-jwks | FAPI 2.0 Baseline |
番号体系
例フォルダはトピック別にグループ化されています(時系列ではありません)。
| 帯 | トピック |
|---|---|
| 00–09 | bootstrap、core flow、profile、storage adapter |
| 10–19 | UI / browser integration(SPA、consent、chooser、CORS、i18n) |
| 20–29 | MFA、認証ルール、user-store projection |
| 30–39 | advanced grant、subject mode、encrypted token、federation |
| 40–49 | governance: first-party、DCR、back-channel logout |
| 50–59 | operations: FAPI helpers、metrics、tracing、DPoP nonce |
| 60–69 | scope、claim、compliance-adjacent example |
ソースリポジトリの README が一次インベントリです。