2.2. 身份验证
具有 Red Hat Virtualization Manager 帐户的任何用户可以访问该 API。所有请求都必须使用 OAuth 或基本身份验证进行身份验证,如下所述。
2.2.1. OAuth 身份验证 复制链接链接已复制到粘贴板!
从 Red Hat Virtualization 版本 4.0 开始,首选验证机制为 OAuth 2.0,如 RFC 6749 所述。
OAuth 是一种复杂的协议,具有几种用于获取授权和访问令牌的机制。对于 Red Hat Virtualization API,唯一支持的是 Resource Owner Password Credentials Grant,如 RFC 6749 中的 section 4.3 所述。
您必须首先 获取令牌,将用户名和密码发送到 Red Hat Virtualization Manager 单点登录服务:
POST /ovirt-engine/sso/oauth/token HTTP/1.1 Host: myengine.example.com Content-Type: application/x-www-form-urlencoded Accept: application/json
POST /ovirt-engine/sso/oauth/token HTTP/1.1
Host: myengine.example.com
Content-Type: application/x-www-form-urlencoded
Accept: application/json
请求正文必须包含 grant_type
、scope
、username
和 password
参数:
名称 | 值 |
---|---|
|
|
|
|
|
|
|
|
这些参数必须是 URL 编码的。例如,用户名中的 @
字符需要编码为 %40
。生成的请求正文将类似如下:
grant_type=password&scope=ovirt-app-api&username=admin%40internal&password=mypassword
grant_type=password&scope=ovirt-app-api&username=admin%40internal&password=mypassword
scope
参数在 OAuth RFC 中被描述为可选,但在将其与 Red Hat Virtualization API 搭配使用时,其值必须是 ovirt-app-api
。
如果用户名和密码有效,Red Hat Virtualization Manager 单点登录服务将以类似如下的 JSON 文档进行响应:
对于 API 身份验证,唯一相关的名称/值对是 access_token
。不要以任何方式操作此功能;使用 SSO 服务提供的方式完全相同。
获得令牌后,可以通过将它包含在 HTTP 授权
标头中并使用 Bearer
方案来执行对 API 的请求。例如,要获取虚拟机列表,请发送类似如下的请求:
GET /ovirt-engine/api/vms HTTP/1.1 Host: myengine.example.com Accept: application/xml Authorization: Bearer fqbR1ftzh8wBCviLxJcYuV5oSDI=
GET /ovirt-engine/api/vms HTTP/1.1
Host: myengine.example.com
Accept: application/xml
Authorization: Bearer fqbR1ftzh8wBCviLxJcYuV5oSDI=
令牌可以多次使用,对于多个请求,但最终会过期。当服务器过期时,服务器将使用 401 HTTP 响应代码拒绝请求:
HTTP/1.1 401 Unauthorized
HTTP/1.1 401 Unauthorized
当发生这种情况时,需要一个新的令牌,因为 Red Hat Virtualization Manager 单点登录服务目前不支持刷新令牌。可使用上述相同方法请求新令牌。