第 3 章 身份验证 API 调用
与 Satellite API 交互需要身份验证。您可以将 Satellite 服务器 CA 证书下载到本地主机,以便在每个 API 请求中使用以提供 SSL 身份验证。每个 API 请求都需要有效的用户名和密码。在以下部分中讨论每个选项。
3.1. 使用 SSL 身份验证 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Red Hat Satellite 使用 HTTPS,在与 Red Hat Satellite Server 通信时提供一定程度的加密和身份验证。Satellite 6 不支持非 SSL 通信。
每个 Red Hat Satellite 服务器都使用自签名证书。此证书同时充当服务器证书,以验证加密密钥和证书颁发机构(CA)以信任 Satellite 服务器的身份。以下步骤演示了如何为 Satellite 服务器设置 SSL 身份验证(本例中为 satellite6.example.com):
- 使用以下选项之一从您要与之通信的Satellite服务器获取证书:
- 要使用 SSH 获取证书,请运行以下命令:
scp root@satellite6.example.com:/var/www/html/pub/katello-server-ca.crt ./
$ scp root@satellite6.example.com:/var/www/html/pub/katello-server-ca.crt ./Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您直接在 Satellite 服务器上执行命令,请运行以下命令从本地可用副本获取证书:
cp /var/www/html/pub/katello-server-ca.crt ./
$ cp /var/www/html/pub/katello-server-ca.crt ./Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 要使用 HTTP 获取证书,请运行以下命令:
curl -O http://satellite6.example.com/pub/katello-server-ca.crt
$ curl -O http://satellite6.example.com/pub/katello-server-ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告使用未加密的 HTTP 连接检索证书可能会存在安全风险。
- 使用客户端中的证书作为证书颁发机构来验证 Satellite 服务器的身份:
curl -X GET -u sat_username:sat_password \ -H "Accept:application/json" --cacert katello-server-ca.crt \ https://satellite6.example.com/katello/api/organizations
$ curl -X GET -u sat_username:sat_password \ -H "Accept:application/json" --cacert katello-server-ca.crt \ https://satellite6.example.com/katello/api/organizationsCopy to Clipboard Copied! Toggle word wrap Toggle overflow GET 是默认操作,因此此处可以省略 so -X GET 属性。 - 创建网络安全服务(NSS)数据库来存储证书:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 NSS 数据库已存在,系统将提示您输入密码,如下所示:Enter Password or Pin for "NSS Certificate DB":
Enter Password or Pin for "NSS Certificate DB":Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用以下命令,将证书永久包含在 NSS 数据库中:
certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "Red Hat Satellite" \ -i katello-server-ca.crt
$ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "Red Hat Satellite" \ -i katello-server-ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将证书导入到 NSS 数据库中,这意味着您可以省略每个请求的-cacert选项。您可以按照以下方式测试它:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2. 使用 HTTP 身份验证 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
对 Satellite API 的所有请求都需要合适的用户名和密码。API 使用 HTTP 基本身份验证 [1] 对这些凭证进行编码,然后添加到 Authorization 标头中。如果请求没有包括适当的 Authorization 标头,API 会返回 401 Authorization Required 错误。
重要
基本身份验证涉及潜在的敏感信息,如密码,以纯文本形式发送。REST API 需要 HTTPS 进行纯文本请求的传输级别加密。
有些 base64 库将编码的凭据分成多行,并使用换行符终止每行。这会使标头无效,并导致请求出现故障。授权标头要求编码的凭据位于标头中的一行中。
3.3. 使用 OAuth 身份验证 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
作为基本身份验证的替代选择,API 中支持有限的 OAuth 1.0 身份验证(有时在协议 1.0 中称为 1leged OAuth)。
3.3.1. 配置 OAuth 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在 Satellite 6.3 中默认启用 OAuth。配置设置存储在 在 Web UI 中查看。 是所有 OAuth 客户端要使用的令牌。Web UI 中的某些值无法更改。这些值只能通过使用新选项再次运行 satellite-installer 脚本来更改。请注意,升级时会丢失对该文件的任何手动更改。输入以下命令查看所有 OAuth 相关的安装程序选项:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
/etc/foreman/settings.yaml 配置文件中,并可通过 satellite-installer --full-help | grep oauth
# satellite-installer --full-help | grep oauth
如果您希望使用 OAuth 进行的所有 API 请求作为内置匿名 API 管理员帐户授权,请在
/etc/foreman/settings.yaml 文件中将 设置为 false。如果要指定发出请求的用户,请将此配置选项更改为 true。这允许客户端发送带有现有 Foreman 用户登录的 FOREMAN-USER 标头。
重要
标头没有在 OAuth 请求中签名,因此可以伪造。具有有效消费者密钥的任何人都可以模拟任何 Foreman 用户。
3.3.2. 发出 OAuth 请求 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
通常,OAuth 客户端库用于生成请求。此处显示了使用 curl 的 OAuth 请求示例,以帮助了解它的工作原理。
例 3.1. 使用 curl 的 OAuth 请求示例
curl 'https://satellite6.example.com/api/architectures' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json,version=2' \ -H 'FOREMAN-USER: User1' \ -H 'Authorization: OAuth oauth_version="1.0",oauth_consumer_key="secretkey",oauth_signature_method="hmac-sha1",oauth_timestamp=1321473112,oauth_signature=Il8hR8/ogj/XVuOqMPB9qNjSy6E='
$ curl 'https://satellite6.example.com/api/architectures' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json,version=2' \
-H 'FOREMAN-USER: User1' \
-H 'Authorization: OAuth oauth_version="1.0",oauth_consumer_key="secretkey",oauth_signature_method="hmac-sha1",oauth_timestamp=1321473112,oauth_signature=Il8hR8/ogj/XVuOqMPB9qNjSy6E='
oauth_timestamp 更改而改变。另外,签名也会反映每个参数、HTTP 方法和 URI 更改。因此,建议您使用 OAuth 客户端库来构造所有 OAuth 参数。