10.4. Docker registry v2 身份验证
默认情况下禁用 Docker 身份验证。要启用 docker 身份验证,请参阅 启用和禁用功能 章节。
Docker Registry V2 身份验证 是与 OIDC 类似的协议,它针对 Docker registry 验证用户。红帽构建的 Keycloak 实施允许 Docker 客户端使用红帽构建的 Keycloak 身份验证服务器与 registry 进行身份验证。此协议使用标准令牌和签名机制,但它与真实的 OIDC 实现不同。它通过将非常特定的 JSON 格式用于请求和响应以及将存储库名称和权限映射到 OAuth 范围机制来分类。
10.4.1. Docker 身份验证流
身份验证流程在 Docker API 文档 中进行了描述。以下是红帽构建的 Keycloak 身份验证服务器的视角概述:
-
执行
docker login
。 - Docker 客户端从 Docker registry 请求资源。如果资源受保护,且请求中没有身份验证令牌,Docker registry 服务器会返回 401 HTTP 消息,其中包含有关所需权限和授权服务器位置的一些信息。
-
Docker 客户端根据 Docker registry 中的 401 HTTP 消息构建身份验证请求。客户端使用本地缓存的凭证(来自
docker login
命令),作为红帽构建的 Keycloak 身份验证服务器的一部分。https://datatracker.ietf.org/doc/html/rfc2617 - 红帽构建的 Keycloak 身份验证服务器会尝试验证用户并返回包含 OAuth 样式 Bearer 令牌的 JSON 正文。
- Docker 客户端从 JSON 响应接收 bearer 令牌,并在授权标头中使用它来请求受保护的资源。
- Docker registry 收到带有来自红帽构建的 Keycloak 服务器令牌的新请求。registry 验证令牌,并授予对请求资源(如果适用)的访问权限。
红帽构建的 Keycloak 在通过 Docker 协议成功进行身份验证后不会创建浏览器 SSO 会话。浏览器 SSO 会话不使用 Docker 协议,因为它无法刷新令牌或从红帽构建的 Keycloak 服务器获取令牌或会话的状态;因此不需要浏览器 SSO 会话。如需了解更多详细信息,请参阅 临时会话 部分。
10.4.2. Red Hat build of Keycloak Docker Registry v2 Authentication Server URI Endpoints
红帽构建的 Keycloak 为所有 Docker 身份验证 v2 请求有一个端点。
http(s)://authserver.host/realms/{realm-name}/protocol/docker-v2