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
登录
。 - Docker 客户端从 Docker 注册表请求资源。如果资源受保护且没有请求中的身份验证令牌,Docker 注册表服务器会以 401 HTTP 消息响应,其中包含有关所需权限和授权服务器位置的信息。
-
Docker 客户端基于 Docker 注册表中的 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