Translated message

A translation of this page exists in English.

红帽 API 入门

已更新 -

Table of Contents

将 API 用于红帽服务

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

先决条件

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

  • API Tokens 页面 上生成的离线令牌(用户需要 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":"oiZjo1MjhkNzZmZi1mNzA4LTQzZWQtOGNkNS1mZTE2ZjRmZTBjZTY6cmhuLXN1cHBvcnQta3RvcmRldXIiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJyaHNtLWFwaSIsImF1dGhfdGltZSI6MTU2NzQwODU5Nywic2Vzc2lvbl9zdGF0ZSI6ImYwZGJiOGQ0LTRlNGUtNDY1NC04NDRjLTZmMzcwNGM4NDQyMiIsImFjciI6IjAiLCJhbGxvd2VkLW9yaWdpbnMiOltdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsicG9ydGFsX21hbmFnZV9zdWJzY3JpcHRpb25zIiwib2ZmbGluZV9hY2Nlc3MiLCJjYW5kbGVwaW5fc3lzdGVtX2FjY2Vzc192aWV3X2VkaXRfYWxsIiwiYWRtaW46b3JnOmFsbCIsInBvcnRhbF9tYW5hZ2VfY2FzZXMiLCJwb3J0YWxfc3lzdGVtX21hbmFnZW1lbnQiLCJwb3J0YWxfZG93bmxvYWQiXX0sInJlc291cmNlX2FjY2VzcyI6e30sImFjY291bnRfaWQiOiIxOTc5NzEwIiwibmFtZSI6Iktlbm55IFRvcmRldXJzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoicmhuLXN1cHBvcnQta3RvcmRldXIiLCJnaXZlbl9uYW1lIjoiS2VubnkiLCJmYW1pbHlfbmFtZSI6IlRvcmRldXJzIiwiZW1haWwiOiJrdG9yZGV1ckByZWRoYXQuY29tIn0.JfStOgLvgFUAlMb7aVfm-dWxd4wN5oqk377Q6oyDe55pM4zDiZ0f1yJfHsWL8RHeb3r0tj8DY_UAyAFkxAnjyWjq52d7h2EfJUPOs1p1P8Yeu5hDwOrA34Es2maN-ZbJCc4sOb7stGhxSCU15CfvPFIRR5tgSQ17-Mx-x4ZnK_fwpOK6DqQpNzZ0Krz3U1a-NH86XJ8dT8lC3o03YrdlcZx_-wv6-PehqNQa2Hb9vt1csX8QlL3PEyBVNPZXaaTHvyFYx0orGyjKA83Qq-LihbWBXzNjf_rIEfsPJYi-uQHIT_zjaOPYo2rXi7VTPJC2qRSxF2yaRGlihZHxkDzMOTITnaDeMhbx1zvRr-R9eXocEUzsU9j-Yx7h3WYCFjb8zdfXTBHV8SCaMdH1u9Eesa5gmHOoki8882RR85i1fjpBayFTS36y4S-yDebUYiukXOnw8mMMKy04NhVpFGfWtJ8--Jy4Ypndqqk_OS_PiWBsFFN6lMv5S6DZWVpjjE-CENHKn9ceA4MlerBBXLY02Xz9h0biiQUZrd-NLy11j4os124Mai1mmlNOLz993hw0gl-vKKno_bYOV8dEEmKtSLlSPVdW5X_0vBU0BtQuSEVctz_8zsRKHpT-YlDdmP0VDuzJjWM0YsGz2W0_tMuLG7NYS_Ia3vWAVuK--Uv5cAQ","expires_in":900,"refresh_expires_in":0,"refresh_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICItNGVsY19WZE5fV3NPVVlmMkc0UXhyOEdjd0l4X0t0WFVDaXRhdExLbEx3In0.eyJqdGkiOiJhODZlZDczZS00MmE1LTQzYjUtYjJkYS1iMWM5NzU3OWUyZWMiLCJleHAiOjAsIm5iZiI6MCwiaWF0IjoxNTY3NDEwMDIxLCJpc3MiOiJodHRwczovL3Nzby5yZWRoYXQuY29tL2F1dGgvcmVhbG1zL3JlZGhhdC1leHRlcm5hbCIsImF1ZCI6InJoc20tYXBpIiwic3ViIjoiZjo1MjhkNzZmZi1mNzA4LTQzZWQtOGNkNS1mZTE2ZjRmZTBjZTY6cmhuLXN1cHBvcnQta3RvcmRldXIiLCJ0eXAiOiJPZmZsaW5lIiwiYXpwIjoicmhzbS1hcGkiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiJmMGRiYjhkNC00ZTRlLTQ2NTQtODQ0Yy02ZjM3MDRjODQ0MjIiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsicG9ydGFsX21hbmFnZV9zdWJzY3JpcHRpb25zIiwib2ZmbGluZV9hY2Nlc3MiLCJjYW5kbGVwaW5fc3lzdGVtX2FjY2Vzc192aWV3X2VkaXRfYWxsIiwiYWRtaW46b3JnOmFsbCIsInBvcnRhbF9tYW5hZ2VfY2FzZXMiLCJwb3J0YWxfc3lzdGVtX21hbmFnZW1lbnQiLCJwb3J0YWxfZG93bmxvYWQiXX0sInJlc291cmNlX2FjY2VzcyI6e319.S_pmAWzQUc04f0uGHN9rRYd4sH1t4IPnEwCcOH1aBL9Qo4_EbXPWCrtnf84f1pfuKJTQwUS-DldY6eloyVEsGgnqkygBKh270bu_bNXCNAuLJigEMsYx_2VzdnwWLptWS2_FUaNwe7Tai8qXwd8F0ge0Zjoi3P15S_8z4Tp79uD-qKcvwz6NlPKCOZwEbwZqOkJDZ8JKTIK8O0jfqdtHMfaWwlXMXdvx3B70tTOtHjQGAsxZA2dPPvqVGuyMOMmC3bMaISReUbtDwsCV-eAZplDfDZthr4k4JbmG9Iwq1aATaF3aCwfpebcmoIZGHE4_RLZrXCZKapXVVvRxcOrJytxIZrbDHq6ozX7j-j1SE3kuexcSLvlodmfTlxwPX9g7aqJu2ZLno54NxQSgYO8lQqSvScFgLtbX5f_FUS0Iw6yRWWJy2o2fnvfGk83rt5UYTtIb8Xd1GXcpHf8Yl10nVy21BetSQY__VpahF_eZghBNxS689GJnwUqAwlu01pOlb26mmHaydHc3hqUsudZydRbaFfI7nR6gQP8lCtp6b0z5hgVHLG4ZJ7i4MmEL6C5G4xHUaUs6RZgJUSsc2DzLW0b7rSQj41JuvTmSgD8bMrnVokmkAbfvxjKGc7E8n2GyImO7JiKb3RA7_o0xOTRYDIa_Ns-lnigJkUlQZUzt7JI","token_type":"bearer","not-before-policy":0,"session_state":"f0dbb8d4-4e4e-4654-844c-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='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
* 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