第 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。配置设置存储在 
 
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 参数。