10.4. Docker Registry v2 認証
Docker 認証はデフォルトで無効になっています。Docker 認証を有効にするには、機能の有効化と無効化 の章を参照してください。
Docker レジストリー V2 認証 は OIDC と同様に、Docker レジストリーに対してユーザーを認証します。このプロトコルの Red Hat build of Keycloak 実装により、Docker クライアントは Red Hat build of Keycloak 認証サーバーを使用してレジストリーに対して認証を行うことができます。このプロトコルは標準のトークンと署名メカニズムを使用しますが、実際の OIDC 実装とは異なります。要求と応答に非常に特殊な JSON 形式を使用し、リポジトリー名とパーミッションを OAuth スコープメカニズムにマッピングすることで、非常に特殊な JSON 形式を使用します。
10.4.1. Docker 認証フロー
認証フローについては、Docker API のドキュメント で説明されています。以下は、Red Hat build of Keycloak 認証サーバーの観点から見た概要です。
-
docker login
を実行します。 - Docker クライアントは Docker レジストリーからリソースを要求します。リソースが保護されていて、要求に認証トークンがない場合には、Docker レジストリーサーバーは、必要なパーミッションに関する情報と認可サーバーの場所を示す 401 HTTP メッセージを返します。
-
Docker クライアントは、Docker レジストリーから 401 HTTP メッセージに基づいて認証要求を作成します。クライアントは、Red Hat build of Keycloak 認証サーバーへの HTTP Basic 認証 要求の一部として、(
docker login
コマンドからの) ローカルにキャッシュされた認証情報を使用します。 - Red Hat build of Keycloak 認証サーバーは、ユーザーの認証を試行し、OAuth スタイルの Bearer トークンが含まれる JSON ボディーを返します。
- Docker クライアントは JSON 応答から Bearer トークンを受け取り、これを Authorization ヘッダーで使用し、保護されているリソースを要求します。
- Docker レジストリーは、トークンを使用して保護されたリソースに対する新しい要求を、Red Hat build of Keycloak サーバーから受信します。レジストリーはトークンを検証し、要求されたリソースへのアクセスを付与します (該当する場合)。
Red Hat build of Keycloak では、Docker プロトコルで認証に成功した後に、ブラウザーの SSO セッションは作成されません。ブラウザーの SSO セッションでは、トークンを更新したり、Red Hat build of Keycloak サーバーからトークンまたはセッションのステータスを取得したりできないため、Docker プロトコルは使用されません。したがって、ブラウザー SSO セッションは必要ありません。詳細は、一時的なセッション セクションを参照してください。
10.4.2. Red Hat build of Keycloak の Docker Registry v2 認証サーバー URI エンドポイント
Red Hat build of Keycloak には、すべての Docker auth v2 リクエストに対して 1 つのエンドポイントがあります。
http(s)://authserver.host/realms/{realm-name}/protocol/docker-v2