配置 OIDC 身份提供商身份验证

如果选择 OpenID Connect (OIDC) 身份验证,用户将通过 OIDC 单点登录 (SSO) 提供商(如 Okta、KeyCloak 或 dex)登录到 Harbor 界面。在这种情况下,您无需在 Harbor 中创建用户帐户。

仅当 Harbor 数据库中没有添加本地用户时,才能将身份验证模式从数据库更改为 OIDC。如果 Harbor 数据库中至少有一个除 admin 之外的用户,则无法更改身份验证模式。

由于用户由 OIDC 提供商管理,因此 OIDC 身份验证模式不支持自助注册、创建用户、删除用户、更改密码和重置密码。

配置您的 OIDC 提供商

您必须配置您的 OIDC 提供商,以便可以将其与 Harbor 一起使用。有关如何执行这些配置的精确信息,请参阅您的 OIDC 提供商的文档。

  • 设置将使用 OIDC 提供商登录到 Harbor 的用户和组。您无需为用户或组分配任何特定的 OIDC 角色,因为这些角色不会映射到 Harbor 角色。
  • OIDC 提供商端点的 URL(在 OAuth 术语中称为授权服务器)必须为其配置文档提供众所周知的 URI。有关配置文档的更多信息,请参阅 OpenID 文档
  • 要使用 OIDC 组管理用户,请创建一个自定义组声明,其中包含您要注册到 Harbor 中的所有用户组。组声明必须映射到用户登录时发送到 Harbor 的 ID 令牌中。您可以启用 OIDC 提供商上的 memberof 功能。使用 memberof 功能,当组实体的 member 属性更新时(例如,通过从 OIDC 组添加或删除 OIDC 用户),OIDC 用户实体的 memberof 属性也会更新。
  • 将 Harbor 注册为 OIDC 提供商的客户端应用程序。将 Harbor 的回调 URI 作为 redirectURI 关联到客户端应用程序。这是 OIDC 提供商向其发送 ID 令牌的地址。

在 Harbor 中配置 OIDC 提供商

在 Harbor 中配置 OIDC 提供商之前,请确保您的提供商已根据前一节正确配置。

  1. 使用具有 Harbor 系统管理员权限的帐户登录到 Harbor 界面。

  2. 管理 下,转到 配置 并选择 身份验证 选项卡。

  3. 使用 身份验证模式 下拉菜单选择 OIDC

    LDAP authentication

  4. 输入有关您的 OIDC 提供商的信息。

    • 主身份验证模式:是否使用 OIDC 模式作为主身份验证模式。

      当显式访问 URL ‘/account/sign-in’ 时,可以覆盖并通过数据库登录

    • OIDC 提供商名称:OIDC 提供商的名称。

    • OIDC 提供商端点:OIDC 提供商的端点的 URL。

    • OIDC 客户端 ID:Harbor 作为客户端应用程序在 OIDC 提供商处注册的客户端 ID。

    • OIDC 客户端密钥:Harbor 客户端应用程序的密钥。

    • OIDC 组过滤器:用于从 组声明名称 列表中选择匹配组的 正则表达式。匹配的组将添加到 Harbor。此过滤器不限制用户登录 Harbor 的能力。

    • 组声明名称:您在 OIDC 提供商中配置的自定义组声明的名称,其中包含要添加到 Harbor 的组。

    • OIDC 管理员组:管理员组的名称,如果用户的 ID 令牌显示他是此组的成员,则该用户将在 Harbor 中拥有管理员权限。注意:您只能设置一个管理员组。另请确保此字段中的值与 ID 令牌中的组项目的值匹配。

    • OIDC Scope:逗号分隔的字符串,列出身份验证期间要使用的 Scope。

      OIDC scope 必须包含 openid,并且通常还包含 profileemail。要获取刷新令牌,它还应包含 offline_access。如果您使用 OIDC 组,则 scope 必须标识组声明。请咨询您的 OIDC 提供商管理员,以获取有关如何识别组声明 scope 的精确详细信息,因为这因供应商而异。

      OIDC settings

  5. 如果 OIDC 提供商使用自签名或不受信任的证书,请取消选中 验证证书

  6. 如果您不希望用户在首次登录期间在 Harbor 中设置用户名,请选中 自动加入。选中此选项后,必须设置属性 用户名声明,Harbor 将从 ID 令牌中读取此声明的值,并将其用作用户加入的用户名。因此,您必须确保您在 用户名声明 中设置的值包含在您设置的 OIDC 提供商返回的 ID 令牌中,否则当 Harbor 尝试让用户加入时会出现系统错误。

  7. 如果您希望在用户从 Harbor 注销后终止用户与 OIDC 提供商的当前会话,请选中 OIDC 会话注销

  8. 验证您在 OIDC 提供商中配置的重定向 URI 与页面底部显示的 URI 相同。

    OIDC_auto_onboarding

  9. 单击 测试 OIDC 服务器 以确保您的配置正确。

  10. 单击 保存 以完成配置。

