GrantForge には Spring Authorization Server ベースの認可サーバーが組み込まれており、OAuth 2.1 のセキュリティ要件に準拠しています。認可コードフロー(PKCE 必須)、リフレッシュトークン、クライアントクレデンシャルのみをサポートし、インプリシットフローとパスワードグラントはサポートしません。

ディスカバリドキュメントとエンドポイント
ディスカバリドキュメント: <GrantForge>/.well-known/openid-configuration。プラットフォーム管理 → 認可サーバー のページでそのままコピーできます。発行者は既定では要求が到達したアドレスであり、リバースプロキシの背後にデプロイする場合は grantforge.oauth.issuer で固定します。
| エンドポイント | 説明 |
|---|---|
/oauth2/authorize |
認可コードフロー。すべてのクライアントは PKCE(S256)を使う必要があります |
/oauth2/token |
認可コード、リフレッシュトークン、クライアントクレデンシャル。リフレッシュトークンは使うたびに入れ替わり、古いトークンが再び現れると認可全体が取り消されます |
/oauth2/revoke |
トークンの取り消し |
/oauth2/jwks |
署名用の公開鍵(RS256) |
/userinfo |
sub、tid、preferred_username。profile スコープには name、email スコープには email が含まれます |
アクセストークンと ID トークンには tid(テナント ID)と preferred_username が含まれます。ID トークンの auth_time は、ユーザーがコンソールにログインした時刻です。
クライアント
プラットフォーム管理 → リソースカタログ でアプリケーションを選択し、「OAuth クライアント」をクリックして、そのアプリケーションのクライアントを管理します。
| 設定 | 規則 |
|---|---|
| 種類 | 公開クライアントはブラウザ、モバイルなどシークレットを保管できないアプリケーション向けです。機密クライアントはサーバー側アプリケーション向けで、シークレットを持ちます |
| コールバックアドレス | 最大 10 個。絶対アドレスである必要があり、ワイルドカードと fragment は許可されません。https か、ローカルの http(localhost、127.0.0.1、[::1])か、ネイティブアプリケーションのカスタムプロトコルである必要があります |
| scope | openid、profile、email、permissions(権限の照会)、catalog(データエンティティの宣言。クライアントクレデンシャルのみ) |
| 認可方式 | 認可コード、リフレッシュトークン(認可コードが必要で、機密クライアントのみが取得)、クライアントクレデンシャル(機密クライアントのみ) |
| トークンの有効期間 | アクセストークン 1 分–24 時間(既定 15 分)、リフレッシュトークン 1 時間–90 日(既定 30 日) |
機密クライアントのシークレットは登録時またはローテーション時に一度だけ表示され、GrantForge はハッシュのみを保存します。ローテーション時に猶予期間(最大 7 日)を設定でき、猶予期間中は古いシークレットと新しいシークレットの両方が有効なため、ローリングアップデートが容易です。
トークンの規則
- トークンはハッシュとして保存します。データベースが漏えいしても、使用可能なトークンは取得できません。
- 次のいずれかが発生すると、既に発行されたトークンはそれ以上更新されません: クライアントが無効化または削除された場合、アカウントが無効化またはロックされた場合、アカウントがパスワードの変更を必要とする場合、テナントが無効化された場合。
- ブラウザからのクロスオリジン呼び出し: GrantForge は、有効なクライアントのコールバックアドレスがあるオリジンが、トークンエンドポイントとオープン API をクロスオリジンで呼び出すことを許可します。Cookie は送信しません。
署名鍵
署名鍵は RSA 2048 で生成し、秘密鍵は暗号化して保存します。既定では 90 日ごとに自動でローテーションされ(grantforge.oauth.signing-key-rotation)、古い公開鍵はさらに 2 日間 JWKS で公開されるため(signing-key-retention)、ローテーション前に発行されたトークンも引き続き検証できます。必要に応じて、認可サーバーのページですぐにローテーションできます。これは機微な操作であるため、二段階認証を有効にしたアカウントでは再度の認証が必要です。
GrantForge でコンソール以外のシステムにログインする
OpenID Connect をサポートするすべてのシステム(Grafana、GitLab、Jenkins など)は、GrantForge を IdP として利用できます。リソースカタログでそのアプリケーションと機密クライアントを作成し、ディスカバリドキュメントのアドレス、client_id、シークレットを相手の OIDC 設定に入力するだけです。逆に、GrantForge も他の IdP でログインでき、詳細は アイデンティティソース を参照してください。
