2.2. Authentication
具有 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 的 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
请求正文必须包含 grant_type
、scope
、username 和
password
参数:
名称 | 值 |
---|---|
|
|
|
|
|
|
|
|
这些参数必须经过 URL 编码。例如,用户名中的 @
字符需要编码为 %40
。生成的请求正文将类似如下:
grant_type=password&scope=ovirt-app-api&username=admin%40internal&password=mypassword
在 OAuth RFC 中,scope
参数被描述为可选,但在将它与 Red Hat Virtualization API 搭配使用时,它的值必须是 ovirt-app-api
。
如果用户名和密码有效,Red Hat Virtualization Manager 单点登录服务将使用类似本文档的 JSON 文档进行响应:
{ "access_token": "fqbR1ftzh8wBCviLxJcYuV5oSDI=", "token_type": "bearer", "scope": "...", ... }
出于 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=
该令牌可以多次用于多个请求,但它最终会过期。当它过期时,服务器将使用 401 HTTP 响应代码拒绝请求:
HTTP/1.1 401 Unauthorized
当发生这种情况时,需要一个新的令牌,因为 Red Hat Virtualization Manager 单点登录服务目前不支持刷新令牌。可以使用上述相同方法请求新的令牌。