第 12 章 使用机器人帐户进行无密钥身份验证


在以前的 Red Hat Quay 版本中,机器人帐户令牌在令牌生命周期内有效,除非删除或重新生成。对于不想存储长期密码或管理删除、重新生成或新的身份验证令牌的用户,没有过期的令牌。

使用 Red Hat Quay 3.13 时,Red Hat Quay 管理员提供了与 Red Hat Single Sign-On (基于 Keycloak 项目)或 Microsoft Entra ID 交换外部 OIDC 令牌的功能。这允许机器人帐户利用上一小时的令牌,这些令牌定期刷新,并可用于验证单个事务。

此功能通过降低机器人令牌在一小时后删除令牌暴露的可能性,从而大大增强了 Red Hat Quay registry 的安全性。

使用机器人帐户配置无密钥身份验证是一个多步骤流程,需要设置机器人联合,从 OIDC 提供程序生成 OAuth2 令牌,并为机器人帐户访问令牌交换 OAuth2 令牌。

12.1. 使用 Red Hat Sign Sign-On 生成 OAuth2 令牌

以下流程演示了如何使用 Red Hat Single Sign-On 生成 OAuth2 令牌。根据您的 OIDC 供应商,这些步骤会有所不同。

流程

  1. 在 Red Hat Single Sign-On UI 中:

    1. Clients,然后是可以请求用户验证的应用程序或服务的名称。
    2. 在客户端的 Settings 页面中,确保设置或启用以下选项:

      • 客户端 ID
      • 有效的重定向 URI
      • 客户端身份验证
      • 授权
      • 标准流程
      • 直接访问授予

        注意

        根据您的设置,设置可能会有所不同。

    3. Credentials 页面中,存储 Client Secret 以备将来使用。
    4. Users 页面中,单击 Add user 并输入用户名,如 service-account-quaydev。然后,单击 Create
    5. 单击用户的名称,如 Users 页面上的 service-account-quaydev
    6. Credentials 标签页 Set password →,为用户提供密码。如果保证,您可以通过选择 Temporary 选项使此密码临时化。
    7. Realm settings 选项卡 OpenID Endpoint Configuration。存储 /protocol/openid-connect/token 端点。例如:

      http://localhost:8080/realms/master/protocol/openid-connect/token
  2. 在网页浏览器中,导航到以下 URL:

    http://<keycloak_url>/realms/<realm_name>/protocol/openid-connect/auth?response_type=code&client_id=<client_id>
  3. 出现提示时,使用 service-account-quaydev 用户和您设置的临时密码登录。必要时,提供所需信息并设置永久密码,从而完成登录。
  4. 您将被重定向到为客户端提供的 URI 地址。例如:

    https://localhost:3000/cb?session_state=5c9bce22-6b85-4654-b716-e9bbb3e755bc&iss=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Fmaster&code=ea5b76eb-47a5-4e5d-8f71-0892178250db.5c9bce22-6b85-4654-b716-e9bbb3e755bc.cdffafbc-20fb-42b9-b254-866017057f43

    记录地址中提供的 代码。例如:

    code=ea5b76eb-47a5-4e5d-8f71-0892178250db.5c9bce22-6b85-4654-b716-e9bbb3e755bc.cdffafbc-20fb-42b9-b254-866017057f43
    注意

    这是只能一次使用的临时代码。如果需要,您可以刷新页面或重新访问 URL 以获取另一个代码。

  5. 在终端中,使用以下 curl -X POST 命令来生成临时 OAuth2 访问令牌:

    $ curl -X POST "http://localhost:8080/realms/master/protocol/openid-connect/token" 1
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d "client_id=quaydev" 2
    -d "client_secret=g8gPsBLxVrLo2PjmZkYBdKvcB9C7fmBz" 3
    -d "grant_type=authorization_code"
    -d "code=ea5b76eb-47a5-4e5d-8f71-0892178250db.5c9bce22-6b85-4654-b716-e9bbb3e755bc.cdffafbc-20fb-42b9-b254-866017057f43" 4
    1
    在 Red Hat Single Sign-On UI 的 Realm settings 页面中找到的 protocol/openid-connect/token 端点。
    2
    用于此流程的客户端 ID。
    3
    客户端 ID 的客户端 Secret。
    4
    从重定向 URI 返回的代码。

    输出示例

    {"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJTVmExVHZ6eDd2cHVmc1dkZmc1SHdua1ZDcVlOM01DN1N5T016R0QwVGhVIn0...",
    "expires_in":60,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzUxMiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiNTBlZTVkMS05OTc1LTQwMzUtYjNkNy1lMWQ5ZTJmMjg0MTEifQ.oBDx6B3pUkXQO8m-M3hYE7v-w25ak6y70CQd5J8f5EuldhvTwpWrC1K7yOglvs09dQxtq8ont12rKIoCIi4WXw","token_type":"Bearer","not-before-policy":0,"session_state":"5c9bce22-6b85-4654-b716-e9bbb3e755bc","scope":"profile email"}

  6. access_token 从上一步中存储,因为它将在以下流程中为 Red Hat Quay 机器人帐户令牌交换。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.