通过 OIDC 提供商登录到 Harbor

当 Harbor 系统管理员已将 Harbor 配置为通过 OIDC 进行身份验证时,Harbor 登录页面上会出现 使用 ${your_oidc_provider_name} 登录 按钮。

oidc_login

注意: 当 Harbor 配置为通过 OIDC 进行身份验证时,通过本地数据库登录 按钮供本地 Harbor 系统管理员登录使用。

  1. 作为 Harbor 用户,单击 使用 ${your_oidc_provider_name} 登录 按钮。

    这会将您重定向到 OIDC 提供商进行身份验证,在 OIDC 提供商对您进行身份验证后,您将被重定向回 Harbor。

  2. 如果这是您首次使用 OIDC 登录到 Harbor,您将被加入到 Harbor,以便您在 Harbor 的数据库中拥有用户记录,该记录在将您添加到项目、分配角色等时使用。此过程的流程取决于配置

    1. 如果未选中选项 自动加入,将显示一个对话框,用于指定 Harbor 要与您的 OIDC 用户名关联的用户名。
      Specify Harbor username for OIDC
      如果用户名已被占用,系统会提示您选择另一个用户名。
    2. 如果选中选项 自动加入,系统不会提示您设置用户名,而是 Harbor 将尝试通过 用户名声明 中设置的声明从 ID 令牌中提取用户名,并使用此用户名自动让用户加入。

从 Docker 或 Helm CLI 使用 OIDC

在您通过 OIDC 身份验证并首次登录到 Harbor 界面后,您可以使用 Docker 或 Helm CLI 访问 Harbor。

Docker 和 Helm CLI 无法处理 OIDC 的重定向,因此 Harbor 提供了一个 CLI 密钥,用于从 Docker 或 Helm 登录。这仅在 Harbor 使用 OIDC 身份验证时可用。

  1. 使用 OIDC 用户帐户登录到 Harbor。

  2. 单击屏幕顶部的用户名,然后选择 用户个人资料

    Access user profile

  3. 单击剪贴板图标以复制与您的帐户关联的 CLI 密钥。

    Copy CLI secret

  4. 您可以选择单击用户个人资料中的 图标以显示用于自动生成或手动创建新 CLI 密钥的按钮。

    Copy CLI secret

    一个用户只能有一个 CLI 密钥,因此当生成或创建新密钥时,旧密钥将失效。

  5. 如果您生成了新的 CLI 密钥,请单击剪贴板图标以复制它。

您现在可以使用您的 CLI 密钥作为密码,从 Docker 或 Helm CLI 登录到 Harbor。

docker login -u testuser -p cli_secret jt-dev.local.goharbor.io
CLI 密钥与 OIDC ID 令牌关联。Harbor 将尝试刷新令牌,因此 CLI 密钥在 ID 令牌过期后仍然有效。但是,如果 OIDC 提供商不提供刷新令牌或刷新失败,则 CLI 密钥将失效。在这种情况下,请注销并重新通过您的 OIDC 提供商登录到 Harbor,以便 Harbor 可以获取新的 ID 令牌。然后 CLI 密钥将再次工作。