Translated message

A translation of this page exists in English.

红帽 API 入门

已更新 -

将 API 用于红帽服务

用于红帽服务的 API 可帮助您更有效地跟踪和自动化:
* 订阅和权利
* 用户帐户和权限

Account Management API 可能会涉及个人信息的处理。在使用这个 API 前,请确保您有权处理这些账户所涉及人员的个人信息。

先决条件

红帽 API 使用 OAuth 2.0 进行授权。要获取令牌并访问 API,您需要以下信息:

  • 离线令牌可以在 API 令牌页中生成(用户需要具有 View/Renew Subscription Information 权限)
  • 客户端 ID = rhsm-api
  • 令牌 URL = https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
  • 安装了 jq 来处理 JSON 对象:
    • jq 是一个命令行 JSON 处理器,可以使用 yum 命令安装:sudo yum install jq

生成一个新的离线令牌

离线令牌永远不会过期,只要它至少每 30 天使用一次,且用来创建访问令牌。它可以作为密码使用,允许您继续验证您的帐户,而无需创建新的刷新令牌。

警告:请使用与网络最佳实践一致的密码管理。以纯文本形式存储任何密码或凭证永远都是不安全的。使用与密码相同的安全措施来对待离线令牌,以防止它被未授权使用。

要生成一个离线令牌,请访问 API Tokens 页面,然后点 Generate Token 按钮。

生成一个访问令牌

创建离线令牌后,您可以使用该令牌创建一个新的刷新令牌,其包括一个在十五分钟内有效的访问令牌。访问令牌在标头中传递,以验证您的客户门户网站用户。

警告:请使用与网络最佳实践一致的密码管理。以纯文本形式存储任何密码或凭证永远都是不安全的。

Set the offline token value (in this example, we set it in plaintext and shorten the token value for clarity)
# offline_token='eyJhbGciOiJSUzI1NiIsInR5cCIgOiA'

# curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_token

您应该看到类似如下的输出,其中 access_token 将用作授权令牌:

{"access_token":"......YsGz2W0_tMuLG7NYS_Ia3vWAVuK--Uv5cAQ","expires_in":900,"refresh_expires_in":0,"refresh_token":"......_Ns-lnigJkUlQZUzt7JI","token_type":"bearer","not-before-policy":0,"session_state":"......-6f3704c84422","scope":"offline_access"}%    

access_token 需要被设置为/用作授权令牌,来执行 API 调用。

# token=$(curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_token | jq --raw-output .access_token)

使用令牌执行一个 API 调用

列出 100 个系统的 API 调用示例:

# curl -H "Authorization: Bearer $token"  "https://api.access.redhat.com/management/v1/systems?limit=100"

可选的 CLI 工具支持

安装一个 JSON 格式工具,如 jq 或可选的 json_reformat,以接收 API 调用的更多结构化的返回。

  • json_reformat 是一个命令行 JSON 格式化程序,它符合 Red Hat Enterprise Linux 上的标准。

熟悉支持 OAuth 2.0 的 标准 OIDC 库 的开发人员可以使用这些库将对 Red Hat Subscription Management API 的授权构建到脚本和应用程序。

用于测试 API 或用于不太频繁访问 API 的用户的一个选项将使用 REST 客户端。只要您的 REST 客户端支持 OAuth 2.0 或自定义表单提交,您就可以使用该客户端访问 API。一些包括 Postman、Advanced REST Client 和 Restlet的流行 REST 客户端的示例。

访问可用的 Red Hat API

红帽提供了一个 Swagger 文件来描述规范。Swagger 规范包含有关可用的 API 端点、输入参数、期望的输出和可能的错误响应的信息。swagger 文件可以导入到像 Postman 或 RESTlet 这样的 REST 客户端,来自动构建 API 调用的库。Red Hat API Swagger 文档可在本文档底部链接的 Red Hat API Tokens 和 Swagger 文档页中找到

联系红帽

如果您遇到问题并需要支持,请 开一个支持问题单

下载资源和 Swagger 文档

故障排除

  1. https://access.redhat.com/management/api 中获取 offline_token

  2. 设置离线令牌:

# offline_token='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
* Verify it's set:

        # echo $offline_token
  1. 获取访问令牌

    # curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_token
    
  2. 使用之前创建的函数获取访问令牌

     # token=$(curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_token | jq --raw-output .access_token)
    
    • 验证 access_token 是否已设置

      # echo $token
      
  3. 执行一个 API 调用:

    # curl -H "Authorization: Bearer $token"  "https://api.access.redhat.com/management/v1/systems?limit=100"
    

Comments