红帽 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 文档
故障排除
-
从 https://access.redhat.com/management/api 中获取 offline_token
-
设置离线令牌:
\# offline_token='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
* Verify it's set:
# echo $offline_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 -
使用之前创建的函数获取访问令牌
\
\# 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
-
-
执行一个 API 调用:
\
\# curl -H "Authorization: Bearer $token" "https://api.access.redhat.com/management/v1/systems?limit=100"
Comments