GrantForge

    アプリケーション連携

    OAuth 2.1 と OpenID Connect

    認可サーバーのエンドポイント、クライアントの種類、トークンの規則、署名鍵。

    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 でログインでき、詳細は アイデンティティソース を参照してください。

    GitHub でこのページを編集