身份认证 API v3 (当前)

身份认证服务生成身份验证令牌,允许访问 OpenStack 服务的 REST API。客户端获取此令牌以及其他服务 API 的 URL 端点,方法是向身份验证服务提供其有效的凭据。

每次向 OpenStack 服务发出 REST API 请求时,您都会在 X-Auth-Token 请求头中提供您的身份验证令牌。

与大多数 OpenStack 项目一样,OpenStack Identity 通过定义基于角色访问控制 (RBAC) 方法的策略规则来保护其 API。

身份认证服务的配置文件设置存储这些规则的 JSON 策略文件的名称和位置。

请注意,V3 API 为所有 GET 请求实现 HEAD。每个 HEAD 请求包含与相应的 GET API 相同的头信息和 HTTP 状态码。

有关身份认证 API 保护的信息,请参阅 使用基于角色访问控制 (RBAC) 进行身份认证 API 保护 在 OpenStack 云管理员指南中。

3.14 (Ussuri) 版本中的新特性

  • 身份提供商的新属性 authorization_ttl

  • 列出用户组时的新属性 membership_expires_at

  • 能够持久化通过映射传递给联合用户的组员身份

  • 添加了为用户创建、更新和删除联合属性的功能

3.13 (Train) 版本中的新特性

  • 应用程序凭据的新参数 access_rules

  • 用于查看访问规则的新只读 API /v3/users/{user_id}/access_rules

3.12 (Stein) 版本中的新特性

  • 涉及身份验证收据的新可选多因素身份验证流程

3.11 (Rocky) 版本中的新特性

  • 用于发现生效的限制模型的 /v3/limits-model 新端点

  • 注册限制和项目限制中的新描述字段

  • 项目限制的新 project_id 过滤器

  • 项目详细查询的新参数 include_limits

3.10 (Queens) 版本中的新特性

  • 引入了应用程序凭据 API。

  • 引入了一个实验性的统一限制 API。

  • 能够授予系统角色分配并获取系统范围的令牌。

3.9 (Queens) 版本中的新特性

  • 向项目添加了 tags 属性。

  • 用于与 tags 属性交互的新 API。

3.8 (Ocata) 版本中的新特性

  • 允许服务用户获取已过期的令牌。

  • 在用户列表和组中用户列表中添加了 password_expires_at 查询参数。

3.7 (Newton) 版本中的新特性

  • 向用户响应对象添加了 password_expires_at 字段。

  • 引入一个标志以绕过过期和撤销检查。

3.6 (Mitaka) 版本中的新特性

  • 列出项目树的角色分配。

  • 设置项目 is_domain 属性使项目能够充当域。

  • is_domain 字段添加到项目范围的令牌响应中,以表示项目是否充当域。

  • 启用或禁用项目层次结构中的子树。

  • 删除项目层次结构中的子树。

  • 针对范围限定于指定 admin project 的令牌的附加标识符。

  • domain_id 过滤器添加到列出用户项目

  • 一个角色可以通过 role_inference 规则暗示另一个角色。

  • 增强列出角色分配,以选择性地提供实体的名称。

  • 可以检索特定域配置选项的默认值。

  • 分配可以指定为继承的,导致分配放置在任何子项目上。

  • 支持特定于域的角色。

  • 支持 enabledid 作为列出身份提供商时的可选属性进行过滤。

3.5 (Liberty) 版本中的新特性

  • 向列出凭据添加了 type 可选属性。

  • 向列出端点添加了 region_id 可选属性。

  • 向项目添加了 is_domain 可选属性。当前设置此属性不起作用,它是为将来的使用保留的。

3.4 (Kilo) 版本中的新特性

  • 对于无令牌授权,作用域信息可以设置在请求头中。

  • 向项目添加了 parent_id 可选属性。这使得构建项目的层次结构成为可能。

  • 为域实体添加了特定于域的配置管理。

  • 删除了 regionsurl 可选属性。此属性仅用于 keystone-to-keystone 联合的实验阶段,并且已被通过使服务提供商条目在服务目录中拥有自己的条目所取代。

  • JSON Home 支持现在将指示资源的状态,如果它不稳定且当前。

3.3 (Juno) 版本中的新特性

这些功能自 2014 年 9 月 4 日起被认为是稳定的。

  • 从服务定义中包含到服务目录中的 name 可选变量的添加。

  • 引入了一个独立的调用来检索服务目录。

  • 引入了对 JSON Home 的支持。

  • 引入了一个标准调用来检索令牌的可能项目和域范围目标。

  • regions 添加了 url 可选属性。

3.2 (Icehouse) 版本中的新特性

这些功能自 2014 年 1 月 23 日起被认为是稳定的。

  • 引入了一种在令牌验证期间退出目录信息的方法

  • 引入了一个区域资源,用于构建服务端点组的层次容器

  • 支持字符串属性上的不精确过滤

  • 列出集合可能表明仅提供数据的子集,如果特定部署限制了查询可以返回的条目数

3.1 (Havana) 版本中的新特性

这些功能自 2013 年 7 月 18 日起被认为是稳定的。

  • 如果没有指定项目并且没有对其默认项目属性指定的项目进行授权,则会发出没有明确授权范围的令牌

  • 引入了一个通用的调用来获取角色分配,并按用户、组、项目、域和角色进行过滤

  • 引入了一种在创建令牌期间退出目录信息的方法

  • 将可选的绑定信息添加到令牌结构

3.0 (Grizzly) 版本中的新特性

这些功能自 2013 年 2 月 20 日起被认为是稳定的。

  • 以前的“Service”和“Admin”API(包括以前在 v2 OS-KSADM 扩展中定义的 CRUD 操作)合并到一个核心 API 中

  • “Tenants”现在被称为“projects”

  • “Groups”:表示用户集合的容器

  • “Domains”:项目、用户和组的高级容器

  • “Policies”:策略引擎规则集的集中存储库

  • “Credentials”:每个用户的通用凭据存储(例如,EC2、PKI、SSH 等)

  • 角色可以在域级别或项目级别授予

  • 用户、组和项目名称只需要在其所属域内唯一

  • 检索您的项目列表(以前是 GET /tenants)现在明确基于您的用户 ID:GET /users/{user_id}/projects

  • 令牌明确表示用户+项目或用户+域对

  • 使用 HTTP PATCH 方法执行部分更新

  • 令牌 ID 值不再出现在 URL 中

关系

以下操作中的条目包含关系链接,该链接显示为有效的 URI,但实际上是 URN(统一资源名称),类似于 GUID,但它使用 URI 语法以便于阅读。这些链接不会解析为任何有效内容,但存在于显示关系中。

身份认证 API 操作

此页面按以下顺序列出身份认证 API 操作

身份验证和令牌管理

身份认证服务会根据身份验证凭据生成令牌。令牌代表用户的经过身份验证的身份,并可选地授予对特定项目、域或部署系统的授权。

身份验证请求的主体必须包含一个有效负载,该有效负载指定身份验证方法(通常只是 passwordtoken)、凭据以及可选的授权范围。您可以将令牌限定为项目、域、部署系统,或者令牌可以不限定范围。您不能将令牌限定为多个范围目标。

令牌具有 ID,身份认证 API 在 X-Subject-Token 响应头中返回该 ID。

在多因素身份验证 (MFA) 的情况下,需要提供多个身份验证方法才能进行身份验证。从 v3.12 开始,由于 MFA 规则仅部分满足而导致的故障将导致响应头 Openstack-Auth-Receipt 中返回身份验证收据 ID,以及详细说明收据本身和缺少的身份验证方法的响应主体。在后续身份验证请求中提供 Openstack-Auth-Receipt 头中的身份验证收据 ID,并提供缺少的身份验证方法,将通过重用第一次请求中成功的身份验证方法来生成有效的令牌。这允许 MFA 身份验证成为一个多步骤过程。

获得身份验证令牌后,您可以

  • 向其他 OpenStack 服务发出 REST API 请求。您在 X-Auth-Token 请求头中提供您的身份验证令牌的 ID。

  • 验证您的身份验证令牌并列出您的令牌授予您访问权限的域、项目、角色和端点。

  • 使用您的令牌请求针对不同域和项目限定范围的另一个令牌。

  • 强制立即撤销令牌。

  • 列出已撤销的公钥基础设施 (PKI) 令牌。

在身份认证 API 服务的 v3.7 版本中,添加了两个新的配置选项:[resource] admin_project_name[resource] admin_project_domain_name。这些选项表示只有云管理员才能访问的项目。当处理限定为管理项目的令牌的身份验证请求时,令牌中将包含一个额外的字段 {is_admin_project: True}。附加字段可用于编写评估对 API 的访问控制的策略规则。

或者,在 v3.10 中,身份认证 API 服务引入了系统角色分配和系统范围令牌的概念。影响部署系统的 API 需要系统范围令牌。

身份认证 API 认为过期的令牌无效,这由部署的配置确定。

这些身份验证错误可能发生

身份验证错误

响应代码

描述

错误请求 (400)

身份认证服务未能按预期解析请求。发生以下错误之一

  • 缺少必需的属性。

  • 指定了不允许的属性,例如基本 CRUD 操作中 POST 请求上的 ID。

  • 指定了意外数据类型的属性。

未授权 (401)

发生以下错误之一

  • 未执行身份验证。

  • 指定的 X-Auth-Token 头无效。

  • 指定的身份验证凭据无效。

  • 未满足所有 MFA 规则。

  • 指定的 Openstack-Auth-Receipt 头无效。

禁止 (403)

身份已成功验证,但未被授权执行请求的操作。

未找到 (404)

由于无法按 ID 找到引用的实体,操作失败。对于 POST 请求,引用的实体可能在请求体中而不是资源路径中指定。

冲突 (409)

POST 或 PATCH 操作失败。例如,客户端尝试更新实体的唯一属性,该属性与同一集合中另一个实体的属性冲突。

或者,客户端对具有用户定义唯一属性的集合执行了两次创建操作。例如,客户端两次对用户实体的唯一、用户定义的名称属性发出了 POST /users 请求。

POST
/v3/auth/tokens

使用无范围授权的密码身份验证

验证身份并生成令牌。使用密码身份验证方法。授权是无范围的。

请求体必须包含一个有效负载,指定身份验证方法,即 password,以及用户(通过 ID 或名称)和密码凭据。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens

请求

参数

名称

入参

类型

描述

nocatalog(可选)

查询

字符串

(从 v3.1 开始)nocatalog 仅适用于有范围的令牌。对于无范围的令牌,身份验证响应始终不包括服务目录。

domain

body

对象

一个 domain 对象

name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

auth

body

对象

一个 auth 对象。

user

body

对象

一个 user 对象。

password

body

对象

包含身份验证信息的 password 对象。

id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

identity

body

对象

一个 identity 对象。

方法

body

数组

身份验证方法。对于密码身份验证,请指定 password

示例
{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "name": "admin",
                    "domain": {
                        "name": "Default"
                    },
                    "password": "devstacker"
                }
            }
        }
    }
}

响应

参数

名称

入参

类型

描述

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

domain

body

对象

一个 domain 对象

方法

body

数组

身份验证方法。对于密码身份验证,请指定 password

expires_at

body

字符串

令牌过期的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

一个 null 值表示令牌永不过期。

令牌

body

对象

一个 token 对象。

user

body

对象

一个 user 对象。

audit_ids

body

数组

一个或两个审计 ID 的列表。审计 ID 是一个唯一的、随机生成的、URL 安全的字符串,可用于跟踪令牌。第一个审计 ID 是令牌的当前审计 ID。第二个审计 ID 仅存在于重新作用域的令牌中,并且是令牌重新作用域之前的审计 ID。重新作用域的令牌是指与相同或不同作用域交换的令牌。您可以使用这些审计 ID 来跟踪令牌或多个请求和端点上的令牌链的使用情况,而无需向非特权用户公开令牌 ID。

issued_at

body

字符串

令牌签发的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "token": {
        "methods": [
            "password"
        ],
        "expires_at": "2015-11-06T15:32:17.893769Z",
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "423f19a4ac1e4f48bbb4180756e6eb6c",
            "name": "admin",
            "password_expires_at": null
        },
        "audit_ids": [
            "ZzZwkUflQfygX7pdYDBCQQ"
        ],
        "issued_at": "2015-11-06T14:32:17.893797Z"
    }
}
POST
/v3/auth/tokens

使用有范围授权的密码身份验证

验证身份并生成令牌。使用密码身份验证方法,并将授权范围限定为项目、域或系统。

请求体必须包含一个有效负载,指定 password 身份验证方法,其中包括凭据,以及 projectdomainsystem 授权范围。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens

请求

参数

名称

入参

类型

描述

nocatalog(可选)

查询

字符串

(从 v3.1 开始)身份验证响应不包括服务目录。默认情况下,响应包括服务目录。

name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

auth

body

对象

一个 auth 对象。

user

body

对象

一个 user 对象。

scope (可选)

body

字符串

授权范围,包括系统(从 v3.10 开始)、项目或域(从 v3.4 开始)。如果在同一个请求中指定了多个范围(例如,projectdomaindomainsystem),将返回 HTTP 400 Bad Request,因为令牌不能同时限定到多个授权目标。足以唯一标识项目的是一个 ID,但如果项目按名称指定,则还必须指定项目的域,才能按名称唯一标识项目。域范围可以通过域的 ID 或名称以相同的结果来指定。

password

body

对象

包含身份验证信息的 password 对象。

id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

identity

body

对象

一个 identity 对象。

方法

body

数组

身份验证方法。对于密码身份验证,请指定 password

系统范围示例
{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "id": "ee4dfb6e5540447cb3741905149d9b6e",
                    "password": "devstacker"
                }
            }
        },
        "scope": {
            "system": {
                "all": true
            }
        }
    }
}
使用域 ID 作用域的域示例
{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "id": "ee4dfb6e5540447cb3741905149d9b6e",
                    "password": "devstacker"
                }
            }
        },
        "scope": {
            "domain": {
                "id": "default"
            }
        }
    }
}
使用域名称作用域的域示例
{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "id": "ee4dfb6e5540447cb3741905149d9b6e",
                    "password": "devstacker"
                }
            }
        },
        "scope": {
            "domain": {
                "name": "Default"
            }
        }
    }
}
使用项目 ID 作用域的项目示例
{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "id": "ee4dfb6e5540447cb3741905149d9b6e",
                    "password": "devstacker"
                }
            }
        },
        "scope": {
            "project": {
                "id": "a6944d763bf64ee6a275f1263fae0352"
            }
        }
    }
}
使用项目名称作用域的项目示例
{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "id": "ee4dfb6e5540447cb3741905149d9b6e",
                    "password": "devstacker"
                }
            }
        },
        "scope": {
            "project": {
                "domain": {
                    "id": "default"
                },
                "name": "admin"
            }
        }
    }
}

Response

参数

名称

入参

类型

描述

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

region_id

body

字符串

(从 v3.2 开始)包含服务端点的区域的 ID。

方法

body

数组

身份验证方法。对于密码身份验证,请指定 password

roles

body

数组

一个 role 对象列表

url

body

字符串

端点 URL。

region

body

字符串

(在 v3.2 中已弃用)服务端点的地理位置。

令牌

body

对象

一个 token 对象。

expires_at

body

字符串

令牌过期的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

一个 null 值表示令牌永不过期。

system(可选)

body

对象

一个 system 对象,包含有关令牌作用域的系统哪些部分的信息。如果令牌作用域限定为整个部署系统,则 system 对象将由 {"all": true} 组成。这仅包含作用域限定为系统的令牌。

domain(可选)

body

对象

一个 domain 对象,包括 idname,表示令牌作用域的域。这仅包含作用域限定为域的令牌。

project(可选)

body

对象

一个 project 对象,包括 idnamedomain 对象,表示令牌作用域的项目。这仅包含作用域限定为项目的令牌。

issued_at

body

字符串

令牌签发的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

catalog

body

数组

一个 catalog 对象。

user

body

对象

一个 user 对象。

audit_ids

body

数组

一个或两个审计 ID 的列表。审计 ID 是一个唯一的、随机生成的、URL 安全的字符串,可用于跟踪令牌。第一个审计 ID 是令牌的当前审计 ID。第二个审计 ID 仅存在于重新作用域的令牌中,并且是令牌重新作用域之前的审计 ID。重新作用域的令牌是指与相同或不同作用域交换的令牌。您可以使用这些审计 ID 来跟踪令牌或多个请求和端点上的令牌链的使用情况,而无需向非特权用户公开令牌 ID。

接口

body

字符串

接口类型,描述端点的可见性。值为:- public。由在公共可用网络接口上的最终用户可见。- internal。由在未计量内部网络接口上的最终用户可见。- admin。由在安全网络接口上的管理用户可见。

endpoints

body

数组

一个 endpoint 对象列表。

type

body

字符串

端点类型。

id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

系统范围示例
{
    "token": {
        "audit_ids": [
            "3T2dc1CGQxyJsHdDu1xkcw"
        ],
        "catalog": [
            {
                "endpoints": [
                    {
                        "id": "068d1b359ee84b438266cb736d81de97",
                        "interface": "public",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "8bfc846841ab441ca38471be6d164ced",
                        "interface": "admin",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "beb6d358c3654b4bada04d4663b640b9",
                        "interface": "internal",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    }
                ],
                "type": "identity",
                "id": "050726f278654128aba89757ae25950c",
                "name": "keystone"
            }
        ],
        "expires_at": "2015-11-07T02:58:43.578887Z",
        "issued_at": "2015-11-07T01:58:43.578929Z",
        "methods": [
            "password"
        ],
        "roles": [
            {
                "id": "51cc68287d524c759f47c811e6463340",
                "name": "admin"
            }
        ],
        "system": {
            "all": true
        },
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    }
}
域范围示例
{
    "token": {
        "audit_ids": [
            "3T2dc1CGQxyJsHdDu1xkcw"
        ],
        "catalog": [
            {
                "endpoints": [
                    {
                        "id": "068d1b359ee84b438266cb736d81de97",
                        "interface": "public",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "8bfc846841ab441ca38471be6d164ced",
                        "interface": "admin",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "beb6d358c3654b4bada04d4663b640b9",
                        "interface": "internal",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    }
                ],
                "type": "identity",
                "id": "050726f278654128aba89757ae25950c",
                "name": "keystone"
            }
        ],
        "domain": {
            "id": "default",
            "name": "Default"
        },
        "expires_at": "2015-11-07T02:58:43.578887Z",
        "issued_at": "2015-11-07T01:58:43.578929Z",
        "methods": [
            "password"
        ],
        "roles": [
            {
                "id": "51cc68287d524c759f47c811e6463340",
                "name": "admin"
            }
        ],
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    }
}
项目范围示例
{
    "token": {
        "audit_ids": [
            "3T2dc1CGQxyJsHdDu1xkcw"
        ],
        "catalog": [
            {
                "endpoints": [
                    {
                        "id": "068d1b359ee84b438266cb736d81de97",
                        "interface": "public",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "8bfc846841ab441ca38471be6d164ced",
                        "interface": "admin",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "beb6d358c3654b4bada04d4663b640b9",
                        "interface": "internal",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    }
                ],
                "type": "identity",
                "id": "050726f278654128aba89757ae25950c",
                "name": "keystone"
            }
        ],
        "expires_at": "2015-11-07T02:58:43.578887Z",
        "is_domain": false,
        "issued_at": "2015-11-07T01:58:43.578929Z",
        "methods": [
            "password"
        ],
        "project": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "a6944d763bf64ee6a275f1263fae0352",
            "name": "admin"
        },
        "roles": [
            {
                "id": "51cc68287d524c759f47c811e6463340",
                "name": "admin"
            }
        ],
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    }
}
POST
/v3/auth/tokens

使用显式无范围授权的密码身份验证

验证身份并生成令牌。使用密码身份验证方法,并使用显式无范围授权。

请求体必须包含一个有效负载,指定 password 身份验证方法、凭据和 unscoped 授权范围。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens

请求

参数

名称

入参

类型

描述

nocatalog(可选)

查询

字符串

(从 v3.1 开始)nocatalog 仅适用于有范围的令牌。对于无范围的令牌,身份验证响应始终不包括服务目录。

name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

auth

body

对象

一个 auth 对象。

user

body

对象

一个 user 对象。

scope (可选)

body

字符串

授权范围(从 v3.4 开始)。指定 unscoped 以发出显式无范围令牌请求,该请求返回一个无范围的响应,不包含任何授权。此请求的行为与没有范围的令牌请求相同,其中用户没有定义的默认项目。如果未发出显式 unscoped 令牌请求,并且用户有权访问其默认项目,则响应将返回一个项目范围的令牌。如果没有定义默认项目,则会颁发一个没有明确授权范围的令牌,这与请求显式无范围令牌相同。

password

body

对象

包含身份验证信息的 password 对象。

id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

identity

body

对象

一个 identity 对象。

方法

body

数组

身份验证方法。对于密码身份验证,请指定 password

示例
{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "id": "ee4dfb6e5540447cb3741905149d9b6e",
                    "password": "devstacker"
                }
            }
        },
        "scope": "unscoped"
    }
}

Response

参数

名称

入参

类型

描述

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

domain

body

对象

一个 domain 对象

方法

body

数组

身份验证方法。对于密码身份验证,请指定 password

roles

body

数组

一个 role 对象列表

expires_at

body

字符串

令牌过期的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

一个 null 值表示令牌永不过期。

令牌

body

对象

一个 token 对象。

user

body

对象

一个 user 对象。

audit_ids

body

数组

一个或两个审计 ID 的列表。审计 ID 是一个唯一的、随机生成的、URL 安全的字符串,可用于跟踪令牌。第一个审计 ID 是令牌的当前审计 ID。第二个审计 ID 仅存在于重新作用域的令牌中,并且是令牌重新作用域之前的审计 ID。重新作用域的令牌是指与相同或不同作用域交换的令牌。您可以使用这些审计 ID 来跟踪令牌或多个请求和端点上的令牌链的使用情况,而无需向非特权用户公开令牌 ID。

issued_at

body

字符串

令牌签发的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

404 - Not Found

找不到请求的资源。

示例
{
    "token": {
        "methods": [
            "password"
        ],
        "expires_at": "2015-11-09T01:42:57.527363Z",
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin",
            "password_expires_at": null
        },
        "audit_ids": [
            "lC2Wj1jbQe-dLjLyOx4qPQ"
        ],
        "issued_at": "2015-11-09T00:42:57.527404Z"
    }
}
POST
/v3/auth/tokens

使用无范围授权的令牌身份验证

验证身份并生成令牌。使用令牌身份验证方法。授权是无范围的。

在请求体中,提供令牌 ID。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens

请求

参数

名称

入参

类型

描述

nocatalog(可选)

查询

字符串

(从 v3.1 开始)nocatalog 仅适用于有范围的令牌。对于无范围的令牌,身份验证响应始终不包括服务目录。

identity

body

对象

一个 identity 对象。

令牌

body

对象

一个 token 对象。使用令牌身份验证方法。此方法通常与更改授权范围的请求结合使用。

id

body

字符串

一个令牌 ID。

auth

body

对象

一个 auth 对象。

方法

body

数组

身份验证方法。对于令牌身份验证,请指定 token

示例
{
    "auth": {
        "identity": {
            "methods": [
                "token"
            ],
            "token": {
                "id": "'$OS_TOKEN'"
            }
        }
    }
}

响应

参数

名称

入参

类型

描述

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "token": {
        "methods": [
            "token"
        ],
        "expires_at": "2015-11-05T22:00:11.000000Z",
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "10a2e6e717a245d9acad3e5f97aeca3d",
            "name": "admin",
            "password_expires_at": null
        },
        "audit_ids": [
            "mAjXQhiYRyKwkB4qygdLVg"
        ],
        "issued_at": "2015-11-05T21:00:33.819948Z"
    }
}
POST
/v3/auth/tokens

使用有范围授权的令牌身份验证

验证身份并生成令牌。使用令牌身份验证方法,并将授权范围限定为项目、域或系统。

请求体必须包含一个有效负载,指定 token 身份验证方法,其中包括令牌,以及 projectdomainsystem 授权范围。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens

请求

参数

名称

入参

类型

描述

nocatalog(可选)

查询

字符串

(从 v3.1 开始)身份验证响应不包括服务目录。默认情况下,响应包括服务目录。

方法

body

数组

身份验证方法。对于令牌身份验证,请指定 token

auth

body

对象

一个 auth 对象。

令牌

body

对象

一个 token 对象。使用令牌身份验证方法。此方法通常与更改授权范围的请求结合使用。

audit_ids

body

数组

一个或两个审计 ID 的列表。审计 ID 是一个唯一的、随机生成的、URL 安全的字符串,可用于跟踪令牌。第一个审计 ID 是令牌的当前审计 ID。第二个审计 ID 仅存在于重新作用域的令牌中,并且是令牌重新作用域之前的审计 ID。重新作用域的令牌是指与相同或不同作用域交换的令牌。您可以使用这些审计 ID 来跟踪令牌或多个请求和端点上的令牌链的使用情况,而无需向非特权用户公开令牌 ID。

scope (可选)

body

字符串

授权范围,包括系统(从 v3.10 开始)、项目或域(从 v3.4 开始)。如果在同一个请求中指定了多个范围(例如,projectdomaindomainsystem),将返回 HTTP 400 Bad Request,因为令牌不能同时限定到多个授权目标。足以唯一标识项目的是一个 ID,但如果项目按名称指定,则还必须指定项目的域,才能按名称唯一标识项目。域范围可以通过域的 ID 或名称以相同的结果来指定。

id

body

字符串

一个令牌 ID。

identity

body

对象

一个 identity 对象。

系统范围示例
{
    "auth": {
        "identity": {
            "methods": [
                "token"
            ],
            "token": {
                "id": "'$OS_TOKEN'"
            }
        },
        "scope": {
            "system": {
                "all": true
            }
        }
    }
}
使用域 ID 作用域的域示例
{
    "auth": {
        "identity": {
            "methods": [
                "token"
            ],
            "token": {
                "id": "'$OS_TOKEN'"
            }
        },
        "scope": {
            "domain": {
                "id": "default"
            }
        }
    }
}
使用域名称作用域的域示例
{
    "auth": {
        "identity": {
            "methods": [
                "token"
            ],
            "token": {
                "id": "'$OS_TOKEN'"
            }
        },
        "scope": {
            "domain": {
                "name": "Default"
            }
        }
    }
}
使用项目 ID 作用域的项目示例
{
    "auth": {
        "identity": {
            "methods": [
                "token"
            ],
            "token": {
                "id": "'$OS_TOKEN'"
            }
        },
        "scope": {
            "project": {
                "id": "a6944d763bf64ee6a275f1263fae0352"
            }
        }
    }
}
使用项目名称作用域的项目示例
{
    "auth": {
        "identity": {
            "methods": [
                "token"
            ],
            "token": {
                "id": "'$OS_TOKEN'"
            }
        },
        "scope": {
            "project": {
                "domain": {
                    "id": "default"
                },
                "name": "admin"
            }
        }
    }
}

响应

参数

名称

入参

类型

描述

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

region_id

body

字符串

(从 v3.2 开始)包含服务端点的区域的 ID。

方法

body

数组

身份验证方法。对于密码身份验证,请指定 password

roles

body

数组

一个 role 对象列表

url

body

字符串

端点 URL。

region

body

字符串

(在 v3.2 中已弃用)服务端点的地理位置。

令牌

body

对象

一个 token 对象。

expires_at

body

字符串

令牌过期的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

一个 null 值表示令牌永不过期。

system(可选)

body

对象

一个 system 对象,包含有关令牌作用域的系统哪些部分的信息。如果令牌作用域限定为整个部署系统,则 system 对象将由 {"all": true} 组成。这仅包含作用域限定为系统的令牌。

domain(可选)

body

对象

一个 domain 对象,包括 idname,表示令牌作用域的域。这仅包含作用域限定为域的令牌。

project(可选)

body

对象

一个 project 对象,包括 idnamedomain 对象,表示令牌作用域的项目。这仅包含作用域限定为项目的令牌。

issued_at

body

字符串

令牌签发的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

catalog

body

数组

一个 catalog 对象。

user

body

对象

一个 user 对象。

audit_ids

body

数组

一个或两个审计 ID 的列表。审计 ID 是一个唯一的、随机生成的、URL 安全的字符串,可用于跟踪令牌。第一个审计 ID 是令牌的当前审计 ID。第二个审计 ID 仅存在于重新作用域的令牌中,并且是令牌重新作用域之前的审计 ID。重新作用域的令牌是指与相同或不同作用域交换的令牌。您可以使用这些审计 ID 来跟踪令牌或多个请求和端点上的令牌链的使用情况,而无需向非特权用户公开令牌 ID。

接口

body

字符串

接口类型,描述端点的可见性。值为:- public。由在公共可用网络接口上的最终用户可见。- internal。由在未计量内部网络接口上的最终用户可见。- admin。由在安全网络接口上的管理用户可见。

endpoints

body

数组

一个 endpoint 对象列表。

type

body

字符串

端点类型。

id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

系统范围示例
{
    "token": {
        "audit_ids": [
            "3T2dc1CGQxyJsHdDu1xkcw",
            "oppr9r6pQo6mWb5Ji4zgwg"
        ],
        "catalog": [
            {
                "endpoints": [
                    {
                        "id": "068d1b359ee84b438266cb736d81de97",
                        "interface": "public",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "8bfc846841ab441ca38471be6d164ced",
                        "interface": "admin",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "beb6d358c3654b4bada04d4663b640b9",
                        "interface": "internal",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    }
                ],
                "type": "identity",
                "id": "050726f278654128aba89757ae25950c",
                "name": "keystone"
            }
        ],
        "expires_at": "2015-11-07T02:58:43.578887Z",
        "issued_at": "2015-11-07T01:58:43.578929Z",
        "methods": [
            "token",
            "password"
        ],
        "roles": [
            {
                "id": "51cc68287d524c759f47c811e6463340",
                "name": "admin"
            }
        ],
        "system": {
            "all": true
        },
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    }
}
域范围示例
{
    "token": {
        "audit_ids": [
            "3T2dc1CGQxyJsHdDu1xkcw",
            "oppr9r6pQo6mWb5Ji4zgwg"
        ],
        "catalog": [
            {
                "endpoints": [
                    {
                        "id": "068d1b359ee84b438266cb736d81de97",
                        "interface": "public",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "8bfc846841ab441ca38471be6d164ced",
                        "interface": "admin",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "beb6d358c3654b4bada04d4663b640b9",
                        "interface": "internal",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    }
                ],
                "type": "identity",
                "id": "050726f278654128aba89757ae25950c",
                "name": "keystone"
            }
        ],
        "domain": {
            "id": "default",
            "name": "Default"
        },
        "expires_at": "2015-11-07T02:58:43.578887Z",
        "issued_at": "2015-11-07T01:58:43.578929Z",
        "methods": [
            "token",
            "password"
        ],
        "roles": [
            {
                "id": "51cc68287d524c759f47c811e6463340",
                "name": "admin"
            }
        ],
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    }
}
项目范围示例
{
    "token": {
        "audit_ids": [
            "3T2dc1CGQxyJsHdDu1xkcw",
            "oppr9r6pQo6mWb5Ji4zgwg"
        ],
        "catalog": [
            {
                "endpoints": [
                    {
                        "id": "068d1b359ee84b438266cb736d81de97",
                        "interface": "public",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "8bfc846841ab441ca38471be6d164ced",
                        "interface": "admin",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "beb6d358c3654b4bada04d4663b640b9",
                        "interface": "internal",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    }
                ],
                "type": "identity",
                "id": "050726f278654128aba89757ae25950c",
                "name": "keystone"
            }
        ],
        "expires_at": "2015-11-07T02:58:43.578887Z",
        "is_domain": false,
        "issued_at": "2015-11-07T01:58:43.578929Z",
        "methods": [
            "token",
            "password"
        ],
        "project": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "a6944d763bf64ee6a275f1263fae0352",
            "name": "admin"
        },
        "roles": [
            {
                "id": "51cc68287d524c759f47c811e6463340",
                "name": "admin"
            }
        ],
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    }
}
POST
/v3/auth/tokens

使用显式无范围授权的令牌身份验证

验证身份并生成令牌。使用令牌身份验证方法,并使用显式无范围授权。

在请求体中,提供令牌 ID 和 unscoped 授权范围。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens

请求

参数

名称

入参

类型

描述

nocatalog(可选)

查询

字符串

(从 v3.1 开始)nocatalog 仅适用于有范围的令牌。对于无范围的令牌,身份验证响应始终不包括服务目录。

方法

body

数组

身份验证方法。对于令牌身份验证,请指定 token

auth

body

对象

一个 auth 对象。

令牌

body

对象

一个 token 对象。使用令牌身份验证方法。此方法通常与更改授权范围的请求结合使用。

audit_ids

body

数组

一个或两个审计 ID 的列表。审计 ID 是一个唯一的、随机生成的、URL 安全的字符串,可用于跟踪令牌。第一个审计 ID 是令牌的当前审计 ID。第二个审计 ID 仅存在于重新作用域的令牌中,并且是令牌重新作用域之前的审计 ID。重新作用域的令牌是指与相同或不同作用域交换的令牌。您可以使用这些审计 ID 来跟踪令牌或多个请求和端点上的令牌链的使用情况,而无需向非特权用户公开令牌 ID。

scope (可选)

body

字符串

授权范围(从 v3.4 开始)。指定 unscoped 以发出显式无范围令牌请求,该请求返回一个无范围的响应,不包含任何授权。此请求的行为与没有范围的令牌请求相同,其中用户没有定义的默认项目。如果未发出显式 unscoped 令牌请求,并且用户有权访问其默认项目,则响应将返回一个项目范围的令牌。如果没有定义默认项目,则会颁发一个没有明确授权范围的令牌,这与请求显式无范围令牌相同。

id

body

字符串

一个令牌 ID。

identity

body

对象

一个 identity 对象。

示例
{
    "auth": {
        "identity": {
            "methods": [
                "token"
            ],
            "token": {
                "id": "'$OS_TOKEN'"
            }
        },
        "scope": "unscoped"
    }
}

响应

参数

名称

入参

类型

描述

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

404 - Not Found

找不到请求的资源。

示例
{
    "token": {
        "methods": [
            "token"
        ],
        "expires_at": "2015-11-05T22:00:11.000000Z",
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "10a2e6e717a245d9acad3e5f97aeca3d",
            "name": "admin",
            "password_expires_at": null
        },
        "audit_ids": [
            "mAjXQhiYRyKwkB4qygdLVg"
        ],
        "issued_at": "2015-11-05T21:00:33.819948Z"
    }
}
POST
/v3/auth/tokens

多步骤身份验证(2 因素密码和 TOTP 示例)

验证身份并生成令牌。使用密码身份验证方法,然后使用 totp 方法,并在两者之间使用身份验证收据。

假设已为用户启用 MFA,并且已定义需要使用密码和 totp 进行身份验证的规则。

第一个请求体必须至少包含一个有效负载,指定 passwordtotp 身份验证方法,其中包括凭据以及可选的范围。如果仅提供一种方法,则将返回身份验证收据。范围不会保留在收据中,必须在后续请求中重新提供。

虽然有可能一次提供所有必需的身份验证方法,但此示例显示了更常见的多步骤过程。

可以使用超过 2 个因素,但处理过程相同;可以一次性提供所有身份验证方法,也可以分步骤提供,并在步骤之间使用一个或多个身份验证凭证。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens

首次请求

参数

名称

入参

类型

描述

nocatalog(可选)

查询

字符串

(从 v3.1 开始)身份验证响应不包括服务目录。默认情况下,响应包括服务目录。

name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

auth

body

对象

一个 auth 对象。

user

body

对象

一个 user 对象。

scope (可选)

body

字符串

授权范围,包括系统(从 v3.10 开始)、项目或域(从 v3.4 开始)。如果在同一个请求中指定了多个范围(例如,projectdomaindomainsystem),将返回 HTTP 400 Bad Request,因为令牌不能同时限定到多个授权目标。足以唯一标识项目的是一个 ID,但如果项目按名称指定,则还必须指定项目的域,才能按名称唯一标识项目。域范围可以通过域的 ID 或名称以相同的结果来指定。

password

body

对象

包含身份验证信息的 password 对象。

id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

identity

body

对象

一个 identity 对象。

方法

body

数组

身份验证方法。对于密码身份验证,请指定 password

示例
{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "id": "ee4dfb6e5540447cb3741905149d9b6e",
                    "password": "devstacker"
                }
            }
        },
        "scope": {
            "project": {
                "id": "a6944d763bf64ee6a275f1263fae0352"
            }
        }
    }
}

响应

我们期望收到 401 状态码,以及一个返回的身份验证凭证。

参数

名称

入参

类型

描述

Openstack-Auth-Receipt

标头

字符串

身份验证凭证。部分成功的身份验证响应会在此标头中,而不是在响应主体中返回身份验证凭证 ID。

方法

body

数组

身份验证方法,通常是 password(密码)、totp(时间一用密码)或其他方法。指示用于获取凭证的累积身份验证方法集。例如,如果凭证是通过密码身份验证获得的,则它包含 password。 稍后,如果凭证通过使用另一种身份验证方法一次或多次进行交换,随后创建的凭证可能在其 methods 属性中包含 passwordtotp

expires_at

body

字符串

凭证的过期日期和时间。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

一个 null 值表示凭证永不过期。

issued_at

body

字符串

颁发凭证的日期和时间。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

user

body

对象

一个 user 对象。

required_auth_methods

body

列表的列表

一个身份验证规则列表,可与身份验证凭证一起用于完成身份验证过程。

状态码
成功

代码

原因

401 - 未授权

用户已成功提供了一些身份验证方法,但不足以进行完全身份验证。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

身份验证尝试失败。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

身份验证凭证示例
{
    "receipt":{
        "expires_at":"2018-07-05T08:39:23.000000Z",
        "issued_at":"2018-07-05T08:34:23.000000Z",
        "methods": [
            "password"
        ],
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin"
        }
    },
    "required_auth_methods": [
        ["totp", "password"]
    ]
}

第二次请求

参数

名称

入参

类型

描述

Openstack-Auth-Receipt

标头

字符串

身份验证凭证。部分成功的身份验证响应会在此标头中,而不是在响应主体中返回身份验证凭证 ID。

nocatalog(可选)

查询

字符串

(从 v3.1 开始)身份验证响应不包括服务目录。默认情况下,响应包括服务目录。

name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

auth

body

对象

一个 auth 对象。

user

body

对象

一个 user 对象。

scope (可选)

body

字符串

授权范围,包括系统(从 v3.10 开始)、项目或域(从 v3.4 开始)。如果在同一个请求中指定了多个范围(例如,projectdomaindomainsystem),将返回 HTTP 400 Bad Request,因为令牌不能同时限定到多个授权目标。足以唯一标识项目的是一个 ID,但如果项目按名称指定,则还必须指定项目的域,才能按名称唯一标识项目。域范围可以通过域的 ID 或名称以相同的结果来指定。

totp

body

对象

包含身份验证信息的 totp 对象。

id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

identity

body

对象

一个 identity 对象。

方法

body

数组

身份验证方法。对于 totp 身份验证,请指定 totp

示例
{
    "auth": {
        "identity": {
            "methods": [
                "totp"
            ],
            "totp": {
                "user": {
                    "id": "ee4dfb6e5540447cb3741905149d9b6e",
                    "passcode": "123456"
                }
            }
        },
        "scope": {
            "project": {
                "id": "a6944d763bf64ee6a275f1263fae0352"
            }
        }
    }
}

响应

参数

名称

入参

类型

描述

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

region_id

body

字符串

(从 v3.2 开始)包含服务端点的区域的 ID。

方法

body

数组

身份验证方法。对于密码身份验证,请指定 password

roles

body

数组

一个 role 对象列表

url

body

字符串

端点 URL。

region

body

字符串

(在 v3.2 中已弃用)服务端点的地理位置。

令牌

body

对象

一个 token 对象。

expires_at

body

字符串

令牌过期的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

一个 null 值表示令牌永不过期。

system(可选)

body

对象

一个 system 对象,包含有关令牌作用域的系统哪些部分的信息。如果令牌作用域限定为整个部署系统,则 system 对象将由 {"all": true} 组成。这仅包含作用域限定为系统的令牌。

domain(可选)

body

对象

一个 domain 对象,包括 idname,表示令牌作用域的域。这仅包含作用域限定为域的令牌。

project(可选)

body

对象

一个 project 对象,包括 idnamedomain 对象,表示令牌作用域的项目。这仅包含作用域限定为项目的令牌。

issued_at

body

字符串

令牌签发的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

catalog

body

数组

一个 catalog 对象。

user

body

对象

一个 user 对象。

audit_ids

body

数组

一个或两个审计 ID 的列表。审计 ID 是一个唯一的、随机生成的、URL 安全的字符串,可用于跟踪令牌。第一个审计 ID 是令牌的当前审计 ID。第二个审计 ID 仅存在于重新作用域的令牌中,并且是令牌重新作用域之前的审计 ID。重新作用域的令牌是指与相同或不同作用域交换的令牌。您可以使用这些审计 ID 来跟踪令牌或多个请求和端点上的令牌链的使用情况,而无需向非特权用户公开令牌 ID。

接口

body

字符串

接口类型,描述端点的可见性。值为:- public。由在公共可用网络接口上的最终用户可见。- internal。由在未计量内部网络接口上的最终用户可见。- admin。由在安全网络接口上的管理用户可见。

endpoints

body

数组

一个 endpoint 对象列表。

type

body

字符串

端点类型。

id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

身份验证尝试失败。身份验证凭证可能已过期,或者提供的其他身份验证方法无效。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

项目范围的密码和 TOTP 示例
{
    "token": {
        "audit_ids": [
            "3T2dc1CGQxyJsHdDu1xkcw"
        ],
        "catalog": [
            {
                "endpoints": [
                    {
                        "id": "068d1b359ee84b438266cb736d81de97",
                        "interface": "public",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "8bfc846841ab441ca38471be6d164ced",
                        "interface": "admin",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "beb6d358c3654b4bada04d4663b640b9",
                        "interface": "internal",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    }
                ],
                "type": "identity",
                "id": "050726f278654128aba89757ae25950c",
                "name": "keystone"
            }
        ],
        "expires_at": "2015-11-07T02:58:43.578887Z",
        "is_domain": false,
        "issued_at": "2015-11-07T01:58:43.578929Z",
        "methods": [
            "password",
            "totp"
        ],
        "project": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "a6944d763bf64ee6a275f1263fae0352",
            "name": "admin"
        },
        "roles": [
            {
                "id": "51cc68287d524c759f47c811e6463340",
                "name": "admin"
            }
        ],
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    }
}
GET
/v3/auth/tokens

验证并显示令牌信息

验证令牌并显示其信息,包括其过期日期和授权范围。

X-Auth-Token 请求标头中传递您自己的令牌。

X-Subject-Token 请求标头中传递您想要验证的令牌。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens

请求

参数

名称

入参

类型

描述

X-Auth-Token

标头

字符串

用于管理用户的有效身份验证令牌。

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

nocatalog(可选)

查询

字符串

(从 v3.1 开始)身份验证响应不包括服务目录。默认情况下,响应包括服务目录。

allow_expired (可选)

查询

bool

(自 v3.8 起) 允许获取已过期的令牌。默认情况下,过期的令牌会返回 404 异常。

响应

参数

名称

入参

类型

描述

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

方法

body

数组

身份验证方法,通常是 password(密码)、token(令牌)或其他方法。指示用于获取令牌的累积身份验证方法集。例如,如果令牌是通过密码身份验证获得的,则它包含 password。 稍后,如果令牌通过使用令牌身份验证方法一次或多次进行交换,随后创建的令牌可能在其 methods 属性中包含 passwordtoken。与多因素身份验证不同,methods 属性仅指示用于与令牌交换身份验证用户的方法。客户端负责确定身份验证因素的总数。

links

body

对象

指向 domain 资源的链接。

user

body

对象

一个 user 对象。

令牌

body

对象

一个 token 对象。

expires_at

body

字符串

令牌过期的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

一个 null 值表示令牌永不过期。

catalog (可选)

body

数组

一个 catalog 对象。

system(可选)

body

对象

一个 system 对象,包含有关令牌作用域的系统哪些部分的信息。如果令牌作用域限定为整个部署系统,则 system 对象将由 {"all": true} 组成。这仅包含作用域限定为系统的令牌。

domain(可选)

body

对象

一个 domain 对象,包括 idname,表示令牌作用域的域。这仅包含作用域限定为域的令牌。

project(可选)

body

对象

一个 project 对象,包括 idnamedomain 对象,表示令牌作用域的项目。这仅包含作用域限定为项目的令牌。

roles

body

数组

一个 role 对象列表

audit_ids

body

数组

一个或两个审计 ID 的列表。审计 ID 是一个唯一的、随机生成的、URL 安全的字符串,可用于跟踪令牌。第一个审计 ID 是令牌的当前审计 ID。第二个审计 ID 仅存在于重新作用域的令牌中,并且是令牌重新作用域之前的审计 ID。重新作用域的令牌是指与相同或不同作用域交换的令牌。您可以使用这些审计 ID 来跟踪令牌或多个请求和端点上的令牌链的使用情况,而无需向非特权用户公开令牌 ID。

issued_at

body

字符串

令牌签发的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

未范围示例
{
    "token": {
        "audit_ids": [
            "mAjXQhiYRyKwkB4qygdLVg"
        ],
        "expires_at": "2015-11-05T22:00:11.000000Z",
        "issued_at": "2015-11-05T21:00:33.819948Z",
        "methods": [
            "password"
        ],
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "10a2e6e717a245d9acad3e5f97aeca3d",
            "name": "admin",
            "password_expires_at": null
        }
    }
}
系统范围示例
{
    "token": {
        "audit_ids": [
            "3T2dc1CGQxyJsHdDu1xkcw"
        ],
        "catalog": [
            {
                "endpoints": [
                    {
                        "id": "068d1b359ee84b438266cb736d81de97",
                        "interface": "public",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "8bfc846841ab441ca38471be6d164ced",
                        "interface": "admin",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "beb6d358c3654b4bada04d4663b640b9",
                        "interface": "internal",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    }
                ],
                "type": "identity",
                "id": "050726f278654128aba89757ae25950c",
                "name": "keystone"
            }
        ],
        "expires_at": "2015-11-07T02:58:43.578887Z",
        "issued_at": "2015-11-07T01:58:43.578929Z",
        "methods": [
            "password"
        ],
        "roles": [
            {
                "id": "51cc68287d524c759f47c811e6463340",
                "name": "admin"
            }
        ],
        "system": {
            "all": true
        },
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    }
}
域范围示例
{
    "token": {
        "audit_ids": [
            "3T2dc1CGQxyJsHdDu1xkcw"
        ],
        "catalog": [
            {
                "endpoints": [
                    {
                        "id": "068d1b359ee84b438266cb736d81de97",
                        "interface": "public",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "8bfc846841ab441ca38471be6d164ced",
                        "interface": "admin",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "beb6d358c3654b4bada04d4663b640b9",
                        "interface": "internal",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    }
                ],
                "type": "identity",
                "id": "050726f278654128aba89757ae25950c",
                "name": "keystone"
            }
        ],
        "domain": {
            "id": "default",
            "name": "Default"
        },
        "expires_at": "2015-11-07T02:58:43.578887Z",
        "issued_at": "2015-11-07T01:58:43.578929Z",
        "methods": [
            "password"
        ],
        "roles": [
            {
                "id": "51cc68287d524c759f47c811e6463340",
                "name": "admin"
            }
        ],
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    }
}
项目范围示例
{
    "token": {
        "audit_ids": [
            "3T2dc1CGQxyJsHdDu1xkcw"
        ],
        "catalog": [
            {
                "endpoints": [
                    {
                        "id": "068d1b359ee84b438266cb736d81de97",
                        "interface": "public",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "8bfc846841ab441ca38471be6d164ced",
                        "interface": "admin",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    },
                    {
                        "id": "beb6d358c3654b4bada04d4663b640b9",
                        "interface": "internal",
                        "region": "RegionOne",
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity"
                    }
                ],
                "type": "identity",
                "id": "050726f278654128aba89757ae25950c",
                "name": "keystone"
            }
        ],
        "expires_at": "2015-11-07T02:58:43.578887Z",
        "is_domain": false,
        "issued_at": "2015-11-07T01:58:43.578929Z",
        "methods": [
            "password"
        ],
        "project": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "a6944d763bf64ee6a275f1263fae0352",
            "name": "admin"
        },
        "roles": [
            {
                "id": "51cc68287d524c759f47c811e6463340",
                "name": "admin"
            }
        ],
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "ee4dfb6e5540447cb3741905149d9b6e",
            "name": "admin",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    }
}
HEAD
/v3/auth/tokens

检查令牌

验证令牌。

此调用类似于 GET /auth/tokens,但即使在 X-Subject-Token 标头中,也不会提供响应主体。

身份验证 API 返回与 POST /auth/tokens 发出主题令牌时相同的响应,即使由于令牌无效而发生错误。HTTP 204 响应码表示 X-Subject-Token 有效。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens

请求

参数

名称

入参

类型

描述

X-Auth-Token

标头

字符串

用于管理用户的有效身份验证令牌。

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

allow_expired (可选)

查询

bool

(自 v3.8 起) 允许获取已过期的令牌。默认情况下,过期的令牌会返回 404 异常。

响应

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

DELETE
/v3/auth/tokens

撤销令牌

撤销令牌。

此调用类似于 HEAD /auth/tokens 调用,不同之处在于,无论 expires_at 属性值如何,X-Subject-Token 令牌会立即失效。不需要额外的 X-Auth-Token

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens

请求

参数

名称

入参

类型

描述

X-Auth-Token

标头

字符串

用于管理用户的有效身份验证令牌。

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/auth/catalog

获取服务目录

新版本 3.3

此调用返回请求中提供的 X-Auth-Token 的服务目录,即使令牌本身不包含目录(例如,如果它是使用 ?nocatalog 生成的)。

目录对象的结构与令牌中包含的目录对象的结构相同。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_catalog

请求

参数

名称

入参

类型

描述

X-Auth-Token

标头

字符串

用于管理用户的有效身份验证令牌。

响应

参数

名称

入参

类型

描述

endpoints

body

数组

一个 endpoint 对象列表。

id

body

字符串

服务所属的服务的 UUID。

type

body

字符串

服务类型,描述服务实现 API。值为 compute(计算)、ec2identity(身份)、image(镜像)、network(网络)或 volume(卷)。

name

body

字符串

服务名称。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "catalog": [
        {
            "endpoints": [
                {
                    "id": "39dc322ce86c4111b4f06c2eeae0841b",
                    "interface": "public",
                    "region": "RegionOne",
                    "url": "https://:5000"
                },
                {
                    "id": "ec642f27474842e78bf059f6c48f4e99",
                    "interface": "internal",
                    "region": "RegionOne",
                    "url": "https://:5000"
                },
                {
                    "id": "c609fc430175452290b62a4242e8a7e8",
                    "interface": "admin",
                    "region": "RegionOne",
                    "url": "https://:5000"
                }
            ],
            "id": "4363ae44bdf34a3981fde3b823cb9aa2",
            "type": "identity",
            "name": "keystone"
        }
    ],
    "links": {
        "self": "https://example.com/identity/v3/catalog",
        "previous": null,
        "next": null
    }
}
GET
/v3/auth/projects

获取可用的项目范围

新版本 3.3

此调用返回根据请求中提供的 X-Auth-Token 可用于定范围的项目列表。

响应的结构与列出用户项目完全相同。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_projects

请求

参数

名称

入参

类型

描述

X-Auth-Token

标头

字符串

用于管理用户的有效身份验证令牌。

响应

参数

名称

入参

类型

描述

domain_id

body

字符串

项目的域 ID。

enabled

body

布尔值

如果设置为 true,则项目已启用。如果设置为 false,则项目已禁用。

id

body

字符串

项目的 ID。

links

body

对象

指向 project 资源的链接。

name

body

字符串

项目的名称。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "projects": [
        {
            "domain_id": "1789d1",
            "enabled": true,
            "id": "263fd9",
            "links": {
                "self": "https://example.com/identity/v3/projects/263fd9"
            },
            "name": "Test Group"
        },
        {
            "domain_id": "1789d1",
            "enabled": true,
            "id": "50ef01",
            "links": {
                "self": "https://example.com/identity/v3/projects/50ef01"
            },
            "name": "Build Group"
        }
    ],
    "links": {
        "self": "https://example.com/identity/v3/auth/projects",
        "previous": null,
        "next": null
    }
}
GET
/v3/auth/domains

获取可用的域范围

新版本 3.3

此调用返回根据请求中提供的 X-Auth-Token 可用于定范围的域列表。

结构与列出域相同。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_domains

请求

参数

名称

入参

类型

描述

X-Auth-Token

标头

字符串

用于管理用户的有效身份验证令牌。

响应

参数

名称

入参

类型

描述

description

body

字符串

域的描述。

enabled

body

字符串

如果设置为 true,则域已启用。如果设置为 false,则域已禁用。

id

body

字符串

域的 ID。

links

body

对象

指向 domain 资源的链接。

name

body

字符串

域的名称。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "domains": [
        {
            "description": "my domain description",
            "enabled": true,
            "id": "1789d1",
            "links": {
                "self": "https://example.com/identity/v3/domains/1789d1"
            },
            "name": "my domain"
        },
        {
            "description": "description of my other domain",
            "enabled": true,
            "id": "43e8da",
            "links": {
                "self": "https://example.com/identity/v3/domains/43e8da"
            },
            "name": "another domain"
        }
    ],
    "links": {
        "self": "https://example.com/identity/v3/auth/domains",
        "previous": null,
        "next": null
    }
}
GET
/v3/auth/system

获取可用的系统范围

新版本 3.10

此调用返回根据请求中提供的 X-Auth-Token 可用于定范围的系统列表。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_system

请求

参数

名称

入参

类型

描述

X-Auth-Token

标头

字符串

用于管理用户的有效身份验证令牌。

响应

参数

名称

入参

类型

描述

links

body

对象

指向 domain 资源的链接。

系统

body

数组

基于角色分配要访问的系统列表。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

400 - 请求错误

请求中的某些内容无效。

示例
{
    "system": [
        {
            "all": true
        }
    ],
    "links": {
        "self": "https://example.com/identity/v3/auth/system"
    }
}

应用程序凭证

应用程序凭证提供了一种将用户的授权委托给应用程序的方式,而无需共享用户的密码身份验证。这是一种有用的安全措施,尤其是在用户的身份验证由外部源(如 LDAP 或单点登录服务)提供的情况下。用户不是将用户密码存储在配置文件中,而是为特定项目创建一个应用程序凭证,并具有用户在该项目上拥有的所有或部分角色分配,然后在配置文件中存储应用程序凭证标识符和密钥。

可以同时激活多个应用程序凭证,因此可以通过创建一个第二个凭证、逐个将应用程序转换为使用它,然后删除第一个凭证来轻松轮换应用程序凭证。

应用程序凭证受创建它们的用户的生命周期限制。如果用户被删除、禁用或失去项目上的角色分配,则应用程序凭证将被删除。

应用程序凭证的权限可以通过两种方式限制。首先,所有者可以指定应用程序凭证在获取项目令牌时可以承担的自身角色的子集。例如,如果用户在项目上具有 member 角色,则他们还具有隐含的角色 reader,并且可以仅授予应用程序凭证项目上的 reader 角色

"roles": [
    {"name": "reader"}
]

用户还可以通过使用访问规则来委托对其应用程序凭证的更细粒度的访问控制。例如,要创建一个仅限于在 nova 中创建服务器的应用程序凭证,用户可以添加以下访问规则

"access_rules": [
    {
        "path": "/v2.1/servers",
        "method": "POST",
        "service": "compute"
    }
]

应用程序凭证访问规则的 "path" 属性使用通配符语法使其更灵活。例如,要创建一个仅限于列出服务器 IP 地址的应用程序凭证,可以使用以下两种访问规则

"access_rules": [
    {
        "path": "/v2.1/servers/*/ips",
        "method": "GET",
        "service": "compute"
    }
]

或者等效地

"access_rules": [
    {
        "path": "/v2.1/servers/{server_id}/ips",
        "method": "GET",
        "service": "compute"
    }
]

在两种情况下,包含任何服务器 ID 的请求路径都将匹配访问规则。为了获得更大的灵活性,递归通配符 ** 表示包含任意数量的 / 的请求路径将被匹配。例如

"access_rules": [
    {
        "path": "/v2.1/**",
        "method": "GET",
        "service": "compute"
    }
]

将匹配 nova API 的版本 2.1。

为一种应用程序凭证创建的访问规则可以通过提供其 ID 给另一个应用程序凭证来重用,例如

"access_rules": [
    {
        "id": "abcdef"
    }
]
POST
/v3/auth/tokens

使用应用程序凭证进行身份验证

要使用应用程序凭证进行身份验证,请将“application_credential”指定为身份验证方法。不允许请求范围,因为范围是从应用程序凭证检索的。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens

请求

参数

名称

入参

类型

描述

identity

body

对象

一个 identity 对象。

方法

body

数组

身份验证方法。要使用应用程序凭证进行身份验证,请指定 application_credential

application_credential

body

对象

一个应用程序凭证对象。

id (可选)

body

字符串

用于身份验证的应用程序凭证的 ID。如果未提供,则必须通过其名称和所有用户来标识应用程序凭证。

name (可选)

body

字符串

用于身份验证的应用程序凭证的名称。如果提供,必须伴随一个用户对象。

secret

body

字符串

用于身份验证应用程序凭证的密钥。

user (可选)

body

对象

一个 user 对象,如果应用程序凭证通过名称而不是 ID 标识,则需要。

示例

可以使用 ID 标识应用程序凭证

{
    "auth": {
        "identity": {
            "methods": [
                "application_credential"
            ],
            "application_credential": {
                "id": "423f19a4ac1e4f48bbb4180756e6eb6c",
                "secret": "rEaqvJka48mpv"
            }
        }
    }
}

它也可以通过名称和用户对象来标识

{
    "auth": {
        "identity": {
            "methods": [
                "application_credential"
            ],
            "application_credential": {
                "name": "monitoring",
                "secret": "rEaqvJka48mpv",
                "user": {
                    "id": "423f19a4ac1e4f48bbb4180756e6eb6c"
                }
            }
        }
    }
}

响应

参数

名称

入参

类型

描述

X-Subject-Token

标头

字符串

身份验证令牌。身份验证响应在响应头中而不是响应体中返回令牌 ID。

令牌

body

对象

一个 token 对象。

application_credential

body

对象

应用程序凭证是否允许用于创建和删除其他应用程序凭证和信任。

application_credential.id

body

字符串

应用程序凭证的 ID。

application_credential.name

body

字符串

应用程序凭证的名称。

application_credential.restricted

body

布尔值

一个标志,指示应用程序凭据是否可用于创建或销毁其他应用程序凭据或信任关系。

audit_ids

body

数组

一个或两个审计 ID 的列表。审计 ID 是一个唯一的、随机生成的、URL 安全的字符串,可用于跟踪令牌。第一个审计 ID 是令牌的当前审计 ID。第二个审计 ID 仅存在于重新作用域的令牌中,并且是令牌重新作用域之前的审计 ID。重新作用域的令牌是指与相同或不同作用域交换的令牌。您可以使用这些审计 ID 来跟踪令牌或多个请求和端点上的令牌链的使用情况,而无需向非特权用户公开令牌 ID。

catalog

body

数组

一个 catalog 对象。

expires_at

body

字符串

令牌过期的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

一个 null 值表示令牌永不过期。

issued_at

body

字符串

令牌签发的时间和日期。

日期和时间戳格式为 ISO 8601

CCYY-MM-DDThh:mm:ss.sssZ

例如,2015-08-27T09:49:58.000000Z

方法

body

数组

身份验证方法,通常是 password(密码)、token(令牌)或其他方法。指示用于获取令牌的累积身份验证方法集。例如,如果令牌是通过密码身份验证获得的,则它包含 password。 稍后,如果令牌通过使用令牌身份验证方法一次或多次进行交换,随后创建的令牌可能在其 methods 属性中包含 passwordtoken。与多因素身份验证不同,methods 属性仅指示用于与令牌交换身份验证用户的方法。客户端负责确定身份验证因素的总数。

project

body

对象

一个 项目 对象

roles

body

数组

一个 role 对象列表

user

body

对象

一个 user 对象。

user.id (可选)

body

字符串

用户的 ID。如果您未指定用户名,则需要。

user.name (可选)

body

字符串

用户名。如果您未指定用户的 ID,则需要。如果您指定用户名,还必须指定域(通过 ID 或名称)。

示例
{
    "token": {
        "application_credential": {
          "id": "423f19a4ac1e4f48bbb4180756e6eb6c",
          "name": "monitoring",
          "restricted": true
        },
        "audit_ids": [
            "9JsolhssRzKfyayTIiCRUg"
        ],
        "catalog": [
            {
                "endpoints": [
                    {
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity",
                        "region": "RegionOne",
                        "interface": "admin",
                        "id": "81737f23cd8f45169fcd700cb658c8ad"
                    },
                    {
                        "region_id": "RegionOne",
                        "url": "http://example.com/identity",
                        "region": "RegionOne",
                        "interface": "public",
                        "id": "a7b9155184ed4607853304408e7e8d32"
                    }
                ],
                "type": "identity",
                "id": "408af8b8554248fc8d686bef54ae3bf6",
                "name": "keystone"
            }
        ],
        "expires_at": "2018-01-15T22:14:05.000000Z",
        "is_domain": false,
        "issued_at": "2018-01-15T21:14:05.000000Z",
        "methods": [
            "application_credential"
        ],
        "project": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "231c62fb0fbd485b995e8b060c3f0d98",
            "name": "demo"
        },
        "roles": [
            {
                "id": "df8b7e3bf6fb49e9ba19122da2bae916",
                "name": "Member"
            }
        ],
        "user": {
            "password_expires_at": null,
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "fd786d56402c4d1691372e7dee0d00b5",
            "name": "demo"
        }
    }
}

使用应用程序凭据创建的令牌将具有应用程序凭据指定的作用域和角色。

POST
/v3/users/{user_id}/application_credentials

创建应用程序凭据

为当前令牌的作用域项目中的用户创建应用程序凭据。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/application_credentials

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

拥有应用程序凭据的用户 ID。

application_credential

body

对象

一个应用程序凭证对象。

name

body

字符串

应用程序凭据的名称。必须是用户唯一的。

secret (可选)

body

字符串

将创建应用程序凭据的密钥。如果未提供,将生成一个密钥。

description (可选)

body

字符串

应用程序凭据用途的描述。

expires_at (可选)

body

字符串

应用程序凭据的可选到期时间。如果未设置,应用程序凭据将不会过期。

roles (可选)

body

数组

一个可选的角色对象列表,通过 ID 或名称标识。该列表只能包含用户在项目上分配的角色。如果未提供,应用程序凭据分配的角色将与当前令牌中的角色相同。

unrestricted (可选)

body

布尔值

一个可选标志,用于限制应用程序凭据是否可用于创建或销毁其他应用程序凭据或信任关系。默认为 false。

access_rules (可选)

body

列表

一个 access_rules 对象列表

示例
{
    "application_credential": {
        "name": "monitoring",
        "secret": "rEaqvJka48mpv",
        "description": "Application credential for monitoring.",
        "expires_at": "2018-02-27T18:30:59Z",
        "roles": [
            {"name": "Reader"}
        ],
        "access_rules": [
            {
                "path": "/v2.0/metrics",
                "method": "GET",
                "service": "monitoring"
            }
        ],
        "unrestricted": false
    }
}

响应

成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

参数

名称

入参

类型

描述

application_credential

body

对象

应用程序凭据对象。

id

body

字符串

应用程序凭证的 ID。

name

body

字符串

应用程序凭证的名称。

secret

body

字符串

应用程序凭据的密钥,由服务器生成或由用户提供。此密钥仅在创建请求的响应中显示一次。它不会被存储或再次显示。如果密钥丢失,必须创建新的应用程序凭据。

description

body

字符串

应用程序凭据用途的描述。

expires_at

body

字符串

应用程序凭据的到期时间(如果已指定)。

project_id

body

字符串

创建应用程序凭据的项目 ID,以及使用此应用程序凭据进行身份验证的请求的作用域。

roles

body

数组

与项目关联的一个或多个角色的列表。使用此应用程序凭据的令牌将具有相同的角色。

access_rules

body

列表

一个 access_rules 对象列表

unrestricted

body

布尔值

一个标志,指示应用程序凭据是否可用于创建或销毁其他应用程序凭据或信任关系。

links

body

对象

指向相关资源的链接。

示例
{
  "application_credential": {
    "description": "Application credential for monitoring.",
    "roles": [
      {
        "id": "6aff702516544aeca22817fd3bc39683",
        "domain_id": null,
        "name": "Reader"
      }
    ],
    "access_rules": [
      {
        "path": "/v2.0/metrics",
        "id": "07d719df00f349ef8de77d542edf010c",
        "service": "monitoring",
        "method": "GET"
      }
    ],
    "links": {
      "self": "http://example.com/identity/v3/users/fd786d56402c4d1691372e7dee0d00b5/application_credentials/58d61ff8e6e34accb35874016d1dba8b"
    },
    "expires_at": "2018-02-27T18:30:59.000000",
    "unrestricted": false,
    "secret": "rEaqvJka48mpv",
    "project_id": "231c62fb0fbd485b995e8b060c3f0d98",
    "id": "58d61ff8e6e34accb35874016d1dba8b",
    "name": "monitoring"
  }
}
GET
/v3/users/{user_id}/application_credentials

列出应用程序凭据

列出用户的全部应用程序凭据。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/application_credentials

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

拥有应用程序凭据的用户 ID。

name (可选)

查询

字符串

应用程序凭据的名称。必须是用户唯一的。

响应

成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

参数

名称

入参

类型

描述

application_credential

body

对象

应用程序凭据对象。

id

body

字符串

应用程序凭证的 ID。

name

body

字符串

应用程序凭证的名称。

description

body

字符串

应用程序凭据用途的描述。

expires_at

body

字符串

应用程序凭据的到期时间(如果已指定)。

project_id

body

字符串

创建应用程序凭据的项目 ID,以及使用此应用程序凭据进行身份验证的请求的作用域。

roles

body

数组

与项目关联的一个或多个角色的列表。使用此应用程序凭据的令牌将具有相同的角色。

access_rules

body

列表

一个 access_rules 对象列表

unrestricted

body

布尔值

一个标志,指示应用程序凭据是否可用于创建或销毁其他应用程序凭据或信任关系。

links

body

对象

指向资源集合的链接。

示例
{
    "links": {
        "self": "http://example.com/identity/v3/users/fd786d56402c4d1691372e7dee0d00b5/application_credentials",
        "previous": null,
        "next": null
    },
    "application_credentials": [
        {
            "description": "Application credential for backups.",
            "roles": [
                {
                    "domain_id": null,
                    "name": "Writer",
                    "id": "6aff702516544aeca22817fd3bc39683"
                }
            ],
            "access_rules": [
            ],
            "links": {
                "self": "http://example.com/identity/v3/users/fd786d56402c4d1691372e7dee0d00b5/application_credentials/308a7e905eee4071aac5971744c061f6"
            },
            "expires_at": "2018-02-27T18:30:59.000000",
            "unrestricted": false,
            "project_id": "231c62fb0fbd485b995e8b060c3f0d98",
            "id": "308a7e905eee4071aac5971744c061f6",
            "name": "backups"
        },
        {
            "description": "Application credential for monitoring.",
            "roles": [
                {
                    "id": "6aff702516544aeca22817fd3bc39683",
                    "domain_id": null,
                    "name": "Reader"
                }
            ],
            "access_rules": [
              {
                "path": "/v2.0/metrics",
                "id": "07d719df00f349ef8de77d542edf010c",
                "service": "monitoring",
                "method": "GET"
              }
            ],
            "links": {
                "self": "http://example.com/identity/v3/users/fd786d56402c4d1691372e7dee0d00b5/application_credentials/58d61ff8e6e34accb35874016d1dba8b"
            },
            "expires_at": "2018-02-27T18:30:59.000000",
            "unrestricted": false,
            "project_id": "231c62fb0fbd485b995e8b060c3f0d98",
            "id": "58d61ff8e6e34accb35874016d1dba8b",
            "name": "monitoring"
        }
    ]
}
GET
/v3/users/{user_id}/application_credentials/{application_credential_id}

显示应用程序凭据详细信息

显示应用程序凭据的详细信息。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/application_credentials

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

拥有应用程序凭据的用户 ID。

application_credential_id

路径

字符串

应用程序凭证的 ID。

响应

成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

参数

名称

入参

类型

描述

application_credential

body

对象

应用程序凭据对象。

id

body

字符串

应用程序凭证的 ID。

name

body

字符串

应用程序凭证的名称。

description

body

字符串

应用程序凭据用途的描述。

expires_at

body

字符串

应用程序凭据的到期时间(如果已指定)。

project_id

body

字符串

创建应用程序凭据的项目 ID,以及使用此应用程序凭据进行身份验证的请求的作用域。

roles

body

数组

与项目关联的一个或多个角色的列表。使用此应用程序凭据的令牌将具有相同的角色。

access_rules

body

列表

一个 access_rules 对象列表

unrestricted

body

布尔值

一个标志,指示应用程序凭据是否可用于创建或销毁其他应用程序凭据或信任关系。

links

body

对象

指向相关资源的链接。

示例
{
  "application_credential": {
    "description": "Application credential for monitoring.",
    "roles": [
      {
        "id": "6aff702516544aeca22817fd3bc39683",
        "domain_id": null,
        "name": "Reader"
      }
    ],
    "access_rules": [
      {
        "path": "/v2.0/metrics",
        "id": "07d719df00f349ef8de77d542edf010c",
        "service": "monitoring",
        "method": "GET"
      }
    ],
    "links": {
      "self": "http://example.com/identity/v3/users/fd786d56402c4d1691372e7dee0d00b5/application_credentials/58d61ff8e6e34accb35874016d1dba8b"
    },
    "expires_at": "2018-02-27T18:30:59.000000",
    "unrestricted": false,
    "project_id": "231c62fb0fbd485b995e8b060c3f0d98",
    "id": "58d61ff8e6e34accb35874016d1dba8b",
    "name": "monitoring"
  }
}
DELETE
/v3/users/{user_id}/application_credentials/{application_credential_id}

删除应用程序凭据

删除应用程序凭据。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/application_credentials

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

拥有应用程序凭据的用户 ID。

application_credential_id

路径

字符串

应用程序凭证的 ID。

响应

成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/users/{user_id}/access_rules

列出访问规则

列出用户的全部访问规则。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/access_rules

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

拥有访问规则的用户 ID。

响应

成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

参数

名称

入参

类型

描述

access_rules

body

列表

一个 access_rules 对象列表

id

body

字符串

访问规则的 ID

路径

body

字符串

应用程序凭据允许访问的 API 路径。可以使用命名通配符(如 {tag})或未命名的通配符 * 来匹配路径中的任何字符串,直到 / 为止,或者使用递归通配符 ** 来包含匹配路径中的 /

method

body

字符串

应用程序凭据允许用于给定 API 端点的请求方法。

服务

body

字符串

应用程序凭据允许访问的服务类型标识符。必须是服务目录中列出的服务类型,而不是服务的代码名称。

links

body

对象

指向资源集合的链接。

示例
{
  "links": {
    "self": "https://example.com/identity/v3/users/3e0716aefcad4b129a0f19f95ec9489e/access_rules",
    "previous": null,
    "next": null
  },
  "access_rules": [
    {
      "path": "/v2.0/metrics",
      "links": {
        "self": "https://example.com/identity/v3/access_rules/07d719df00f349ef8de77d542edf010c"
      },
      "id": "07d719df00f349ef8de77d542edf010c",
      "service": "monitoring",
      "method": "GET"
    }
  ]
}
GET
/v3/users/{user_id}/access_rules/{access_rule_id}

显示访问规则详细信息

显示访问规则的详细信息。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/access_rules

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

拥有访问规则的用户 ID。

access_rule_id

路径

字符串

访问规则的 ID。

响应

成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

参数

名称

入参

类型

描述

access_rules

body

列表

一个 access_rules 对象列表

id

body

字符串

访问规则的 ID

路径

body

字符串

应用程序凭据允许访问的 API 路径。可以使用命名通配符(如 {tag})或未命名的通配符 * 来匹配路径中的任何字符串,直到 / 为止,或者使用递归通配符 ** 来包含匹配路径中的 /

method

body

字符串

应用程序凭据允许用于给定 API 端点的请求方法。

服务

body

字符串

应用程序凭据允许访问的服务类型标识符。必须是服务目录中列出的服务类型,而不是服务的代码名称。

links

body

对象

指向资源集合的链接。

示例
{
  "access_rule": {
    "path": "/v2.0/metrics",
    "links": {
      "self": "https://example.com/identity/v3/access_rules/07d719df00f349ef8de77d542edf010c"
    },
    "id": "07d719df00f349ef8de77d542edf010c",
    "service": "monitoring",
    "method": "GET"
  }
}
DELETE
/v3/users/{user_id}/access_rules/{access_rule_id}

删除访问规则

删除访问规则。仍被应用程序凭据使用的访问规则无法删除。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/access_rules

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

拥有访问规则的用户 ID。

access_rule_id

路径

字符串

访问规则的 ID。

响应

成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

凭据

作为用户提交的身份验证凭据的交换,身份服务生成并返回一个令牌。令牌代表用户的经过身份验证的身份,并可选地授予对特定项目或域的授权。

您可以列出所有凭据,以及创建、显示凭据详细信息、更新和删除凭据。

POST
/v3/credentials

创建凭据

创建凭据。

以下示例演示如何创建 EC2 样式的凭据。凭据 blob 是一个字符串,其中包含一个 JSON 序列化的字典,其中包含 accesssecret 键。当您指定 ec2 类型时,需要此格式。要指定其他凭据,例如 access_key,请更改类型和数据 blob 的内容。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/credentials

请求

参数

名称

入参

类型

描述

credential

body

对象

一个 credential 对象。

project_id

body

字符串

项目的 ID。

type

body

字符串

凭据类型,例如 ec2cert。实现确定支持的类型列表。

blob

body

字符串

凭据本身,作为序列化的 blob。

user_id

body

字符串

拥有凭据的用户 ID。

示例
{
    "credential": {
        "blob": "{\"access\":\"181920\",\"secret\":\"secretKey\"}",
        "project_id": "731fc6f265cd486d900f16e84c5cb594",
        "type": "ec2",
        "user_id": "bb5476fd12884539b41d5a88f838d773"
    }
}

响应

参数

名称

入参

类型

描述

credential

body

对象

一个 credential 对象。

user_id

body

字符串

拥有凭据的用户 ID。

links

body

对象

用于 credential 资源的链接。

blob

body

字符串

凭据本身,作为序列化的 blob。

project_id

body

字符串

项目的 ID。

type

body

字符串

凭据类型,例如 ec2cert。实现确定支持的类型列表。

id

body

字符串

凭据的 UUID。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "credential": {
        "user_id": "bb5476fd12884539b41d5a88f838d773",
        "links": {
            "self": "http://example.com/identity/v3/credentials/3d3367228f9c7665266604462ec60029bcd83ad89614021a80b2eb879c572510"
        },
        "blob": "{\"access\":\"181920\",\"secret\":\"secretKey\"}",
        "project_id": "731fc6f265cd486d900f16e84c5cb594",
        "type": "ec2",
        "id": "3d3367228f9c7665266604462ec60029bcd83ad89614021a80b2eb879c572510"
    }
}
GET
/v3/credentials

列出凭据

列出所有凭据。

可选地,您可以将 user_idtype 查询参数包含在 URI 中,以根据用户或凭据类型过滤响应。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/credentials

请求

参数

名称

入参

类型

描述

user_id (可选)

查询

字符串

按用户 ID 过滤响应。

type (可选)

body

字符串

凭据类型,例如 ec2cert。实现确定支持的类型列表。

响应

参数

名称

入参

类型

描述

user_id

body

字符串

拥有凭据的用户 ID。

links

body

对象

用于 credentials 资源的链接。

blob

body

字符串

凭据本身,作为序列化的 blob。

credentials

body

数组

一个 credential 对象列表。

project_id

body

字符串

项目的 ID。

type

body

字符串

凭据类型,例如 ec2cert。实现确定支持的类型列表。

id

body

字符串

凭据的 UUID。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "credentials": [
        {
            "user_id": "bb5476fd12884539b41d5a88f838d773",
            "links": {
                "self": "http://example.com/identity/v3/credentials/207e9b76935efc03804d3dd6ab52d22e9b22a0711e4ada4ff8b76165a07311d7"
            },
            "blob": "{\"access\": \"a42a27755ce6442596b049bd7dd8a563\", \"secret\": \"71faf1d40bb24c82b479b1c6fbbd9f0c\", \"trust_id\": null}",
            "project_id": "6e01855f345f4c59812999b5e459137d",
            "type": "ec2",
            "id": "207e9b76935efc03804d3dd6ab52d22e9b22a0711e4ada4ff8b76165a07311d7"
        },
        {
            "user_id": "6f556708d04b4ea6bc72d7df2296b71a",
            "links": {
                "self": "http://example.com/identity/v3/credentials/2441494e52ab6d594a34d74586075cb299489bdd1e9389e3ab06467a4f460609"
            },
            "blob": "{\"access\": \"7da79ff0aa364e1396f067e352b9b79a\", \"secret\": \"7a18d68ba8834b799d396f3ff6f1e98c\", \"trust_id\": null}",
            "project_id": "1a1d14690f3c4ec5bf5f321c5fde3c16",
            "type": "ec2",
            "id": "2441494e52ab6d594a34d74586075cb299489bdd1e9389e3ab06467a4f460609"
        },
        {
            "user_id": "c14107e65d5c4a7f8894fc4b3fc209ff",
            "links": {
                "self": "http://example.com/identity/v3/credentials/3397b204b5f04c495bcdc8f34c8a39996f280f9172658241873e15f070ec79d7"
            },
            "blob": "{\"access\": \"db9c58a558534a10a070110de4f9f20c\", \"secret\": \"973e790b88db447ba6f93bca02bc745b\", \"trust_id\": null}",
            "project_id": "7396e43183db40dcbf40dd727637b548",
            "type": "ec2",
            "id": "3397b204b5f04c495bcdc8f34c8a39996f280f9172658241873e15f070ec79d7"
        },
        {
            "user_id": "915cc5f8cca6466aba6c6be06cbabfdf",
            "links": {
                "self": "http://example.com/identity/v3/credentials/352d5dd7a4aa19c4f2f23ee288bf65dc23a0bc293f40ffd2128ffe6a8cf3e871"
            },
            "blob": "{\"access\": \"817c6c3487a440c1a0b1d3f92b30ca37\", \"secret\": \"47d681117d1c46e69a0c9ec811dae2e9\", \"trust_id\": null}",
            "project_id": "2bf9767f9db949ee8364262a28a23062",
            "type": "ec2",
            "id": "352d5dd7a4aa19c4f2f23ee288bf65dc23a0bc293f40ffd2128ffe6a8cf3e871"
        },
        {
            "user_id": "bb5476fd12884539b41d5a88f838d773",
            "links": {
                "self": "http://example.com/identity/v3/credentials/3d3367228f9c7665266604462ec60029bcd83ad89614021a80b2eb879c572510"
            },
            "blob": "{\"access\":\"181920\",\"secret\":\"secretKey\"}",
            "project_id": "731fc6f265cd486d900f16e84c5cb594",
            "type": "ec2",
            "id": "3d3367228f9c7665266604462ec60029bcd83ad89614021a80b2eb879c572510"
        },
        {
            "user_id": "bb5476fd12884539b41d5a88f838d773",
            "links": {
                "self": "http://example.com/identity/v3/credentials/6b7d803fc03b85866904b6b79e0a8fa1f4013b584163b4477eed96717eb402c0"
            },
            "blob": "{\"access\": \"f2ba45670b504a518b46e920d760fde2\", \"secret\": \"bf7fff2b3a844730b2db793411756e55\", \"trust_id\": null}",
            "project_id": "731fc6f265cd486d900f16e84c5cb594",
            "type": "ec2",
            "id": "6b7d803fc03b85866904b6b79e0a8fa1f4013b584163b4477eed96717eb402c0"
        },
        {
            "user_id": "2b657f6742ac416697e6821b3b2ee785",
            "links": {
                "self": "http://example.com/identity/v3/credentials/7d391b869631e5c4836708ea3bb3e0a5cbe0481201b5f0ddd5685ad3b3faa564"
            },
            "blob": "{\"access\": \"a1525da4e7c0438ebf3058372d637b59\", \"secret\": \"c9165d2542b141e8b2a1ff61a5f5487c\", \"trust_id\": null}",
            "project_id": "2bf9767f9db949ee8364262a28a23062",
            "type": "ec2",
            "id": "7d391b869631e5c4836708ea3bb3e0a5cbe0481201b5f0ddd5685ad3b3faa564"
        },
        {
            "user_id": "bb5476fd12884539b41d5a88f838d773",
            "links": {
                "self": "http://example.com/identity/v3/credentials/7ef4faa904ae7b8b4ddc7bad15b05ee359dad7d7a9b82861d4ad92fdbbb2eb4e"
            },
            "blob": "{\"access\": \"7d7559359b57419eb5f5f5dcd65ab57d\", \"secret\": \"570652bcf8c2483c86eb29e9734eed3c\", \"trust_id\": null}",
            "project_id": "731fc6f265cd486d900f16e84c5cb594",
            "type": "ec2",
            "id": "7ef4faa904ae7b8b4ddc7bad15b05ee359dad7d7a9b82861d4ad92fdbbb2eb4e"
        },
        {
            "user_id": "aedb193e9bb8400485f8d8426f7a031f",
            "links": {
                "self": "http://example.com/identity/v3/credentials/9c1c428d8e0e8338a5e16489ecfff9962f2b00f984ce4c7e9015e4003f478df8"
            },
            "blob": "{\"access\": \"b3a6e5f4427c47e9b202264d91a19e49\", \"secret\": \"d9eb470f503f4b46932de38db7a79402\", \"trust_id\": null}",
            "project_id": "a2672ecf9dd34c6980448b25a47e0947",
            "type": "ec2",
            "id": "9c1c428d8e0e8338a5e16489ecfff9962f2b00f984ce4c7e9015e4003f478df8"
        },
        {
            "user_id": "c14107e65d5c4a7f8894fc4b3fc209ff",
            "links": {
                "self": "http://example.com/identity/v3/credentials/e2c35ac2becb0fca3c3c2f035692a4f46a9cbf3b6e86c8a47f5aafe837d78a05"
            },
            "blob": "{\"access\": \"1ed843b1bd4a409f9562400085adbaa4\", \"secret\": \"236ab24db1f04ec995fcf618ed4fc0f5\", \"trust_id\": null}",
            "project_id": "6e01855f345f4c59812999b5e459137d",
            "type": "ec2",
            "id": "e2c35ac2becb0fca3c3c2f035692a4f46a9cbf3b6e86c8a47f5aafe837d78a05"
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/credentials",
        "previous": null,
        "next": null
    }
}
GET
/v3/credentials/{credential_id}

显示凭据详细信息

显示凭据的详细信息。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/credential

请求

参数

名称

入参

类型

描述

credential_id

路径

字符串

凭据的 UUID。

响应

参数

名称

入参

类型

描述

credential

body

对象

一个 credential 对象。

user_id

body

字符串

拥有凭据的用户 ID。

links

body

对象

用于 credential 资源的链接。

blob

body

字符串

凭据本身,作为序列化的 blob。

project_id

body

字符串

项目的 ID。

type

body

字符串

凭据类型,例如 ec2cert。实现确定支持的类型列表。

id

body

字符串

凭据的 UUID。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "credential": {
        "user_id": "bb5476fd12884539b41d5a88f838d773",
        "links": {
            "self": "http://example.com/identity/v3/credentials/207e9b76935efc03804d3dd6ab52d22e9b22a0711e4ada4ff8b76165a07311d7"
        },
        "blob": "{\"access\": \"a42a27755ce6442596b049bd7dd8a563\", \"secret\": \"71faf1d40bb24c82b479b1c6fbbd9f0c\", \"trust_id\": null}",
        "project_id": "6e01855f345f4c59812999b5e459137d",
        "type": "ec2",
        "id": "207e9b76935efc03804d3dd6ab52d22e9b22a0711e4ada4ff8b76165a07311d7"
    }
}
PATCH
/v3/credentials/{credential_id}

更新凭据

更新凭据。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/credential

请求

参数

名称

入参

类型

描述

credential_id

路径

字符串

凭据的 UUID。

credential

body

对象

一个 credential 对象。

project_id

body

字符串

项目的 ID。

type (可选)

body

字符串

凭据类型,例如 ec2cert。实现确定支持的类型列表。

blob (可选)

body

字符串

凭据本身,作为序列化的 blob。

user_id (可选)

body

字符串

拥有凭据的用户 ID。

示例
{
    "credential": {
        "blob": "{\"access\":\"181920\",\"secret\":\"secretKey\"}",
        "project_id": "731fc6f265cd486d900f16e84c5cb594",
        "type": "ec2",
        "user_id": "bb5476fd12884539b41d5a88f838d773"
    }
}

响应

参数

名称

入参

类型

描述

credential

body

对象

一个 credential 对象。

user_id

body

字符串

拥有凭据的用户 ID。

links

body

对象

用于 credential 资源的链接。

blob

body

字符串

凭据本身,作为序列化的 blob。

project_id

body

字符串

项目的 ID。

type

body

字符串

凭据类型,例如 ec2cert。实现确定支持的类型列表。

id

body

字符串

凭据的 UUID。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "credential": {
        "user_id": "bb5476fd12884539b41d5a88f838d773",
        "links": {
            "self": "http://example.com/identity/v3/credentials/207e9b76935efc03804d3dd6ab52d22e9b22a0711e4ada4ff8b76165a07311d7"
        },
        "blob": "{\"access\":\"181920\",\"secret\":\"secretKey\"}",
        "project_id": "731fc6f265cd486d900f16e84c5cb594",
        "type": "ec2",
        "id": "207e9b76935efc03804d3dd6ab52d22e9b22a0711e4ada4ff8b76165a07311d7"
    }
}
DELETE
/v3/credentials/{credential_id}

删除凭据

删除凭据。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/credential

请求

参数

名称

入参

类型

描述

credential_id

路径

字符串

凭据的 UUID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

领域

域是用户、组和项目的集合。每个组和项目都由恰好一个域拥有。

每个域定义一个命名空间,其中存在某些 API 可见的名称属性,这会影响这些名称必须全局唯一还是在域内唯一。在 Identity API 中,这些属性的唯一性如下

  • 域名称。在所有域中全局唯一。

  • 角色名称。在其拥有域内唯一。

  • 用户名。在其拥有域内唯一。

  • 项目名称。在其拥有域内唯一。

  • 组名称。在其拥有域内唯一。

GET
/v3/domains

列出域

列出所有域。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domains

请求

参数

名称

入参

类型

描述

name (可选)

查询

字符串

按域名称过滤响应。

enabled(可选)

查询

字符串

如果设置为 true,则仅返回启用的域,如果设置为 false,则仅返回禁用的域。任何其他值(包括没有值)都将被解释为 true。

limit (可选)

查询

整数

请求项目大小。返回最多限制值数量的项目。使用 limit 参数进行初始有限请求,并在后续有限请求中使用响应中最后一个项目看到的 ID 作为 marker 参数值。

marker (可选)

查询

字符串

最后一个项目看到的 ID。使用 limit 参数进行初始有限请求,并在后续有限请求中使用响应中最后一个项目看到的 ID 作为 marker 参数值

响应

参数

名称

入参

类型

描述

domains

body

数组

一个 domain 对象列表

description

body

字符串

域的描述。

enabled

body

字符串

如果设置为 true,则域已启用。如果设置为 false,则域已禁用。

id

body

字符串

域的 ID。

links

body

对象

指向 domain 资源的链接。

name

body

字符串

域的名称。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "domains": [
        {
            "description": "Used for swift functional testing",
            "enabled": true,
            "id": "5a75994a383c449184053ff7270c4e91",
            "links": {
                "self": "http://example.com/identity/v3/domains/5a75994a383c449184053ff7270c4e91"
            },
            "name": "swift_test"
        },
        {
            "description": "Owns users and tenants (i.e. projects) available on Identity API v2.",
            "enabled": true,
            "id": "default",
            "links": {
                "self": "http://example.com/identity/v3/domains/default"
            },
            "name": "Default"
        }
    ],
    "links": {
        "next": null,
        "previous": null,
        "self": "http://example.com/identity/v3/domains"
    }
}
POST
/v3/domains

创建域

创建域。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domains

请求

参数

名称

入参

类型

描述

domain

body

对象

一个 domain 对象

explicit_domain_id (可选)

body

字符串

域 ID。以这种方式创建的域将不使用自动生成的 ID,而是使用传入的 ID。传入的标识符必须符合现有的 ID 生成方案:没有破折号的 UUID4。

enabled(可选)

body

字符串

如果设置为 true,则域将创建为启用状态。如果设置为 false,则域将创建为禁用状态。默认值为 true

用户只能对启用的域(及其任何项目)进行授权。此外,如果拥有它们的域也已启用,用户才能进行身份验证。禁用域会阻止这两件事。

description (可选)

body

字符串

域的描述。

name

body

字符串

域的名称。

options (可选)

body

对象

域的资源选项。可用的资源选项是 immutable

示例
{
    "domain": {
        "description": "Domain description",
        "enabled": true,
        "name": "myDomain"
    }
}

响应

参数

名称

入参

类型

描述

domain

body

对象

一个 domain 对象

description

body

字符串

域的描述。

enabled

body

字符串

如果设置为 true,则域已启用。如果设置为 false,则域已禁用。

id

body

字符串

域的 ID。

links

body

对象

指向 domain 资源的链接。

name

body

字符串

域的名称。

选项

body

对象

角色的资源选项。可用的资源选项是 immutable

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

GET
/v3/domains/{domain_id}

显示域详情

显示域的详情。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domains

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

响应

参数

名称

入参

类型

描述

domain

body

对象

一个 domain 对象

description

body

字符串

域的描述。

enabled

body

字符串

如果设置为 true,则域已启用。如果设置为 false,则域已禁用。

id

body

字符串

域的 ID。

links

body

对象

指向 domain 资源的链接。

name

body

字符串

域的名称。

选项

body

对象

角色的资源选项。可用的资源选项是 immutable

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "domain": {
        "description": "Owns users and tenants (i.e. projects) available on Identity API v2.",
        "enabled": true,
        "id": "default",
        "links": {
            "self": "http://example.com/identity/v3/domains/default"
        },
        "name": "Default",
        "options": {}
    }
}
PATCH
/v3/domains/{domain_id}

更新域

更新一个域。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

domain

body

对象

一个 domain 对象

enabled(可选)

body

字符串

如果设置为 true,域已启用。如果设置为 false,域已禁用。默认值为 true

用户只能针对启用的域(及其所有项目)进行授权。此外,如果拥有用户的域也已启用,用户才能进行身份验证。禁用域会阻止这两项操作。禁用域后,针对该域授权的所有令牌都将失效。但是,如果重新启用该域,只要这些令牌没有过期,它们将再次有效。

description (可选)

body

字符串

域的新描述。

name (可选)

body

字符串

域的新名称。

options (可选)

body

对象

域的资源选项。可用的资源选项是 immutable

示例
{
    "domain": {
        "description": "Owns users and projects on Identity API v2."
    }
}

响应

参数

名称

入参

类型

描述

domain

body

对象

一个 domain 对象

description

body

字符串

域的描述。

enabled

body

字符串

如果设置为 true,则域已启用。如果设置为 false,则域已禁用。

id

body

字符串

域的 ID。

links

body

对象

指向 domain 资源的链接。

name

body

字符串

域的名称。

选项

body

对象

角色的资源选项。可用的资源选项是 immutable

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "domain": {
        "links": {
            "self": "http://example.com/identity/v3/domains/default"
        },
        "enabled": true,
        "description": "Owns users and projects on Identity API v2.",
        "name": "Default",
        "id": "default",
        "options": {}
    }
}
DELETE
/v3/domains/{domain_id}

删除域

删除一个域。为了尽量减少意外删除域的风险,必须首先使用更新域方法禁用该域。

删除域时,此调用还会删除其拥有的所有实体,例如用户、组和项目,以及与这些实体相关的任何凭证和已授予的角色。

如果尝试删除启用的域,此调用将返回 Forbidden (403) 响应代码。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

域配置

您可以管理特定于域的配置选项。

特定于域的配置选项在它们的组对象中构建。API仅支持 identityldap 组。这些组会覆盖 Identity 服务器存储用户和组的默认配置设置。

您可以使用 HTTP PUT、PATCH 和 DELETE 方法创建、更新和删除特定于域的配置选项。更新时,只需包含正在更新的选项即可。

要创建选项,请使用 PUT 方法。Identity API 不会返回被认为敏感的选项,尽管您可以创建和更新这些选项。当前被认为敏感的唯一选项是 ldap 组中的 password 选项。

API 允许您将敏感选项包含在非敏感选项中。例如,您可以将密码包含在 url 选项中。

如果尝试为 identityldap 组以外的组创建或更新配置选项,将返回 Forbidden (403) 响应代码。

有关如何将 Identity 服务与 LDAP 集成的信息,请参阅 将 Identity 与 LDAP 集成

GET
/v3/domains/config/default

显示默认配置设置

可以检索可以覆盖的选项的默认配置设置。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config_default

响应

参数

名称

入参

类型

描述

config

body

对象

一个 config 对象。

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

url

body

字符串

LDAP URL。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

driver

body

字符串

Identity 后端驱动程序。

示例
{
    "config": {
        "identity": {
            "driver": "ldap"
        },
        "ldap": {
            "url": "ldap://",
            "user": "",
            "suffix": "cn=example,cn=com",
            ....
        }
    }
}
GET
/v3/domains/config/{group}/default

显示组的默认配置

读取特定组的默认配置设置。

API 仅支持 identityldap 组。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config_default

请求

参数

名称

入参

类型

描述

group

路径

字符串

组 ID。

响应

参数

名称

入参

类型

描述

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

url

body

字符串

LDAP URL。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

driver

body

字符串

Identity 后端驱动程序。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "ldap": {
        "url": "ldap://",
        "user": "",
        "suffix": "cn=example,cn=com".
        ....
    }
}
GET
/v3/domains/config/{group}/{option}/default

显示组的默认选项

读取组中选项的默认配置设置。

API 仅支持 identityldap 组。对于 ldap 组,有效值为 urluser_tree_dn。对于 identity 组,有效值为 driver

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config_default

请求

参数

名称

入参

类型

描述

group

路径

字符串

组 ID。

option

路径

字符串

选项名称。对于 ldap 组,有效值为 urluser_tree_dn。对于 identity 组,有效值为 driver

响应

参数

名称

入参

类型

描述

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "driver": "ldap"
}
GET
/v3/domains/{domain_id}/config/{group}/{option}

显示域组选项配置

显示域组选项配置的详情。

API 仅支持 identityldap 组。对于 ldap 组,有效值为 urluser_tree_dn。对于 identity 组,有效值为 driver

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config_default

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group

路径

字符串

组 ID。

option

路径

字符串

选项名称。对于 ldap 组,有效值为 urluser_tree_dn。对于 identity 组,有效值为 driver

响应

参数

名称

入参

类型

描述

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

config

body

对象

一个 config 对象。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "url": "http://myldap/root"
}
PATCH
/v3/domains/{domain_id}/config/{group}/{option}

更新域组选项配置

更新域组选项配置。

API 仅支持 identityldap 组。对于 ldap 组,有效值为 urluser_tree_dn。对于 identity 组,有效值为 driver

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config_default

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group

路径

字符串

组 ID。

option

路径

字符串

选项名称。对于 ldap 组,有效值为 urluser_tree_dn。对于 identity 组,有效值为 driver

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

示例
{
    "url": "http://myldap/my_other_root"
}

响应

参数

名称

入参

类型

描述

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

config

body

对象

一个 config 对象。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "config": {
        "identity": {
            "driver": "ldap"
        },
        "ldap": {
            "url": "http://myldap/my_other_root",
            "user_tree_dn": "ou=Users,dc=my_new_root,dc=org"
        }
    }
}
DELETE
/v3/domains/{domain_id}/config/{group}/{option}

删除域组选项配置

删除域组选项配置。

API 仅支持 identityldap 组。对于 ldap 组,有效值为 urluser_tree_dn。对于 identity 组,有效值为 driver

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config_default

请求

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group

路径

字符串

组 ID。

option

路径

字符串

选项名称。对于 ldap 组,有效值为 urluser_tree_dn。对于 identity 组,有效值为 driver

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

GET
/v3/domains/{domain_id}/config/{group}

显示域组配置

显示域组配置的详情。

API 仅支持 identityldap 组。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config_default

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group

路径

字符串

组 ID。

响应

参数

名称

入参

类型

描述

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

config

body

对象

一个 config 对象。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "ldap": {
        "url": "http://myldap/root",
        "user_tree_dn": "ou=Users,dc=root,dc=org"
    }
}
PATCH
/v3/domains/{domain_id}/config/{group}

更新域组配置

更新域组配置。

API 仅支持 identityldap 组。如果尝试设置其他组的配置选项,此调用将以 Forbidden (403) 响应代码失败。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config_default

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group

路径

字符串

组 ID。

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

config

body

对象

一个 config 对象。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

示例
{
    "config": {
        "ldap": {
            "url": "http://myldap/my_new_root",
            "user_tree_dn": "ou=Users,dc=my_new_root,dc=org"
        }
    }
}

响应

参数

名称

入参

类型

描述

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

config

body

对象

一个 config 对象。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "config": {
        "identity": {
            "driver": "ldap"
        },
        "ldap": {
            "url": "http://myldap/my_new_root",
            "user_tree_dn": "ou=Users,dc=my_new_root,dc=org"
        }
    }
}
DELETE
/v3/domains/{domain_id}/config/{group}

删除域组配置

删除域组配置。

API 仅支持 identityldap 组。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config_default

请求参数

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group

路径

字符串

组 ID。

响应

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

PUT
/v3/domains/{domain_id}/config

创建域配置

创建域配置。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

config

body

对象

一个 config 对象。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

示例
{
    "config": {
        "identity": {
            "driver": "ldap"
        },
        "ldap": {
            "url": "ldap://myldap.com:389/",
            "user_tree_dn": "ou=Users,dc=my_new_root,dc=org"
        }
    }
}

响应

参数

名称

入参

类型

描述

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

config

body

对象

一个 config 对象。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

状态码
成功

代码

原因

200 - 正常

请求成功。

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "config": {
        "identity": {
            "driver": "ldap"
        },
        "ldap": {
            "url": "ldap://myldap.com:389/",
            "user_tree_dn": "ou=Users,dc=my_new_root,dc=org"
        }
    }
}
GET
/v3/domains/{domain_id}/config

显示域配置

显示域配置的详情。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

响应

参数

名称

入参

类型

描述

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

config

body

对象

一个 config 对象。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "config": {
        "identity": {
            "driver": "ldap"
        },
        "ldap": {
            "url": "http://myldap/root",
            "user_tree_dn": "ou=Users,dc=root,dc=org"
        }
    }
}
PATCH
/v3/domains/{domain_id}/config

更新域配置

更新域配置。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

config

body

对象

一个 config 对象。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

示例
{
    "config": {
        "ldap": {
            "url": "http://myldap/my_new_root",
            "user_tree_dn": "ou=Users,dc=my_new_root,dc=org"
        }
    }
}

响应

参数

名称

入参

类型

描述

url

body

字符串

LDAP URL。

driver

body

字符串

Identity 后端驱动程序。

ldap

body

对象

一个 ldap 对象。需要设置 LDAP 组配置选项。

config

body

对象

一个 config 对象。

user_tree_dn

body

字符串

LDAP 的基本可区分名称 (DN),从这里可以访问所有用户。例如,ou=Users,dc=root,dc=org

identity

body

对象

一个 identity 对象。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "config": {
        "identity": {
            "driver": "ldap"
        },
        "ldap": {
            "url": "http://myldap/my_new_root",
            "user_tree_dn": "ou=Users,dc=my_new_root,dc=org"
        }
    }
}
DELETE
/v3/domains/{domain_id}/config

删除域配置

删除域配置。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_config

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

组织

组是用户的集合。每个组都归域所有。

您可以使用组来简化管理用户角色分配的任务。将角色分配给项目或域上的组等同于将该角色分配给该项目或域上的每个组员。

取消将角色从组中取消分配时,该角色将自动从该组的任何成员中取消分配。验证这些用户到相关项目或域的任何令牌都会被撤销。

与用户一样,如果没有分配任何角色的组,从 OpenStack 服务的角度来看是无用的,并且无法访问任何资源。但是,允许存在没有角色分配的组,以便在将其映射到项目和域之前,从外部源获取或加载用户和组。

GET
/v3/groups

列出组

列出组。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/groups

请求

参数

名称

入参

类型

描述

name (可选)

查询

字符串

按组名过滤响应。

domain_id (可选)

查询

字符串

按域 ID 过滤响应。

limit (可选)

查询

整数

请求项目大小。返回最多限制值数量的项目。使用 limit 参数进行初始有限请求,并在后续有限请求中使用响应中最后一个项目看到的 ID 作为 marker 参数值。

marker (可选)

查询

字符串

最后一个项目看到的 ID。使用 limit 参数进行初始有限请求,并在后续有限请求中使用响应中最后一个项目看到的 ID 作为 marker 参数值

sort_key (可选)

查询

字符串

按属性对资源进行排序

sort_dir (可选)

查询

字符串

排序方向。有效值为 asc(升序)或 desc(降序)。

响应

参数

名称

入参

类型

描述

links

body

对象

指向资源集合的链接。

groups

body

数组

一个 group 对象列表

description

body

字符串

组的描述。

domain_id

body

字符串

组的域 ID。

id

body

字符串

组的 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

组的名称。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "links": {
        "self": "http://example.com/identity/v3/groups",
        "previous": null,
        "next": null
    },
    "groups": [
        {
            "description": "non-admin group",
            "domain_id": "default",
            "id": "96372bbb152f475aa37e9a76a25a029c",
            "links": {
                "self": "http://example.com/identity/v3/groups/96372bbb152f475aa37e9a76a25a029c"
            },
            "name": "nonadmins"
        },
        {
            "description": "openstack admin group",
            "domain_id": "default",
            "id": "9ce0ad4e58a84d7a97b92f7955d10c92",
            "links": {
                "self": "http://example.com/identity/v3/groups/9ce0ad4e58a84d7a97b92f7955d10c92"
            },
            "name": "admins"
        }
    ]
}
POST
/v3/groups

创建组

创建一个组。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/groups

请求

参数

名称

入参

类型

描述

group

body

对象

一个 group 对象

description (可选)

body

字符串

组的描述。

domain_id (可选)

body

字符串

组的域 ID。如果请求中未提供域 ID,身份服务将尝试从请求中使用的令牌中提取域 ID。请注意,这需要使用域范围的令牌。

name

body

字符串

组的名称。

示例
{
    "group": {
        "description": "Contract developers",
        "domain_id": "default",
        "name": "Contract developers"
    }
}

响应

参数

名称

入参

类型

描述

group

body

对象

一个 group 对象

description

body

字符串

组的描述。

domain_id

body

字符串

组的域 ID。

id

body

字符串

组的 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

组的名称。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

409 - Conflict

此操作与此资源的另一个操作冲突。

示例
{
    "group": {
        "description": "Contract developers",
        "domain_id": "default",
        "id": "c0d675eac29945ad9dfd08aa1bb75751",
        "links": {
            "self": "http://example.com/identity/v3/groups/c0d675eac29945ad9dfd08aa1bb75751"
        },
        "name": "Contract developers"
    }
}
GET
/v3/groups/{group_id}

显示组详情

显示组的详细信息。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/group

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

响应

参数

名称

入参

类型

描述

group

body

对象

一个 group 对象

description

body

字符串

组的描述。

domain_id

body

字符串

组的域 ID。

id

body

字符串

组的 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

组的名称。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "group": {
        "description": "Contract developers",
        "domain_id": "default",
        "id": "c0d675eac29945ad9dfd08aa1bb75751",
        "links": {
            "self": "http://example.com/identity/v3/groups/c0d675eac29945ad9dfd08aa1bb75751"
        },
        "name": "Contract developers"
    }
}
PATCH
/v3/groups/{group_id}

更新分组

更新组。

如果后端驱动程序不支持此功能,则调用将返回 Not Implemented (501) 响应代码。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/group

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

group

body

对象

一个 group 对象

description (可选)

body

字符串

组的新描述。

domain_id (可选)

body

字符串

组的新域 ID。更改组的域的功能现已弃用,将在后续版本中删除。它在大多数身份服务实现中默认情况下已禁用。

name (可选)

body

字符串

组的新名称。

示例
{
    "group": {
        "description": "Contract developers 2016",
        "name": "Contract developers 2016"
    }
}

响应

参数

名称

入参

类型

描述

group

body

对象

一个 group 对象

description

body

字符串

组的描述。

domain_id

body

字符串

组的域 ID。

id

body

字符串

组的 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

组的名称。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

501 - 未实现

服务器无法识别请求方法,或者缺乏满足请求的能力。

示例
{
    "group": {
        "description": "Contract developers 2016",
        "domain_id": "default",
        "id": "c0d675eac29945ad9dfd08aa1bb75751",
        "links": {
            "self": "http://example.com/identity/v3/groups/c0d675eac29945ad9dfd08aa1bb75751"
        },
        "name": "Contract developers 2016"
    }
}
DELETE
/v3/groups/{group_id}

删除分组

删除组。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/group

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/groups/{group_id}/users

列出组中的用户

列出属于某个组的用户。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/group_users

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

password_expires_at (可选)

查询

字符串

根据用户密码是否过期过滤结果。查询应包含一个 operator 和一个 timestamp,用冒号 (:) 分隔两者,例如

password_expires_at={operator}:{timestamp}
  • 有效操作符为:ltltegtgteeqneq

    • lt:过期时间早于时间戳

    • lte:过期时间小于或等于时间戳

    • gt:过期时间晚于时间戳

    • gte:过期时间大于或等于时间戳

    • eq:过期时间等于时间戳

    • neq:过期时间不等于时间戳

  • 有效时间戳的格式为:YYYY-MM-DDTHH:mm:ssZ

例如

/v3/users?password_expires_at=lt:2016-12-08T22:02:00Z

例如,将返回密码在时间戳 (2016-12-08T22:02:00Z) 之前过期的用户列表。

响应

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "links": {
        "self": "http://example.com/identity/v3/groups/9ce0ad4e58a84d7a97b92f7955d10c92/users",
        "previous": null,
        "next": null
    },
    "users": [
        {
            "domain_id": "default",
            "description": null,
            "enabled": true,
            "id": "acd565a08293c1e48bc0dd0d72ad5d5d"
            "name": "Henry",
            "links": {
                "self": "http://example.com/identity/v3/users/acd565a08293c1e48bc0dd0d72ad5d5d"
            }
        },
        {
            "domain_id": "default",
            "description": null,
            "enabled": true,
            "id": "fff603a0829d41e48bc0dd0d72ad61ce",
            "name": "Paul",
            "links": {
                "self": "http://example.com/identity/v3/users/fff603a0829d41e48bc0dd0d72ad61ce"
            },
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    ]
}
PUT
/v3/groups/{group_id}/users/{user_id}

将用户添加到组

将用户添加到组。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/group_user

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

group_id

路径

字符串

组 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

HEAD
/v3/groups/{group_id}/users/{user_id}

检查用户是否属于组

验证用户是否属于某个组。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/group_user

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

group_id

路径

字符串

组 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

DELETE
/v3/groups/{group_id}/users/{user_id}

从组中删除用户

从组中删除用户。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/group_user

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

group_id

路径

字符串

组 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

OS-INHERIT

启用项目从其所有域或层次结构中较高的项目继承角色分配。

(从 API v3.4 开始) OS-INHERIT 扩展允许从项目和域继承。要访问项目继承,身份服务服务器必须运行至少 API v3.4。

PUT
/v3/OS-INHERIT/domains/{domain_id}/users/{user_id}/roles/{role_id}/inherited_to_projects

将角色分配给由域拥有的项目中的用户

将角色分配给域拥有的项目中的用户。

继承的角色仅应用于拥有的项目(现有项目和未来的项目),并且不会显示为域范围令牌中的角色。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/domain_user_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

role_id

路径

字符串

角色 ID。

user_id

路径

字符串

用户 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

PUT
/v3/OS-INHERIT/domains/{domain_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects

将角色分配给由域拥有的项目中的组

继承的角色仅应用于拥有的项目(现有项目和未来的项目),并且不会显示为域范围令牌中的角色。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/domain_group_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group_id

路径

字符串

角色 ID。

role_id

路径

字符串

用户 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

GET
/v3/OS-INHERIT/domains/{domain_id}/users/{user_id}/roles/inherited_to_projects

列出用户在域上继承的项目角色

该列表仅包含指定为在该域内的项目继承的角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/domain_user_roles_inherited_to_projects

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

user_id

路径

字符串

用户 ID。

响应

状态码
成功

代码

原因

200 - 正常

请求成功。

示例
{
    "roles": [
        {
            "id": "91011",
            "links": {
                "self": "http://example.com/identity/v3/roles/91011"
            },
            "name": "admin"
        },
        {
            "id": "91011",
            "links": {
                "self": "http://example.com/identity/v3/roles/91011"
            },
            "name": "admin"
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/OS-INHERIT/domains/1234/users/5678/roles/inherited_to_projects",
        "previous": null,
        "next": null
    }
}
GET
/v3/OS-INHERIT/domains/{domain_id}/groups/{group_id}/roles/inherited_to_projects

列出组在域上继承的项目角色

该列表仅包含指定为在该域内的项目继承的角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/domain_group_roles_inherited_to_projects

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group_id

路径

字符串

组 ID。

响应

状态码
成功

代码

原因

200 - 正常

请求成功。

示例

{
    "roles": [
        {
            "id": "91011",
            "links": {
                "self": "http://example.com/identity/v3/roles/91011"
            },
            "name": "admin"
        },
        {
            "id": "91011",
            "links": {
                "self": "http://example.com/identity/v3/roles/91011"
            },
            "name": "admin"
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/OS-INHERIT/domains/1234/groups/5678/roles/inherited_to_projects",
        "previous": null,
        "next": null
    }
}
HEAD
/v3/OS-INHERIT/domains/{domain_id}/users/{user_id}/roles/{role_id}/inherited_to_projects

检查用户是否在域上具有继承的项目角色

检查用户是否在域中具有继承的项目角色。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/domain_user_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

role_id

路径

字符串

角色 ID。

user_id

路径

字符串

用户 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

HEAD
/v3/OS-INHERIT/domains/{domain_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects

检查组是否在域上具有继承的项目角色

检查组是否在域中具有继承的项目角色。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/domain_group_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

DELETE
/v3/OS-INHERIT/domains/{domain_id}/users/{user_id}/roles/{role_id}/inherited_to_projects

撤销域上用户继承的项目角色

撤销域中用户的继承项目角色。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/domain_user_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

role_id

路径

字符串

角色 ID。

user_id

路径

字符串

用户 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

DELETE
/v3/OS-INHERIT/domains/{domain_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects

撤销域上组的继承项目角色

撤销域中组的继承项目角色。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/domain_group_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

PUT
/v3/OS-INHERIT/projects/{project_id}/users/{user_id}/roles/{role_id}/inherited_to_projects

将角色分配给子树中的项目的用户

继承的角色分配锚定到项目,并应用于项目层次结构中的子树(现有和未来的项目)。

  • 注意:继承的角色不应用于项目本身,仅应用于其子树项目。

  • 注意:用户可以在同一项目上拥有常规(非继承)和继承的角色分配。

  • 注意:请求不需要主体,即使提供也会被忽略。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/project_user_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

project_id

body

字符串

项目的 ID。

role_id

路径

字符串

角色 ID。

user_id

路径

字符串

用户 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

PUT
/v3/OS-INHERIT/projects/{project_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects

将角色分配给子树中的项目的组

继承的角色分配锚定到项目,并应用于项目层次结构中的子树(现有和未来的项目)。

  • 注意:继承的角色不应用于项目本身,仅应用于其子树项目。

  • 注意:组可以在同一项目上拥有常规(非继承)和继承的角色分配。

  • 注意:请求不需要主体,即使提供也会被忽略。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/project_group_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

project_id

路径

字符串

项目 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

HEAD
/v3/OS-INHERIT/projects/{project_id}/users/{user_id}/roles/{role_id}/inherited_to_projects

检查用户是否在项目上拥有继承的项目角色

检查用户是否在项目中具有带有 inherited_to_projects 标志的角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/project_user_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

role_id

路径

字符串

角色 ID。

user_id

路径

字符串

用户 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

HEAD
/v3/OS-INHERIT/projects/{project_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects

检查组是否在项目上拥有继承的项目角色

检查组是否在项目中具有带有 inherited_to_projects 标志的角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/project_group_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

project_id

路径

字符串

项目 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

DELETE
/v3/OS-INHERIT/projects/{project_id}/users/{user_id}/roles/{role_id}/inherited_to_projects

撤销项目上的用户继承的项目角色

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/project_user_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

role_id

路径

字符串

角色 ID。

user_id

路径

字符串

用户 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

DELETE
/v3/OS-INHERIT/projects/{project_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects

撤销项目上的组继承的项目角色

关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-INHERIT/1.0/rel/project_group_role_inherited_to_projects

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

project_id

路径

字符串

项目 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

GET
/v3/role_assignments

列出角色分配

获取角色分配列表。

如果未指定任何查询参数,则此 API 将返回所有角色分配的列表。

{
    "role_assignments": [
        {
            "links": {
                "assignment": "http://example.com/identity/v3/domains/161718/users/313233/roles/123456"
            },
            "role": {
                "id": "123456"
            },
            "scope": {
                "domain": {
                    "id": "161718"
                }
            },
            "user": {
                "id": "313233"
            }
        },
        {
            "group": {
                "id": "101112"
            },
            "links": {
                "assignment": "http://example.com/identity/v3/projects/456789/groups/101112/roles/123456"
            },
            "role": {
                "id": "123456"
            },
            "scope": {
                "project": {
                    "id": "456789"
                }
            }
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/role_assignments",
        "previous": null,
        "next": null
    }
}

由于此列表可能非常长,因此此 API 通常总是与一个或多个过滤器查询一起使用。一些典型示例是

GET /v3/role_assignments?user.id={user_id} 将列出涉及指定用户的所有角色分配。

GET /v3/role_assignments?scope.project.id={project_id} 将列出涉及指定项目的所有角色分配。

也可以列出项目树中的所有角色分配:GET /v3/role_assignments?scope.project.id={project_id}&include_subtree=true 将列出涉及指定项目和所有子项目的角色分配。include_subtree=true 只能与 scope.project.id 一起指定,如果未指定后者,将返回 HTTP 400 Bad Request。

集合中的每个角色分配实体都包含指向导致此实体的分配的链接。

列表响应中的 scope 部分已扩展,以允许表示继承到项目的角色分配。

{
        "role_assignments": [
            {
                "links": {
                    "assignment": "http://example.com/identity/v3/OS-INHERIT/domains/161718/users/313233/roles/123456/inherited_to_projects"
                },
                "role": {
                    "id": "123456"
                },
                "scope": {
                    "domain": {
                        "id": "161718"
                    },
                    "OS-INHERIT:inherited_to": "projects"
                },
                "user": {
                    "id": "313233"
                }
            },
            {
                "group": {
                    "id": "101112-"
                },
                "links": {
                    "assignment": "http://example.com/identity/v3/projects/456789/groups/101112/roles/123456"
                },
                "role": {
                    "id": "123456"
                },
                "scope": {
                    "project": {
                        "id": "456789"
                    }
                }
            }
        ],
        "links": {
            "self": "http://example.com/identity/v3/role_assignments",
            "previous": null,
            "next": null
        }
    }

查询过滤器 scope.OS-INHERIT:inherited_to 可用于基于继承的角色分配进行过滤。scope.OS-INHERIT:inherited_to 的唯一支持值为 projects,表示此角色已继承到拥有域或父项目的所有项目。

如果指定了查询参数 effective,则 API 不会简单地返回已进行的角色分配列表,而是返回用户、项目和域级别上的有效分配列表,并考虑了组成员资格、角色推断规则以及从父域或项目继承的影响。由于已考虑了组成员资格的影响,组角色分配实体本身将不会在集合中返回。同样,由于已考虑了继承的影响,指定继承本身的的角色分配实体也不会在集合中返回。这代表了将包含在作用域令牌中的有效角色分配。相同的查询参数集也可以与 effective 参数结合使用。

例如

GET /v3/role_assignments?user.id={user_id}&effective 换句话说,将回答“此用户实际上可以做什么?”的问题。

GET /v3/role_assignments?user.id={user_id}&scope.project.id={project_id}&effective 将返回项目作用域令牌的令牌响应中包含的等效角色分配集。

下面给出了一个指定查询参数 effective 的 API 调用示例响应

{
    "role_assignments": [
        {
            "links": {
                "assignment": "http://example.com/identity/v3/domains/161718/users/313233/roles/123456"
            },
            "role": {
                "id": "123456"
            },
            "scope": {
                "domain": {
                    "id": "161718"
                }
            },
            "user": {
                "id": "313233"
            }
        },
        {
            "links": {
                "assignment": "http://example.com/identity/v3/projects/456789/groups/101112/roles/123456",
                "membership": "http://example.com/identity/v3/groups/101112/users/313233"
            },
            "role": {
                "id": "123456"
            },
            "scope": {
                "project": {
                    "id": "456789"
                }
            },
            "user": {
                "id": "313234"
            }
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/role_assignments?effective",
        "previous": null,
        "next": null
    }
}

使用查询参数 effective 的响应的 links 部分还包含,对于由于组成员资格而包含的实体,可用于访问组的成员资格的 URL。

如果指定了查询参数 include_names,则集合将包含实体 ID 以及实体名称,而不仅仅是返回角色分配中的实体 ID。例如

GET /v3/role_assignments?user.id={user_id}&effective&include_names=true 将返回

{
        "role_assignments": [
            {
                "links": {
                    "assignment": "http://example.com/identity/v3/domains/161718/users/313233/roles/123456"
                },
                "role": {
                    "domain": {
                        "id": "161718",
                        "name": "Default"
                    },
                    "id": "123456",
                    "name": "admin"
                },
                "scope": {
                    "domain": {
                        "id": "161718",
                        "name": "Default"
                    }
                },
                "user": {
                    "domain": {
                        "id": "161718",
                        "name": "Default"
                    },
                    "id": "313233",
                    "name": "admin"
                }
            },
            {
                "links": {
                    "assignment": "http://example.com/identity/v3/projects/456789/groups/101112/roles/123456",
                    "membership": "http://example.com/identity/v3/groups/101112/users/313233"
                },
                "role": {
                    "domain": {
                        "id": "161718",
                        "name": "Default"
                    },
                    "id": "123456",
                    "name": "admin"
                },
                "scope": {
                    "project": {
                        "domain": {
                            "id": "161718",
                            "name": "Default"
                        }
                        "id": "456789",
                        "name": "admin"
                    }
                },
                "user": {
                    "domain": {
                        "id": "161718",
                        "name": "Default"
                    },
                    "id": "313233",
                    "name": "admin"
                }
            }
        ],
        "links": {
            "self": "http://example.com/identity/v3/role_assignments?effective&include_names=true",
            "previous": null,
            "next": null
        }
    }

关系:https://docs.openstack.org/api/openstack-identity/3/rel/role_assignments

请求

参数

可选查询参数

名称

入参

类型

描述

effective (可选)

查询

key-only (不需要值)

返回有效分配,包括通过组成员资格获得的所有分配。

include_names (可选)

查询

布尔值

如果设置为 true,则返回的任何实体的名称将包含在其 ID 中。任何其他值(包括没有值)都将被解释为 true。

版本 3.6 中新增

include_subtree (可选)

查询

布尔值

如果设置为 true,则项目树层次结构中项目指定在 scope.project_id 查询参数中的项目下方的相关分配也将包含在响应中。对于 include_subtree,任何其他值(包括没有值)都将被解释为 true。

版本 3.6 中新增

group.id (可选)

查询

字符串

按组 ID 过滤响应。

role.id (可选)

查询

字符串

按角色 ID 过滤响应。

scope.domain.id (可选)

查询

字符串

按域 ID 过滤响应。

scope.OS-INHERIT:inherited_to (可选)

查询

字符串

基于继承的角色分配进行过滤。 inherited_to 的唯一支持值为 projects

scope.project.id (可选)

查询

字符串

按项目 ID 过滤响应。

user.id (可选)

查询

字符串

按用户 ID 过滤响应。

响应

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

OS-PKI(已弃用)

GET
/v3/auth/tokens/OS-PKI/revoked

列出已撤销的令牌

列出已撤销的 PKI 令牌。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/tokens/OS-PKI/revoked

响应

状态码
错误

代码

原因

410 - 已消失

对目标资源的访问请求不再可用。

策略

警告

policies API 已弃用。Keystone 不是策略管理服务。请勿使用此服务。

策略是远程服务要使用的任意序列化的策略引擎规则集。

您将策略规则集编码为 blob,远程服务可以消耗它。为此,将 type 设置为 application/json,并将策略规则作为 JSON 字符串指定在 blob 中。例如

{
    "blob":{
        "foobar_user":[
            "role:compute-user"
        ]
    }
}
POST
/v3/policies

创建策略

创建策略。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/policies

请求

参数

名称

入参

类型

描述

policy

body

对象

一个 policy 对象。

type

body

字符串

序列化策略 blob 的 MIME 媒体类型。

blob

body

字符串

策略规则集本身,作为序列化的 blob。

示例
{
    "policy": {
        "blob": "{'foobar_user': 'role:compute-user'}",
        "type": "application/json"
    }
}

响应

参数

名称

入参

类型

描述

links

body

对象

policy 资源的链接。

blob

body

字符串

策略规则集本身,作为序列化的 blob。

policy

body

对象

一个 policy 对象。

type

body

字符串

序列化策略 blob 的 MIME 媒体类型。

id

body

字符串

策略 ID。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

GET
/v3/policies

列出策略

列出策略。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/policies

请求

参数

名称

入参

类型

描述

type (可选)

查询

字符串

根据序列化策略 blob 的 MIME 媒体类型过滤响应。例如,application/json

响应

参数

名称

入参

类型

描述

links

body

对象

policy 资源的链接。

blob

body

对象

策略规则本身,作为序列化的 blob。

策略

body

数组

一个 policies 对象。

type

body

字符串

序列化策略 blob 的 MIME 媒体类型。

id

body

字符串

策略 ID。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "links": {
        "next": null,
        "previous": null,
        "self": "http://example.com/identity/v3/policies"
    },
    "policies": [
        {
            "blob": {
                "foobar_user": [
                    "role:compute-user"
                ]
            },
            "id": "717273",
            "links": {
                "self": "http://example.com/identity/v3/policies/717273"
            },
            "type": "application/json"
        },
        {
            "blob": {
                "foobar_user": [
                    "role:compute-user"
                ]
            },
            "id": "717274",
            "links": {
                "self": "http://example.com/identity/v3/policies/717274"
            },
            "type": "application/json"
        }
    ]
}
GET
/v3/policies/{policy_id}

显示策略详情

显示策略的详情。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/policy

请求

参数

名称

入参

类型

描述

policy_id

路径

字符串

策略 ID。

响应

参数

名称

入参

类型

描述

links

body

对象

policy 资源的链接。

blob

body

对象

策略规则本身,作为序列化的 blob。

policy

body

对象

一个 policy 对象。

type

body

字符串

序列化策略 blob 的 MIME 媒体类型。

id

body

字符串

策略 ID。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "policy": {
        "blob": {
            "foobar_user": [
                "role:compute-user"
            ]
        },
        "id": "717273",
        "links": {
            "self": "http://example.com/identity/v3/policies/717273"
        },
        "type": "application/json"
    }
}
PATCH
/v3/policies/{policy_id}

更新策略

更新一个策略。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/policy

请求

参数

名称

入参

类型

描述

policy_id

路径

字符串

策略 ID。

policy

body

对象

一个 policy 对象。

type

body

字符串

序列化策略 blob 的 MIME 媒体类型。

blob

body

对象

策略规则本身,作为序列化的 blob。

示例
{
    "policy": {
        "blob": {
            "foobar_user": [
                "role:compute-user"
            ]
        },
        "type": "application/json"
    }
}

响应

参数

名称

入参

类型

描述

links

body

对象

policy 资源的链接。

blob

body

对象

策略规则本身,作为序列化的 blob。

policy

body

对象

一个 policy 对象。

type

body

字符串

序列化策略 blob 的 MIME 媒体类型。

id

body

字符串

策略 ID。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "policy": {
        "blob": {
            "foobar_user": [
                "role:compute-user"
            ]
        },
        "id": "717273",
        "links": {
            "self": "http://example.com/identity/v3/policies/717273"
        },
        "type": "application/json"
    }
}
DELETE
/v3/policies/{policy_id}

删除策略

删除一个策略。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/policy

请求

参数

名称

入参

类型

描述

policy_id

路径

字符串

策略 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

项目

项目是资源所有权的基准单位。资源由特定的项目拥有。项目由特定的域拥有。

(自 Identity API v3.4 起) 您可以通过在创建项目时设置 parent_id 来创建项目层次结构。层次结构中的所有项目必须由同一个域拥有。

(自 Identity API v3.6 起) 项目除了作为 OpenStack 资源的容器外,还可以充当域(通过将属性 is_domain 设置为 true),在这种情况下,它提供了一个命名空间,可以在其中创建用户、组和其他项目。实际上,使用 POST /domains API 创建的域实际上将表示为一个 is_domain 设置为 true 且没有父级的项目(parent_id 为 null)。

鉴于此,所有项目都被视为项目层次结构的一部分。在 v3.6 之前在域中创建的项目表示为两层层次结构,其中一个项目具有设置为 trueis_domain 作为根,所有其他项目将其根作为其父级。

充当域的项目也可以潜在地充当 OpenStack 资源的容器,但这取决于相关资源创建的策略规则是否允许这样做。

注意

项目的名称必须在域内唯一,且不能超过 64 个字符。项目的名称必须能够以有效的 JSON 发送,这可以是任何 UTF-8 字符。但是,这受到项目名称存储的给定后端的约束。例如,MySQL 的限制规定 UTF-8 支持仅限于基本多文种平面 (BMP) 中的字符。不允许使用补充字符。请注意,后一种限制通常适用于 Identity API 资源中的所有 names

GET
/v3/projects

列出项目

列出项目。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/projects

请求

参数

名称

入参

类型

描述

domain_id (可选)

查询

字符串

按域 ID 过滤响应。

enabled(可选)

查询

布尔值

如果设置为 true,则仅返回启用的项目。任何其他值(包括没有值)都将被解释为 true。

is_domain (可选)

查询

布尔值

如果将其指定为 true,则仅包含充当域的项目。否则,仅包含不充当域的项目。

版本 3.6 中新增

name (可选)

查询

字符串

根据项目名称过滤响应。

parent_id (可选)

查询

字符串

根据父 ID 过滤响应。

新增于版本 3.4

limit (可选)

查询

整数

请求项目大小。返回最多限制值数量的项目。使用 limit 参数进行初始有限请求,并在后续有限请求中使用响应中最后一个项目看到的 ID 作为 marker 参数值。

marker (可选)

查询

字符串

最后一个项目看到的 ID。使用 limit 参数进行初始有限请求,并在后续有限请求中使用响应中最后一个项目看到的 ID 作为 marker 参数值

响应

参数

名称

入参

类型

描述

links

body

对象

指向资源集合的链接。

projects

body

数组

一个 project 对象列表

is_domain

body

布尔值

指示项目是否也充当域。如果设置为 true,则该项目充当项目和域。作为域,该项目提供了一个命名空间,可以在其中创建用户、组和其他项目。如果设置为 false,则该项目表现为仅包含资源的常规项目。

版本 3.6 中新增

description

body

字符串

项目的描述。

domain_id

body

字符串

项目的域 ID。

enabled

body

布尔值

如果设置为 true,则项目已启用。如果设置为 false,则项目已禁用。

id

body

字符串

项目的 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

项目的名称。

parent_id

body

字符串

项目的父 ID。

新增于版本 3.4

tags

body

数组

分配给项目的简单字符串列表。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "links": {
        "next": null,
        "previous": null,
        "self": "http://example.com/identity/v3/projects"
    },
    "projects": [
        {
            "is_domain": false,
            "description": null,
            "domain_id": "default",
            "enabled": true,
            "id": "0c4e939acacf4376bdcd1129f1a054ad",
            "links": {
                "self": "http://example.com/identity/v3/projects/0c4e939acacf4376bdcd1129f1a054ad"
            },
            "name": "admin",
            "parent_id": null,
            "tags": []
        },
        {
            "is_domain": false,
            "description": null,
            "domain_id": "default",
            "enabled": true,
            "id": "0cbd49cbf76d405d9c86562e1d579bd3",
            "links": {
                "self": "http://example.com/identity/v3/projects/0cbd49cbf76d405d9c86562e1d579bd3"
            },
            "name": "demo",
            "parent_id": null,
            "tags": []
        },
        {
            "is_domain": false,
            "description": null,
            "domain_id": "default",
            "enabled": true,
            "id": "2db68fed84324f29bb73130c6c2094fb",
            "links": {
                "self": "http://example.com/identity/v3/projects/2db68fed84324f29bb73130c6c2094fb"
            },
            "name": "swifttenanttest2",
            "parent_id": null,
            "tags": []
        },
        {
            "is_domain": false,
            "description": null,
            "domain_id": "default",
            "enabled": true,
            "id": "3d594eb0f04741069dbbb521635b21c7",
            "links": {
                "self": "http://example.com/identity/v3/projects/3d594eb0f04741069dbbb521635b21c7"
            },
            "name": "service",
            "parent_id": null,
            "tags": []
        },
        {
            "is_domain": false,
            "description": null,
            "domain_id": "default",
            "enabled": true,
            "id": "43ebde53fc314b1c9ea2b8c5dc744927",
            "links": {
                "self": "http://example.com/identity/v3/projects/43ebde53fc314b1c9ea2b8c5dc744927"
            },
            "name": "swifttenanttest1",
            "parent_id": null,
            "tags": []
        },
        {
            "is_domain": false,
            "description": "",
            "domain_id": "1bc2169ca88e4cdaaba46d4c15390b65",
            "enabled": true,
            "id": "4b1eb781a47440acb8af9850103e537f",
            "links": {
                "self": "http://example.com/identity/v3/projects/4b1eb781a47440acb8af9850103e537f"
            },
            "name": "swifttenanttest4",
            "parent_id": null,
            "tags": []
        },
        {
            "is_domain": false,
            "description": null,
            "domain_id": "default",
            "enabled": true,
            "id": "5961c443439d4fcebe42643723755e9d",
            "links": {
                "self": "http://example.com/identity/v3/projects/5961c443439d4fcebe42643723755e9d"
            },
            "name": "invisible_to_admin",
            "parent_id": null,
            "tags": []
        },
        {
            "is_domain": false,
            "description": null,
            "domain_id": "default",
            "enabled": true,
            "id": "fdb8424c4e4f4c0ba32c52e2de3bd80e",
            "links": {
                "self": "http://example.com/identity/v3/projects/fdb8424c4e4f4c0ba32c52e2de3bd80e"
            },
            "name": "alt_demo",
            "parent_id": null,
            "tags": []
        }
    ]
}
POST
/v3/projects

创建项目

创建一个项目,该项目可以充当域。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/projects

请求

参数

名称

入参

类型

描述

project

body

对象

一个 项目 对象

name

body

字符串

项目的名称,必须在拥有域内唯一。项目可以与其域具有相同的名称。

is_domain (可选)

body

布尔值

指示项目是否也充当域。如果设置为 true,则该项目充当项目和域。作为域,该项目提供了一个命名空间,可以在其中创建用户、组和其他项目。如果设置为 false,则该项目表现为仅包含资源的常规项目。默认值为 false。创建项目后无法更新此参数。

版本 3.6 中新增

description (可选)

body

字符串

项目的描述。

domain_id (可选)

body

字符串

项目的域 ID。

对于充当域的项目,不得指定 domain_id,它将由 Identity 服务实现生成。

对于常规项目(即,不充当域的项目),如果未指定 domain_id,但指定了 parent_id,则将使用父级的域 ID。如果未指定 domain_idparent_id,则 Identity 服务实现将默认为客户端令牌的作用域域。如果同时指定了 domain_idparent_id,并且它们不指示相同的域,则将返回 Bad Request (400)

enabled(可选)

body

布尔值

如果设置为 true,则项目已启用。如果设置为 false,则项目已禁用。默认值为 true

parent_id (可选)

body

字符串

项目的父 ID。

如果在项目创建时指定,这将项目置于层次结构中,并隐式定义拥有域,该域将与指定的父级相同。如果未指定 parent_idis_domainfalse,则该项目将使用其拥有域作为其父级。如果 is_domaintrue(即,该项目充当域),则不得指定 parent_id(或者如果指定,则必须为 null),因为域没有父级。

parent_id 是不可变的,在项目创建后无法更新 - 因此无法在层次结构中移动项目。

新增于版本 3.4

tags (可选)

body

数组

分配给项目的简单字符串列表。可以使用标签将项目分类到组中。

options (可选)

body

对象

项目的资源选项。可用的资源选项是 immutable

示例

创建常规项目的示例

{
    "project": {
        "description": "My new project",
        "domain_id": "default",
        "enabled": true,
        "is_domain": false,
        "name": "myNewProject",
        "options": {}
    }
}

创建也充当域的项目示例

{
    "project": {
        "description": "My new domain",
        "enabled": true,
        "is_domain": true,
        "name": "myNewDomain"
    }
}

响应

参数

名称

入参

类型

描述

project

body

对象

一个 项目 对象

is_domain

body

布尔值

指示项目是否也充当域。如果设置为 true,则该项目充当项目和域。作为域,该项目提供了一个命名空间,可以在其中创建用户、组和其他项目。如果设置为 false,则该项目表现为仅包含资源的常规项目。

版本 3.6 中新增

description

body

字符串

项目的描述。

domain_id

body

字符串

项目的域 ID。

enabled

body

布尔值

如果设置为 true,则项目已启用。如果设置为 false,则项目已禁用。

id

body

字符串

项目的 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

项目的名称。

parent_id

body

字符串

项目的父 ID。

新增于版本 3.4

选项

body

对象

项目的资源选项。可用的资源选项是 immutable

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

409 - Conflict

此操作与此资源的另一个操作冲突。

GET
/v3/projects/{project_id}

显示项目详情

显示项目的详情。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/project

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

parents_as_list (可选)

查询

仅键,不期望值

父层次结构将作为列表包含在响应中。此列表将包含通过遍历到顶级项目找到的项目。返回的列表将根据用户具有有效角色分配的项目进行过滤。

新增于版本 3.4

subtree_as_list (可选)

查询

仅键,不期望值

子层次结构将作为列表包含在响应中。此列表将包含通过遍历找到的项目。返回的列表将根据用户具有有效角色分配的项目进行过滤。

新增于版本 3.4

parents_as_ids (可选)

查询

仅键,不期望值

整个父层次结构将作为嵌套字典包含在响应中。它将包含通过遍历到顶级项目找到的所有项目 ID。

新增于版本 3.4

subtree_as_ids (可选)

查询

仅键,不期望值

整个子层次结构将作为嵌套字典包含在响应中。它将包含所有遍历找到的项目 ID。

新增于版本 3.4

include_limits (可选)

查询

仅键,不期望值

应与 parents_as_listsubtree_as_list 过滤器一起使用,以将相关的项目限制添加到响应主体中。

响应

参数

名称

入参

类型

描述

project

body

对象

一个 项目 对象

is_domain

body

布尔值

指示项目是否也充当域。如果设置为 true,则该项目充当项目和域。作为域,该项目提供了一个命名空间,可以在其中创建用户、组和其他项目。如果设置为 false,则该项目表现为仅包含资源的常规项目。

版本 3.6 中新增

description

body

字符串

项目的描述。

domain_id

body

字符串

项目的域 ID。

enabled

body

布尔值

如果设置为 true,则项目已启用。如果设置为 false,则项目已禁用。

id

body

字符串

项目的 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

项目的名称。

parent_id

body

字符串

项目的父 ID。

新增于版本 3.4

选项

body

对象

项目的资源选项。可用的资源选项是 immutable

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "project": {
        "is_domain": false,
        "description": null,
        "domain_id": "default",
        "enabled": true,
        "id": "0c4e939acacf4376bdcd1129f1a054ad",
        "links": {
            "self": "http://example.com/identity/v3/projects/0c4e939acacf4376bdcd1129f1a054ad"
        },
        "name": "admin",
        "parent_id": "default",
        "options": {}
    }
}
带有 parents_as_list 的示例
{
    "project": {
        "domain_id": "1789d1",
        "enabled": true,
        "id": "263fd9",
        "links": {
            "self": "http://example.com/identity/v3/projects/263fd9"
        },
        "name": "Dev Group A",
        "options": {},
        "parent_id": "183ab2",
        "parents": [
            {
                "project": {
                    "domain_id": "1789d1",
                    "enabled": true,
                    "id": "183ab2",
                    "links": {
                        "self": "http://example.com/identity/v3/projects/183ab2"
                    },
                    "name": "Dev Group A Parent",
                    "parent_id": null
                }
            }
        ]
    }
}
带有 subtree_as_list 的示例
{
    "project": {
        "domain_id": "1789d1",
        "enabled": true,
        "id": "263fd9",
        "links": {
            "self": "http://example.com/identity/v3/projects/263fd9"
        },
        "name": "Dev Group A",
        "options": {},
        "parent_id": "183ab2",
        "subtree": [
            {
                "project": {
                    "domain_id": "1789d1",
                    "enabled": true,
                    "id": "9n1jhb",
                    "links": {
                        "self": "http://example.com/identity/v3/projects/9n1jhb"
                    },
                    "name": "Dev Group A Child 1",
                    "parent_id": "263fd9"
                }
            },
            {
                "project": {
                    "domain_id": "1789d1",
                    "enabled": true,
                    "id": "4b6aa1",
                    "links": {
                        "self": "http://example.com/identity/v3/projects/4b6aa1"
                    },
                    "name": "Dev Group A Child 2",
                    "parent_id": "263fd9"
                }
            },
            {
                "project": {
                    "domain_id": "1789d1",
                    "enabled": true,
                    "id": "b76eq8",
                    "links": {
                        "self": "http://example.com/identity/v3/projects/b76xq8"
                    },
                    "name": "Dev Group A Grandchild",
                    "parent_id": "4b6aa1"
                }
            }
        ]
    }
}
PATCH
/v3/projects/{project_id}

更新项目

更新一个项目。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/project

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

project

body

对象

一个 项目 对象

name (可选)

body

字符串

项目的名称,必须在拥有域内唯一。项目可以与其域具有相同的名称。

is_domain (可选)

body

布尔值

指示项目是否也充当域。如果设置为 true,则该项目充当项目和域。作为域,该项目提供了一个命名空间,可以在其中创建用户、组和其他项目。如果设置为 false,则该项目表现为仅包含资源的常规项目。默认值为 false。创建项目后无法更新此参数。

版本 3.6 中新增

description (可选)

body

字符串

项目的描述。

domain_id (可选)

body

字符串

新域的 ID。更改项目的域现在已弃用,将在后续版本中删除。它在大多数 Identity 服务实现中默认情况下已禁用。

enabled(可选)

body

布尔值

如果设置为 true,则项目已启用。如果设置为 false,则项目已禁用。

tags (可选)

body

数组

分配给项目的简单字符串列表。可以使用标签将项目分类到组中。

options (可选)

body

对象

项目的资源选项。可用的资源选项是 immutable

示例
{
    "project": {
        "description": "My updated project",
        "name": "myUpdatedProject"
    }
}

响应

参数

名称

入参

类型

描述

project

body

对象

一个 项目 对象

is_domain

body

布尔值

指示项目是否也充当域。如果设置为 true,则该项目充当项目和域。作为域,该项目提供了一个命名空间,可以在其中创建用户、组和其他项目。如果设置为 false,则该项目表现为仅包含资源的常规项目。

版本 3.6 中新增

description

body

字符串

项目的描述。

domain_id

body

字符串

项目的域 ID。

enabled

body

布尔值

如果设置为 true,则项目已启用。如果设置为 false,则项目已禁用。

id

body

字符串

项目的 ID。

name

body

字符串

项目的名称。

links

body

对象

指向相关资源的链接。

parent_id

body

字符串

项目的父 ID。

新增于版本 3.4

选项

body

对象

项目的资源选项。可用的资源选项是 immutable

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

示例
{
    "project": {
        "description": "My updated project",
        "domain_id": null,
        "links": {
            "self": "http://example.com/identity/v3/projects/93ebbcc35335488b96ff9cd7d18cbb2e"
        },
        "enabled": true,
        "id": "93ebbcc35335488b96ff9cd7d18cbb2e",
        "is_domain": true,
        "name": "myUpdatedProject",
        "parent_id": null,
        "tags": [],
        "options": {}
    }
}
DELETE
/v3/projects/{project_id}

删除项目

删除一个项目。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/project

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

项目标签

Keystone 中的项目可以使用一个或多个简单字符串进行标记。项目标签遵循 API 工作组 设定的资源标签指南。

项目标签具有以下限制

注意

  • 标签区分大小写

  • 斜杠‘/’不允许出现在标签名称中

  • 逗号‘,’不允许出现在标签名称中,以便简化指定标签列表的请求

  • 每个项目最多可以有 80 个标签

  • 每个标签的最大长度为 255 个字符

警告

我们不建议在项目标签中使用敏感信息,例如计费或帐户代码。默认情况下,对项目标签的访问不是独占的,仅限于系统管理员或用户。域和项目管理员允许标记他们有权访问的项目。域和项目用户(例如,具有 memberreader 角色的用户)可以查看其域内的所有项目标签或他们有权访问的项目上的所有项目标签。

GET
/v3/projects/{project_id}/tags

列出项目的标签

列出项目中的所有标签。

注意

HEAD 也可以在这里使用

关系:https://docs.openstack.org/api/openstack-identity/3/rel/projects

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

响应

参数

名称

入参

类型

描述

tags

body

数组

分配给项目的简单字符串列表。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "tags": ["foo", "bar"]
}
PUT
/v3/projects/{project_id}/tags

修改项目的标签列表

修改项目的标签。任何未指定的现有标签将被删除。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/projects

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

tags

body

数组

分配给项目的简单字符串列表。

示例
{
    "tags": ["foo", "bar"]
}

响应

参数

名称

入参

类型

描述

tags

body

数组

分配给项目的简单字符串列表。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "links": {
        "next": null,
        "previous": null,
        "self": "http://identity:5000/v3/projects"
    },
    "projects": [
        {
            "description": "Test Project",
            "domain_id": "default",
            "enabled": true,
            "id": "3d4c2c82bd5948f0bcab0cf3a7c9b48c",
            "links": {
                "self": "http://identity:5000/v3/projects/3d4c2c82bd5948f0bcab0cf3a7c9b48c"
            },
            "name": "demo",
            "tags": ["foo", "bar"]
        }
    ]
}
DELETE
/v3/projects/{project_id}/tags

移除项目的所有标签

移除给定项目的所有标签。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/projects

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

GET
/v3/projects/{project_id}/tags/{tag}

检查项目是否包含标签

检查项目是否包含指定的标签。

注意

HEAD 也可以在这里使用

关系:https://docs.openstack.org/api/openstack-identity/3/rel/projects

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

tag

路径

字符串

与项目关联的简单字符串。可用于为项目分配值并基于这些值进行过滤。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

PUT
/v3/projects/{project_id}/tags/{tag}

向项目添加单个标签

创建指定的标签并将其添加到项目的标签列表中。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/projects

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

tag

路径

字符串

与项目关联的简单字符串。可用于为项目分配值并基于这些值进行过滤。

响应

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

DELETE
/v3/projects/{project_id}/tags/{tag}

从项目删除单个标签

从项目中删除单个标签。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/projects

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

tag

路径

字符串

与项目关联的简单字符串。可用于为项目分配值并基于这些值进行过滤。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

通过标签进行过滤和搜索

项目可以按标签进行搜索或过滤。下表和示例定义了如何按标签过滤项目。过滤器也可以组合以进行更复杂的搜索。

标签查询

描述

tags

包含所有指定标签的项目

tags-any

包含至少一个指定标签的项目

not-tags

不包含完全所有指定标签的项目

not-tags-any

不包含任何一个指定标签的项目

要请求具有单个标签的项目列表,应将 tags 查询参数设置为所需的标签名称。以下示例返回带有“foo”标签的项目

GET /v3/projects?tags=foo

要请求具有两个或多个标签的项目列表,应将 tags 参数设置为用逗号分隔的标签列表。在这种情况下,必须存在所有给定的标签,项目才能包含在查询结果中。以下示例返回具有“foo”和“bar”标签的项目

GET /v3/projects?tags=foo,bar

要请求具有给定列表中的至少一个标签的项目列表,应将 tags-any 参数设置为用逗号分隔的标签列表。在这种情况下,只要存在给定的标签中的一个,该项目将包含在查询结果中。以下示例返回具有“foo”或“bar”标签的项目

GET /v3/projects?tags-any=foo,bar

要请求不具有标签列表的项目列表,应将 not-tags 参数设置为用逗号分隔的标签列表。在这种情况下,必须不存在所有给定的标签,项目才能包含在查询结果中。以下示例返回不具有“foo”或“bar”标签的项目

GET /v3/projects?not-tags=foo,bar

要请求不具有列表中的至少一个标签的项目列表,应将 not-tags-any 参数设置为用逗号分隔的标签列表。在这种情况下,只要给定的标签中的一个不存在,该项目将包含在查询结果中。示例 以下示例返回不具有“foo”标签或不具有“bar”标签的项目

GET /v3/projects?not-tags-any=foo,bar

可以将 tagstags-anynot-tagsnot-tags-any 参数组合起来构建更复杂的查询。以下示例返回具有“foo”和“bar”标签以及“red”和“blue”中的至少一个的项目

GET /v3/projects?tags=foo,bar&tags-any=red,blue

区域

区域是 OpenStack 部署的一般划分。您可以将零个或多个子区域与区域关联起来,以创建类似树状结构的层次结构。

虽然区域没有地理含义,但部署可以使用地理名称作为区域 ID,例如 us- east

您可以列出、创建、更新、显示区域的详细信息以及删除区域。

GET
/v3/regions/{region_id}

显示区域详细信息

按 ID 显示区域的详细信息。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/regions

请求

参数

名称

入参

类型

描述

region_id

路径

字符串

区域 ID。

响应

参数

名称

入参

类型

描述

region

body

对象

一个 region 对象

description

body

字符串

区域描述。

id

body

字符串

区域的 ID。

links

body

对象

用于 region 资源的链接。

parent_region_id

body

字符串

要使此区域成为另一个区域的子区域,请将此参数设置为父区域的 ID。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "region": {
        "description": "My subregion 3",
        "id": "RegionThree",
        "links": {
            "self": "http://example.com/identity/v3/regions/RegionThree"
        },
        "parent_region_id": "RegionOne"
    }
}
PATCH
/v3/regions/{region_id}

更新区域

更新一个区域。

您可以更新区域的描述或父区域 ID。您无法更新区域 ID。

可能会发生以下错误

  • Not Found (404)。父区域 ID 不存在。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/region

请求

参数

名称

入参

类型

描述

region_id

路径

字符串

区域 ID。

region

body

对象

一个 region 对象

description (可选)

body

字符串

区域描述。

parent_region_id(可选)

body

字符串

要使此区域成为另一个区域的子区域,请将此参数设置为父区域的 ID。

示例
{
    "region": {
        "description": "My subregion 3"
    }
}

响应

参数

名称

入参

类型

描述

region

body

对象

一个 region 对象

description

body

字符串

区域描述。

id

body

字符串

区域的 ID。

links

body

对象

用于 region 资源的链接。

parent_region_id

body

字符串

要使此区域成为另一个区域的子区域,请将此参数设置为父区域的 ID。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "region": {
        "parent_region_id": "RegionOne",
        "id": "RegionThree",
        "links": {
            "self": "http://example.com/identity/v3/regions/RegionThree"
        },
        "description": "My subregion 3"
    }
}
DELETE
/v3/regions/{region_id}

删除区域

删除一个区域。

可能会发生以下错误

  • Conflict (409)。由于区域具有子区域,因此无法删除该区域。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/region

请求

参数

名称

入参

类型

描述

region_id

路径

字符串

区域 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

GET
/v3/regions

列出区域

列出区域。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/regions

请求

参数

名称

入参

类型

描述

parent_region_id(可选)

查询

字符串

按 ID 过滤响应的父区域。

响应

参数

名称

入参

类型

描述

regions

body

数组

一个 region 对象列表

description

body

字符串

区域描述。

id

body

字符串

区域的 ID。

links

body

对象

用于 region 资源的链接。

parent_region_id

body

字符串

要使此区域成为另一个区域的子区域,请将此参数设置为父区域的 ID。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

示例
{
    "links": {
        "next": null,
        "previous": null,
        "self": "http://example.com/identity/v3/regions"
    },
    "regions": [
        {
            "description": "",
            "id": "RegionOne",
            "links": {
                "self": "http://example.com/identity/v3/regions/RegionOne"
            },
            "parent_region_id": null
        }
    ]
}
POST
/v3/regions

创建区域

创建一个区域。

创建区域时,您可以选择指定区域 ID。如果您包含区域 ID 中不允许在 URI 中使用的字符,则必须对 ID 进行 URL 编码。如果您省略 ID,API 会为区域分配 ID。

可能会发生以下错误

  • Not Found (404)。父区域 ID 不存在。

  • Conflict (409)。父区域 ID 将形成循环关系。

  • Conflict (409)。用户定义的区域 ID 在 OpenStack 部署中不唯一。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/regions

请求

参数

名称

入参

类型

描述

region

body

对象

一个 region 对象

description (可选)

body

字符串

区域描述。

id (可选)

body

字符串

区域的 ID。

parent_region_id(可选)

body

字符串

要使此区域成为另一个区域的子区域,请将此参数设置为父区域的 ID。

示例
{
    "region": {
        "description": "My subregion",
        "id": "RegionOneSubRegion",
        "parent_region_id": "RegionOne"
    }
}

响应

参数

名称

入参

类型

描述

region

body

对象

一个 region 对象

description

body

字符串

区域描述。

id

body

字符串

区域的 ID。

links

body

对象

用于 region 资源的链接。

parent_region_id

body

字符串

要使此区域成为另一个区域的子区域,请将此参数设置为父区域的 ID。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

此端点的请求方法无效。

409 - Conflict

此操作与此资源的另一个操作冲突。

413 - 请求实体过大

请求大小超过服务器愿意或能够处理的限制。

415 - 不支持的媒体类型

请求实体具有服务器或资源不支持的媒体类型。

503 - 服务不可用

服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。

角色

OpenStack 服务通常使用基于角色的访问控制 (RBAC) 来确定是否应允许用户的 API 请求。对于 OpenStack,这意味着服务会将用户在项目上拥有的角色(如令牌中的角色所示)与服务策略文件中定义的 API 所需的角色进行比较。用户通过身份服务 API 在项目上获得角色。

角色最初必须作为实体通过身份服务 API 创建,创建后才能分配。您可以将角色分配给用户或组的项目,包括由其他域拥有的项目。您还可以将角色分配给用户或组的域,尽管这仅与使用域范围的令牌执行域级别身份服务 API 请求相关。

使用 URL 中指定的每个属性来创建、检查和删除角色分配。例如,要将角色分配给项目上的用户

PUT /v3/projects/{project_id}/users/{user_id}/roles/{role_id}

您还可以使用这种形式的 API 列出系统中的角色或分配给特定域、项目或用户的角色,但是提供了一个通用的 API 用于列出分配,其中使用查询参数来过滤返回的分配集。例如

  • 列出指定用户的角色分配

    GET /role_assignments?user.id={user_id}
    
  • 列出指定项目的角色分配

    GET /role_assignments?scope.project.id={project_id}
    
  • 列出特定用户的系统角色分配

    GET /role_assignments?scope.system=all?user.id={user_id}
    
  • 列出所有用户和组的系统角色分配

    GET /role_assignments?scope.system=all
    

从 Identity API v3.10 开始,您可以将角色分配授予用户和组在名为 system 的实体上。角色分配 API 还支持列出和过滤系统上的角色分配。

从 Identity API v3.6 开始,您还可以列出项目树中的所有角色分配,例如,以下内容将列出指定项目及其子项目的角色分配

GET /role_assignments?scope.project.id={project_id}&include_subtree=true

如果您指定 include_subtree=true,则还必须指定 scope.project.id。否则,此调用将返回 Bad Request (400) 响应代码。

集合中的每个角色分配实体都包含指向创建该实体的分配的链接。

如前所述,可以将角色分配给用户或组在特定项目、域或整个系统上。如果用户是拥有角色分配的组的成员,那么该用户也将被视为拥有该角色分配,因为其组的成员资格。因此,用户在给定项目或域上的有效角色分配包括他们拥有的任何直接分配,以及他们通过成为也具有给定项目或域上分配的组的成员而获得的任何分配。此有效角色分配集将放置在令牌中,供希望检查策略的服务参考。您可以使用用户、项目和域级别的 effective 查询参数来列出有效角色分配

  • 确定用户实际上可以执行的操作

    GET /role_assignments?user.id={user_id}&effective
    
  • 获取包含在项目范围令牌响应中的等效角色分配集

    GET /role_assignments?user.id={user_id}&scope.project.id={project_id}&effective
    

在有效模式下列出时,由于组分配已被有效地扩展为每个用户的分配,因此组角色分配实体本身不会在集合中返回。但是,在响应中,由于组成员资格而获得每个分配的 links 实体部分将包含一个 URL,该 URL 能够访问该组的成员资格。

默认情况下,角色分配 API 调用从集合中仅返回实体的 ID。可以通过在这些调用的任何一个上使用 include_names 查询参数,除了 ID 之外,也可以返回实体的名称,例如

  • 列出包含名称的角色分配

    GET /role_assignments?include_names
    
GET
/v3/roles

列出角色

列出角色。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/roles

请求

参数

名称

入参

类型

描述

name (可选)

查询

字符串

按角色名称过滤响应。

domain_id (可选)

查询

字符串

按域 ID 过滤响应。

响应

参数

名称

入参

类型

描述

links

body

对象

指向资源集合的链接。

roles

body

数组

一个 role 对象列表

domain_id

body

字符串

域的 ID。

id

body

字符串

角色 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

角色名称。

description

body

字符串

角色描述。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "links": {
        "next": null,
        "previous": null,
        "self": "http://example.com/identity/v3/roles"
    },
    "roles": [
        {
            "id": "5318e65d75574c17bf5339d3df33a5a3",
            "links": {
                "self": "http://example.com/identity/v3/roles/5318e65d75574c17bf5339d3df33a5a3"
            },
            "description": "My new role",
            "name": "admin"
        },
        {
            "id": "642bcfc75c384fd181adf34d9b2df897",
            "links": {
                "self": "http://example.com/identity/v3/roles/642bcfc75c384fd181adf34d9b2df897"
            },
            "description": "My new role",
            "name": "anotherrole"
        },
        {
            "id": "779a76d74f544224a7ef8762ca0de627",
            "links": {
                "self": "http://example.com/identity/v3/roles/779a76d74f544224a7ef8762ca0de627"
            },
            "description": "My new role",
            "name": "Member"
        },
        {
            "id": "9fe2ff9ee4384b1894a90878d3e92bab",
            "links": {
                "self": "http://example.com/identity/v3/roles/9fe2ff9ee4384b1894a90878d3e92bab"
            },
            "name": "_member_"
        },
        {
            "id": "ba2dfba61c934ee89e3110de36273229",
            "links": {
                "self": "http://example.com/identity/v3/roles/ba2dfba61c934ee89e3110de36273229"
            },
            "description": "My new role",
            "name": "ResellerAdmin"
        },
        {
            "id": "f127b97616f24d3ebceb7be840210adc",
            "links": {
                "self": "http://example.com/identity/v3/roles/f127b97616f24d3ebceb7be840210adc"
            },
            "description": null,
            "name": "service"
        }
    ]
}
POST
/v3/roles

创建角色

创建角色。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/roles

请求

参数

名称

入参

类型

描述

role

body

对象

一个 role 对象

name

body

字符串

角色名称。

domain_id (可选)

body

字符串

角色的域 ID。

description (可选)

body

字符串

添加关于角色的描述。

options (可选)

body

对象

角色的资源选项。可用的资源选项是 immutable

示例
{
    "role": {
        "description": "My new role",
        "name": "developer"
    }
}
特定域角色的示例
{
    "role": {
        "description": "My new role"
        "domain_id": "92e782c4988642d783a95f4a87c3fdd7",
        "name": "developer"
    }
}

响应

参数

名称

入参

类型

描述

role

body

对象

一个 role 对象

domain_id

body

字符串

域的 ID。

id

body

字符串

角色 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

角色名称。

description

body

字符串

角色描述。

选项

body

对象

角色的资源选项。可用的资源选项是 immutable

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

409 - Conflict

此操作与此资源的另一个操作冲突。

GET
/v3/roles/{role_id}

显示角色详情

显示角色的详情。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/role

请求

参数

名称

入参

类型

描述

role_id

路径

字符串

角色 ID。

响应

参数

名称

入参

类型

描述

role

body

对象

一个 role 对象

domain_id

body

字符串

域的 ID。

id

body

字符串

角色 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

角色名称。

description

body

字符串

角色描述。

选项

body

对象

角色的资源选项。可用的资源选项是 immutable

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "role": {
        "domain_id": "d07792fd66ac4ed881723ab9f1c9925f",
        "id": "1e443fa8cee3482a8a2b6954dd5c8f12",
        "links": {
            "self": "http://example.com/identity/v3/roles/1e443fa8cee3482a8a2b6954dd5c8f12"
        },
        "description": "My new role",
        "name": "Developer",
        "options": {}
    }
}
PATCH
/v3/roles/{role_id}

更新角色

更新角色。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/role

请求

参数

名称

入参

类型

描述

role_id

路径

字符串

角色 ID。

role

body

对象

一个 role 对象

name (可选)

body

字符串

新的角色名称。

description (可选)

body

字符串

新的角色描述。

options (可选)

body

对象

角色的资源选项。可用的资源选项是 immutable

示例
{
    "role": {
        "description": "My new role",
        "name": "Developer"
    }
}

响应

参数

名称

入参

类型

描述

role

body

对象

一个 role 对象

domain_id

body

字符串

域的 ID。

id

body

字符串

角色 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

角色名称。

description

body

字符串

角色描述。

选项

body

对象

角色的资源选项。可用的资源选项是 immutable

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

示例
{
    "role": {
        "domain_id": "73748865fb964ded9e836d491d32dcfb",
        "id": "1e443fa8cee3482a8a2b6954dd5c8f12",
        "links": {
            "self": "http://example.com/identity/v3/roles/1e443fa8cee3482a8a2b6954dd5c8f12"
        },
        "description": "My new role",
        "name": "Developer",
        "options": {}
    }
}
DELETE
/v3/roles/{role_id}

删除角色

删除角色。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/role

请求

参数

名称

入参

类型

描述

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/domains/{domain_id}/groups/{group_id}/roles

列出域上的组的角色分配

列出域上的组的角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_group_roles

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group_id

路径

字符串

组 ID。

响应

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "roles": [
        {
            "id": "123456",
            "links": {
                "self": "http://example.com/identity/v3/roles/123456"
            },
            "name": "admin"
        },
        {
            "id": "123457",
            "links": {
                "self": "http://example.com/identity/v3/roles/123457"
            },
            "name": "manager"
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/domains/161718/groups/101112/roles",
        "previous": null,
        "next": null
    }
}

可以使用通用的列表分配 API 实现此请求的功能

GET /role_assignments?group.id={group_id}&scope.domain.id={domain_id}
PUT
/v3/domains/{domain_id}/groups/{group_id}/roles/{role_id}

将角色分配给域上的组

将角色分配给域上的组。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_group_role

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

HEAD
/v3/domains/{domain_id}/groups/{group_id}/roles/{role_id}

检查组是否在域上具有角色分配

验证组是否在域上具有角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_group_role

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

DELETE
/v3/domains/{domain_id}/groups/{group_id}/roles/{role_id}

从域上的组取消分配角色

从域上的组取消分配角色。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_group_role

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/domains/{domain_id}/users/{user_id}/roles

列出域上的用户的角色分配

列出域上的用户的角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_user_roles

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

user_id

路径

字符串

用户 ID。

响应

参数

名称

入参

类型

描述

roles

body

数组

一个 role 对象列表

id

body

字符串

角色 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

角色名称。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "roles": [
        {
            "id": "123456",
            "links": {
                "self": "http://example.com/identity/v3/roles/123456"
            },
            "name": "admin"
        },
        {
            "id": "123457",
            "links": {
                "self": "http://example.com/identity/v3/roles/123457"
            },
            "name": "manager"
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/domains/161718/users/313233/roles",
        "previous": null,
        "next": null
    }
}

可以使用通用的列表分配 API 实现此请求的功能

GET /role_assignments?user.id={user_id}&scope.domain.id={domain_id}
PUT
/v3/domains/{domain_id}/users/{user_id}/roles/{role_id}

将角色分配给域上的用户

将角色分配给域上的用户。

关系:https://developer.openstack.org/api-ref/identity/v3/index.html#assign-role-to-user-on-domain

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

user_id

路径

字符串

用户 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

HEAD
/v3/domains/{domain_id}/users/{user_id}/roles/{role_id}

检查用户是否在域上具有角色分配

验证用户是否在域上具有角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_user_role

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

user_id

路径

字符串

用户 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

DELETE
/v3/domains/{domain_id}/users/{user_id}/roles/{role_id}

从域上的用户取消分配角色

从域上的用户取消分配角色。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/domain_user_role

请求

参数

名称

入参

类型

描述

domain_id

路径

字符串

域 ID。

user_id

路径

字符串

用户 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

GET
/v3/projects/{project_id}/groups/{group_id}/roles

列出项目上的组的角色分配

列出项目上的组的角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/project_user_role

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

group_id

路径

字符串

组 ID。

响应

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "roles": [
        {
            "id": "123456",
            "links": {
                "self": "http://example.com/identity/v3/roles/123456"
            },
            "name": "admin"
        },
        {
            "id": "123457",
            "links": {
                "self": "http://example.com/identity/v3/roles/123457"
            },
            "name": "manager"
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/projects/456789/groups/101112/roles",
        "previous": null,
        "next": null
    }
}

可以使用通用的列表分配 API 实现此请求的功能

GET /role_assignments?group.id={group_id}&scope.project.id={project_id}
PUT
/v3/projects/{project_id}/groups/{group_id}/roles/{role_id}

将角色分配给项目上的组

将角色分配给项目上的组。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/project_group_role

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

HEAD
/v3/projects/{project_id}/groups/{group_id}/roles/{role_id}

检查组是否在项目上具有角色分配

验证组是否在项目上具有角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/project_group_role

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

DELETE
/v3/projects/{project_id}/groups/{group_id}/roles/{role_id}

从项目上的组取消分配角色

从项目上的组取消分配角色。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/project_group_role

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/projects/{project_id}/users/{user_id}/roles

列出项目上的用户的角色分配

列出项目上的用户的角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/project_user_role

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

user_id

路径

字符串

用户 ID。

响应

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "links": {
        "self": "http://example.com/identity/v3/projects/9e5a15e2c0dd42aab0990a463e839ac1/users/b964a9e51c0046a4a84d3f83a135a97c/roles",
        "previous": null,
        "next": null
    },
    "roles": [
        {
            "id": "3b5347fa7a144008ba57c0acea469cc3",
            "links": {
                "self": "http://example.com/identity/v3/roles/3b5347fa7a144008ba57c0acea469cc3"
            },
            "name": "admin"
        }
    ]
}

可以使用通用的列表分配 API 实现此请求的功能

GET /role_assignments?user.id={user_id}&scope.project.id={project_id}
PUT
/v3/projects/{project_id}/users/{user_id}/roles/{role_id}

将角色分配给项目上的用户

将角色分配给项目上的用户。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/project_user_role

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

user_id

路径

字符串

用户 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

HEAD
/v3/projects/{project_id}/users/{user_id}/roles/{role_id}

检查用户是否在项目上具有角色分配

验证用户是否在项目上具有角色。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/project_user_role

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

user_id

路径

字符串

用户 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

DELETE
/v3/projects/{project_id}/users/{user_id}/roles/{role_id}

从项目中取消用户角色

取消用户在项目中的角色。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/project_user_role

请求

参数

名称

入参

类型

描述

project_id

路径

字符串

项目 ID。

user_id

路径

字符串

用户 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/roles/{prior_role_id}/implies

列出角色的推断(推理)角色

列出角色的推断(推理)角色。

关系:https://developer.openstack.org/api-ref/identity/v3/#list-implied-roles-for-role

请求

参数

名称

入参

类型

描述

prior_role_id

路径

字符串

先前的角色的 ID。

响应

参数

名称

入参

类型

描述

role_inference

body

对象

角色推理对象,包含 prior_role 对象和 implies 对象。

prior_role

body

对象

一个先前的角色对象。

implies

body

数组

一个推断的角色对象数组。

id

body

字符串

角色 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

角色名称。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

404 - Not Found

找不到请求的资源。

示例
{
    "role_inference": {
        "prior_role": {
            "id": "42c764f0c19146728dbfe73a49cc35c3",
            "links": {
                "self": "http://example.com/identity/v3/roles/42c764f0c19146728dbfe73a49cc35c3"
            },
            "name": "prior role name"
        },
        "implies": [
            {
                "id": "066fbfc8b3e54fb68784c9e7e92ab8d7",
                "links": {
                    "self": "http://example.com/identity/v3/roles/066fbfc8b3e54fb68784c9e7e92ab8d7"
                },
                "name": "implied role1 name"
            },
            {
                "id": "32a0df1cc22848aca3986adae9e0b9a0",
                "links": {
                    "self": "http://example.com/identity/v3/roles/32a0df1cc22848aca3986adae9e0b9a0"
                },
                "name": "implied role2 name"
            }
        ]
    },
    "links" : {
        "self": "http://example.com/identity/v3/roles/42c764f0c19146728dbfe73a49cc35c3/implies"
    }
}
PUT
/v3/roles/{prior_role_id}/implies/{implies_role_id}

创建角色推理规则

创建一个角色推理规则。

关系:https://developer.openstack.org/api-ref/identity/v3/#create-role-inference-rule

请求

参数

名称

入参

类型

描述

prior_role_id

路径

字符串

先前的角色的 ID。

implies_role_id

路径

字符串

一个推断角色的 ID。

响应

参数

名称

入参

类型

描述

role_inference

body

对象

角色推理对象,包含 prior_role 对象和 implies 对象。

prior_role

body

对象

一个先前的角色对象。

implies

body

对象

一个推断的角色对象。

id

body

字符串

角色 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

角色名称。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

404 - Not Found

找不到请求的资源。

示例
{
    "role_inference": {
        "prior_role": {
            "id": "7ceab6192ea34a548cc71b24f72e762c",
            "links": {
                "self": "http://example.com/identity/v3/roles/7ceab6192ea34a548cc71b24f72e762c"
            },
            "name": "prior role name"
        },
        "implies": {
            "id": "97e2f5d38bc94842bc3da818c16762ed",
            "links": {
                "self": "http://example.com/identity/v3/roles/97e2f5d38bc94842bc3da818c16762ed"
            },
            "name": "implied role name"
        }
    },
    "links": {
        "self": "http://example.com/identity/v3/roles/7ceab6192ea34a548cc71b24f72e762c/implies/97e2f5d38bc94842bc3da818c16762ed"
    }
}
GET
/v3/roles/{prior_role_id}/implies/{implies_role_id}

获取角色推理规则

获取一个角色推理规则。

关系:https://developer.openstack.org/api-ref/identity/v3/#get-role-inference-rule

请求

参数

名称

入参

类型

描述

prior_role_id

路径

字符串

先前的角色的 ID。

implies_role_id

路径

字符串

一个推断角色的 ID。

响应

参数

名称

入参

类型

描述

role_inference

body

对象

角色推理对象,包含 prior_role 对象和 implies 对象。

prior_role

body

对象

一个先前的角色对象。

implies

body

对象

一个推断的角色对象。

id

body

字符串

角色 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

角色名称。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

404 - Not Found

找不到请求的资源。

示例
{
    "role_inference": {
        "prior_role": {
            "id": "7ceab6192ea34a548cc71b24f72e762c",
            "links": {
                "self": "http://example.com/identity/v3/roles/7ceab6192ea34a548cc71b24f72e762c"
            },
            "name": "prior role name"
        },
        "implies": {
            "id": "97e2f5d38bc94842bc3da818c16762ed",
            "links": {
                "self": "http://example.com/identity/v3/roles/97e2f5d38bc94842bc3da818c16762ed"
            },
            "name": "implied role name"
        }
    },
    "links": {
        "self": "http://example.com/identity/v3/roles/7ceab6192ea34a548cc71b24f72e762c/implies/97e2f5d38bc94842bc3da818c16762ed"
    }
}
HEAD
/v3/roles/{prior_role_id}/implies/{implies_role_id}

确认角色推理规则

检查一个角色推理规则。

关系:https://developer.openstack.org/api-ref/identity/v3/#confirm-role-inference-rule

请求

参数

名称

入参

类型

描述

prior_role_id

路径

字符串

先前的角色的 ID。

implies_role_id

路径

字符串

一个推断角色的 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

404 - Not Found

找不到请求的资源。

示例

状态:204 无内容

DELETE
/v3/roles/{prior_role_id}/implies/{implies_role_id}

删除角色推理规则

删除一个角色推理规则。

关系:https://developer.openstack.org/api-ref/identity/v3/#delete-role-inference-rule

请求

参数

名称

入参

类型

描述

prior_role_id

路径

字符串

先前的角色的 ID。

implies_role_id

路径

字符串

一个推断角色的 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

404 - Not Found

找不到请求的资源。

示例

状态:204 无内容

GET
/v3/role_assignments

列出角色分配

列出角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/role_assignments

请求

参数

名称

入参

类型

描述

effective (可选)

查询

key-only (不需要值)

返回有效分配,包括通过组成员资格获得的所有分配。

include_names (可选)

查询

布尔值

如果设置为 true,则返回的任何实体的名称将包含在其 ID 中。任何其他值(包括没有值)都将被解释为 true。

版本 3.6 中新增

include_subtree (可选)

查询

布尔值

如果设置为 true,则项目树层次结构中项目指定在 scope.project_id 查询参数中的项目下方的相关分配也将包含在响应中。对于 include_subtree,任何其他值(包括没有值)都将被解释为 true。

版本 3.6 中新增

group.id (可选)

查询

字符串

按组 ID 过滤响应。

role.id (可选)

查询

字符串

按角色 ID 过滤响应。

scope.system (可选)

查询

字符串

按系统分配过滤响应。

scope.domain.id (可选)

查询

字符串

按域 ID 过滤响应。

scope.project.id (可选)

查询

字符串

按项目 ID 过滤响应。

user.id (可选)

查询

字符串

按用户 ID 过滤响应。

响应

参数

名称

入参

类型

描述

role_assignments

body

数组

一个 role_assignment 对象列表。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "role_assignments": [
        {
            "links": {
                "assignment": "http://example.com/identity/v3/domains/161718/users/313233/roles/123456"
            },
            "role": {
                "id": "123456"
            },
            "scope": {
                "domain": {
                    "id": "161718"
                }
            },
            "user": {
                "id": "313233"
            }
        },
        {
            "group": {
                "id": "101112"
            },
            "links": {
                "assignment": "http://example.com/identity/v3/projects/456789/groups/101112/roles/123456"
            },
            "role": {
                "id": "123456"
            },
            "scope": {
                "project": {
                    "id": "456789"
                }
            }
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/role_assignments",
        "previous": null,
        "next": null
    }
}
GET
/v3/role_inferences

列出所有角色推理规则

列出所有角色推理规则。

关系:https://developer.openstack.org/api-ref/identity/v3/#list-all-role-inference-rules

响应

参数

名称

入参

类型

描述

role_inferences

body

数组

一个 role_inference 对象数组。

prior_role

body

对象

一个先前的角色对象。

implies

body

对象

一个推断的角色对象。

id

body

字符串

角色 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

角色名称。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

404 - Not Found

找不到请求的资源。

示例
{
    "role_inferences": [
        {
            "prior_role": {
                "id": "1acd3c5aa0e246b9a7427d252160dcd1",
                "links": {
                    "self": "http://example.com/identity/v3/roles/1acd3c5aa0e246b9a7427d252160dcd1"
                },
                "description": "My new role",
                "name": "prior role name"
            },
            "implies": [
                {
                    "id": "3602510e2e1f499589f78a0724dcf614",
                    "links": {
                        "self": "http://example.com/identity/v3/roles/3602510e2e1f499589f78a0724dcf614"
                    },
                    "description": "My new role",
                    "name": "implied role1 name"
                },
                {
                    "id": "738289aeef684e73a987f7cf2ec6d925",
                    "links": {
                        "self": "http://example.com/identity/v3/roles/738289aeef684e73a987f7cf2ec6d925"
                    },
                    "description": "My new role",
                    "name": "implied role2 name"
                }
            ]
        },
        {
            "prior_role": {
                "id": "bbf7a5098bb34407b7164eb6ff9f144e",
                "links": {
                    "self" : "http://example.com/identity/v3/roles/bbf7a5098bb34407b7164eb6ff9f144e"
                },
                "description": "My new role",
                "name": "prior role name"
            },
            "implies": [
                {
                    "id": "872b20ad124c4c1bafaef2b1aae316ab",
                    "links": {
                        "self": "http://example.com/identity/v3/roles/872b20ad124c4c1bafaef2b1aae316ab"
                    },
                    "description": null,
                    "name": "implied role1 name"
                },
                {
                    "id": "1d865b1b2da14cb7b05254677e5f36a2",
                    "links": {
                        "self": "http://example.com/identity/v3/roles/1d865b1b2da14cb7b05254677e5f36a2"
                    },
                    "description": null,
                    "name": "implied role2 name"
                }
            ]
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/role_inferences"
    }
}

系统角色分配

系统角色分配最终控制对系统级 API 调用的访问。系统角色分配类似于项目或域角色分配,但针对不同的目标。与其将角色授予项目中的用户或组,不如可以将系统角色授予他们。

系统级 API 的良好示例包括服务目录和计算管理程序的管理。

GET
/v3/system/users/{user_id}/roles

列出用户的系统角色分配

列出用户拥有的所有系统角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/system_user_roles

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

响应

参数

名称

入参

类型

描述

links

body

对象

指向相关资源的链接。

roles

body

数组

一个 role 对象列表,包含 domain_ididlinksname 属性。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "roles": [
        {
            "domain_id": null,
            "id": "6d550353899f4b0fbf3e410e1b6ddc05",
            "links": {
                "self": "http://example.com/identity/v3/roles/6d550353899f4b0fbf3e410e1b6ddc05"
            },
            "name": "admin"
        }
    ],
    "links": {
        "next": null,
        "previous": null,
        "self": "http://example.com/identity/v3/system/users/0b916f1b1e51455cb24b3a051520c576/roles"
    }
}

可以使用通用的列表分配 API 实现此请求的功能

GET /role_assignments?user.id={user_id}&scope.system
PUT
/v3/system/users/{user_id}/roles/{role_id}

将系统角色分配给用户

授予用户系统上的角色。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/system_user_role

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

HEAD
/v3/system/users/{user_id}/roles/{role_id}

检查用户是否具有系统角色分配

检查特定用户是否在系统上具有角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/system_user_role

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/system/users/{user_id}/roles/{role_id}

获取用户的系统角色分配

获取用户的特定系统角色分配。这与 HEAD /v3/system/users/{user_id}/roles/{role_id} API 相同。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/system_user_role

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

DELETE
/v3/system/users/{user_id}/roles/{role_id}

从用户处删除系统角色分配

从用户处删除系统角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/system_user_role

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/system/groups/{group_id}/roles

列出群组的系统角色分配

列出群组拥有的所有系统角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/system_group_roles

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

响应

参数

名称

入参

类型

描述

links

body

对象

指向相关资源的链接。

roles

body

数组

一个 role 对象列表,包含 domain_ididlinksname 属性。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "roles": [
        {
            "domain_id": null,
            "id": "6d550353899f4b0fbf3e410e1b6ddc05",
            "links": {
                "self": "http://example.com/identity/v3/roles/6d550353899f4b0fbf3e410e1b6ddc05"
            },
            "name": "admin"
        }
    ],
    "links": {
        "next": null,
        "previous": null,
        "self": "http://example.com/identity/v3/system/groups/934cc15c4d03479ebba167d67d47737f/roles"
    }
}

可以使用通用的列表分配 API 实现此请求的功能

GET /role_assignments?group.id={group_id}&scope.system
PUT
/v3/system/groups/{group_id}/roles/{role_id}

将系统角色分配给群组

授予组系统上的角色。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/system_group_role

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

HEAD
/v3/system/groups/{group_id}/roles/{role_id}

检查群组是否具有系统角色分配

检查特定群组是否在系统上具有角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/system_group_role

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/system/groups/{group_id}/roles/{role_id}

获取群组的系统角色分配

获取群组的特定系统角色分配。这与 HEAD /v3/system/groups/{group_id}/roles/{role_id} API 相同。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/system_group_role

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

DELETE
/v3/system/groups/{group_id}/roles/{role_id}

从组中删除系统角色分配

从组中移除系统角色分配。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/system_group_role

请求

参数

名称

入参

类型

描述

group_id

路径

字符串

组 ID。

role_id

路径

字符串

角色 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

服务目录和端点

服务是可以通过 URL(即端点)访问的 OpenStack Web 服务。

服务目录列出了根据当前授权对调用者可用的服务。

您可以创建、列出、显示、更新和删除服务。创建或更新服务时,您可以启用该服务,这将导致该服务及其端点出现在服务目录中。

您可以创建、列出、显示、更新和删除端点。

GET
/v3/services

列出服务

列出所有服务。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/services

请求

参数

名称

入参

类型

描述

name (可选)

查询

字符串

按服务名称过滤响应。

type (可选)

查询

字符串

按服务类型过滤响应。有效值为 computeec2identityimagenetworkvolume

响应

参数

名称

入参

类型

描述

name

body

字符串

服务名称。

links

body

对象

“service”资源的链接。

enabled(可选)

body

布尔值

定义服务及其端点是否出现在服务目录中:- false。服务及其端点不出现在服务目录中。- true。服务及其端点出现在服务目录中。

services

body

数组

“service”对象列表。

type

body

字符串

服务类型,描述服务实现 API。值为 compute(计算)、ec2identity(身份)、image(镜像)、network(网络)或 volume(卷)。

id

body

字符串

服务所属的服务的 UUID。

description (可选)

body

字符串

服务描述。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "links": {
        "next": null,
        "previous": null,
        "self": "http://example.com/identity/v3/services"
    },
    "services": [
        {
            "description": "Nova Compute Service",
            "enabled": true,
            "id": "1999c3a858c7408fb586817620695098",
            "links": {
                "self": "http://example.com/identity/v3/services/1999c3a858c7408fb586817620695098"
            },
            "name": "nova",
            "type": "compute"
        },
        {
            "description": "Cinder Volume Service V2",
            "enabled": true,
            "id": "39216610e75547f1883037e11976fc0f",
            "links": {
                "self": "http://example.com/identity/v3/services/39216610e75547f1883037e11976fc0f"
            },
            "name": "cinderv2",
            "type": "volumev2"
        },
        {
            "description": "Neutron Service",
            "enabled": true,
            "id": "4fe41a27de3341af9100123f765eac0d",
            "links": {
                "self": "http://example.com/identity/v3/services/4fe41a27de3341af9100123f765eac0d"
            },
            "name": "neutron",
            "type": "network"
        },
        {
            "description": "EC2 Compatibility Layer",
            "enabled": true,
            "id": "61d3d05bdd1449f18923c83f52a4d762",
            "links": {
                "self": "http://example.com/identity/v3/services/61d3d05bdd1449f18923c83f52a4d762"
            },
            "name": "ec2",
            "type": "ec2"
        },
        {
            "description": "Glance Image Service",
            "enabled": true,
            "id": "69afa3d57d1948ea988beeb252bbaa5d",
            "links": {
                "self": "http://example.com/identity/v3/services/69afa3d57d1948ea988beeb252bbaa5d"
            },
            "name": "glance",
            "type": "image"
        },
        {
            "description": "Nova Compute Service V2.1",
            "enabled": true,
            "id": "79b691ee7be649d9bf8613efc0960206",
            "links": {
                "self": "http://example.com/identity/v3/services/79b691ee7be649d9bf8613efc0960206"
            },
            "name": "novav21",
            "type": "computev21"
        },
        {
            "description": "Swift Service",
            "enabled": true,
            "id": "92419b70ebe64c6c873bd20b14360e6b",
            "links": {
                "self": "http://example.com/identity/v3/services/92419b70ebe64c6c873bd20b14360e6b"
            },
            "name": "swift",
            "type": "object-store"
        },
        {
            "description": "Keystone Identity Service",
            "enabled": true,
            "id": "b8f8454fc07b46b781204d2a436f9d1c",
            "links": {
                "self": "http://example.com/identity/v3/services/b8f8454fc07b46b781204d2a436f9d1c"
            },
            "name": "keystone",
            "type": "identity"
        },
        {
            "description": "Cinder Volume Service",
            "enabled": true,
            "id": "cdda3bea0742407f95e70f4758f46558",
            "links": {
                "self": "http://example.com/identity/v3/services/cdda3bea0742407f95e70f4758f46558"
            },
            "name": "cinder",
            "type": "volume"
        }
    ]
}
POST
/v3/services

创建服务

创建服务。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/services

请求

参数

名称

入参

类型

描述

description (可选)

body

字符串

服务描述。

服务

body

对象

“service”对象。

enabled(可选)

body

布尔值

定义服务及其端点是否出现在服务目录中:- false。服务及其端点不出现在服务目录中。- true。服务及其端点出现在服务目录中。

type

body

字符串

服务类型,描述服务实现 API。值为 compute(计算)、ec2identity(身份)、image(镜像)、network(网络)或 volume(卷)。

name

body

字符串

服务名称。

示例
{
    "service": {
        "type": "compute",
        "name": "compute2",
        "description": "Compute service 2"
    }
}

响应

参数

名称

入参

类型

描述

name

body

字符串

服务名称。

服务

body

对象

“service”对象。

links

body

对象

“service”资源的链接。

type

body

字符串

服务类型,描述服务实现 API。值为 compute(计算)、ec2identity(身份)、image(镜像)、network(网络)或 volume(卷)。

id

body

字符串

服务所属的服务的 UUID。

description (可选)

body

字符串

服务描述。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

409 - Conflict

此操作与此资源的另一个操作冲突。

GET
/v3/services/{service_id}

显示服务详情

显示服务的详情。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/service

请求

参数

名称

入参

类型

描述

service_id

路径

字符串

服务 ID。

响应

参数

名称

入参

类型

描述

name

body

字符串

服务名称。

服务

body

对象

“service”对象。

links

body

对象

“service”资源的链接。

type

body

字符串

服务类型,描述服务实现 API。值为 compute(计算)、ec2identity(身份)、image(镜像)、network(网络)或 volume(卷)。

id

body

字符串

服务所属的服务的 UUID。

description (可选)

body

字符串

服务描述。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "service": {
        "description": "Keystone Identity Service",
        "enabled": true,
        "id": "686766",
        "links": {
            "self": "http://example.com/identity/v3/services/686766"
        },
        "name": "keystone",
        "type": "identity"
    }
}
PATCH
/v3/services/{service_id}

更新服务

更新服务。

请求体与创建服务请求体相同,除了您仅包含想要更新的属性。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/services

请求

参数

名称

入参

类型

描述

type

body

字符串

服务类型,描述服务实现 API。值为 compute(计算)、ec2identity(身份)、image(镜像)、network(网络)或 volume(卷)。

enabled(可选)

body

布尔值

定义服务及其端点是否出现在服务目录中:- false。服务及其端点不出现在服务目录中。- true。服务及其端点出现在服务目录中。默认值为 true

description (可选)

body

字符串

服务描述。

服务

body

对象

“service”对象。

name

body

字符串

服务名称。

service_id

路径

字符串

服务 ID。

示例
{
    "service": {
        "description": "Block Storage Service V2"
    }
}

响应

参数

名称

入参

类型

描述

name

body

字符串

服务名称。

服务

body

对象

“service”对象。

links

body

对象

“service”资源的链接。

type

body

字符串

服务类型,描述服务实现 API。值为 compute(计算)、ec2identity(身份)、image(镜像)、network(网络)或 volume(卷)。

id

body

字符串

服务所属的服务的 UUID。

description (可选)

body

字符串

服务描述。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

示例
{
    "service": {
        "name": "cinderv2",
        "links": {
            "self": "http://example.com/identity/v3/services/5789da9864004dd088fce14c1c626a4b"
        },
        "enabled": true,
        "type": "volumev2",
        "id": "5789da9864004dd088fce14c1c626a4b",
        "description": "Block Storage Service V2"
    }
}
DELETE
/v3/services/{service_id}

删除服务

删除服务。

如果您尝试删除仍具有关联端点的服务,则此调用将删除所有关联的端点,或者在删除所有端点之前失败。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/service

请求

参数

名称

入参

类型

描述

service_id

路径

字符串

服务 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/endpoints

列出端点

列出所有可用端点。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/endpoints

请求

参数

名称

入参

类型

描述

接口(可选)

查询

字符串

按接口过滤响应。

service_id(可选)

查询

字符串

按服务 ID 过滤响应。

region_id(可选)

查询

字符串

按区域 ID 过滤响应。

响应

参数

名称

入参

类型

描述

region_id

body

字符串

(从 v3.2 开始)包含服务端点的区域的 ID。

links

body

对象

“endpoints”资源的链接。

url

body

字符串

端点 URL。

region

body

字符串

(在 v3.2 中已弃用)服务端点的地理位置。

enabled

body

布尔值

指示端点是否出现在服务目录中:- false。端点不出现在服务目录中。- true。端点出现在服务目录中。

接口

body

字符串

接口类型,描述端点的可见性。值为:- public。由在公共可用网络接口上的最终用户可见。- internal。由在未计量内部网络接口上的最终用户可见。- admin。由在安全网络接口上的管理用户可见。

service_id

body

字符串

服务所属的服务的 UUID。

endpoints

body

数组

一个 endpoint 对象列表。

id

body

字符串

端点 ID。

name (可选)

body

字符串

(已弃用)端点名称。仅当资源上设置时,才会响应中返回该字段。

此字段已弃用,因为它没有价值。端点最好通过描述它们的组合服务、区域和接口或其 ID 来描述。

description (可选)

body

字符串

端点描述。仅在资源上设置时才返回。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "endpoints": [
        {
            "enabled": true,
            "id": "0649c5be323f4792afbc1efdd480847d",
            "interface": "internal",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/0649c5be323f4792afbc1efdd480847d"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "ef6b15e425814dc69d830361baae0e33",
            "url": "http://23.253.211.234:8080/v1/AUTH_$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "06b85ed2aa57413ca0b1813daed329a9",
            "interface": "internal",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/06b85ed2aa57413ca0b1813daed329a9"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "98cfd5347fb84601b2f88f3afd8dddd4",
            "url": "http://23.253.211.234:8776/v1/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "070102f162e04f91a52c7887d0604163",
            "interface": "admin",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/070102f162e04f91a52c7887d0604163"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "312f401c14d143d8b3e3f4daf0418add",
            "url": "http://23.253.211.234:8774/v2.1/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "0fd73b621e424cc0a172853264519cbc",
            "interface": "admin",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/0fd73b621e424cc0a172853264519cbc"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "17a877162c8e405b81d563d95ec4e3f8",
            "url": "http://23.253.211.234:8776/v2/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "1899667a3b1544ccb355fdfc4184d7d7",
            "interface": "public",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/1899667a3b1544ccb355fdfc4184d7d7"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "9b67aed49e0d4c2fb46ca9476a3b9243",
            "url": "http://23.253.211.234:9292"
        },
        {
            "enabled": true,
            "id": "3b3611ea2e554ee7b85e7f2213b02c33",
            "interface": "admin",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/3b3611ea2e554ee7b85e7f2213b02c33"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "2a662f90700b4478929d4b24cc6a320b",
            "url": "http://23.253.211.234:9696/"
        },
        {
            "enabled": true,
            "id": "3ea2b420306f48c6bf0cf51c2fefea03",
            "interface": "internal",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/3ea2b420306f48c6bf0cf51c2fefea03"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "736fb9bb21ef498287db9abcc55b20d9",
            "url": "http://23.253.211.234:8774/v2/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "41b122182f574a44b0e246aff6ca29c5",
            "interface": "admin",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/41b122182f574a44b0e246aff6ca29c5"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "9b67aed49e0d4c2fb46ca9476a3b9243",
            "url": "http://23.253.211.234:9292"
        },
        {
            "enabled": true,
            "id": "44a736dd5eeb4347acec66b5f11c8f80",
            "interface": "internal",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/44a736dd5eeb4347acec66b5f11c8f80"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "2a662f90700b4478929d4b24cc6a320b",
            "url": "http://23.253.211.234:9696/"
        },
        {
            "enabled": true,
            "id": "499e8f6718ef466ba3fb315fa8f9e0b8",
            "interface": "internal",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/499e8f6718ef466ba3fb315fa8f9e0b8"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "312f401c14d143d8b3e3f4daf0418add",
            "url": "http://23.253.211.234:8774/v2.1/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "545b1e9f126248428c5cdbec7420c353",
            "interface": "public",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/545b1e9f126248428c5cdbec7420c353"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "736fb9bb21ef498287db9abcc55b20d9",
            "url": "http://23.253.211.234:8774/v2/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "629dc5a64e954ad09a45e87bc48299ba",
            "interface": "public",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/629dc5a64e954ad09a45e87bc48299ba"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "2a662f90700b4478929d4b24cc6a320b",
            "url": "http://23.253.211.234:9696/"
        },
        {
            "enabled": true,
            "id": "642a329a660544fdaab2420c0da7d49b",
            "interface": "public",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/642a329a660544fdaab2420c0da7d49b"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "ef6b15e425814dc69d830361baae0e33",
            "url": "http://23.253.211.234:8080/v1/AUTH_$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "72f8fc8536e44a19bc3388218efcc741",
            "interface": "internal",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/72f8fc8536e44a19bc3388218efcc741"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "9b67aed49e0d4c2fb46ca9476a3b9243",
            "url": "http://23.253.211.234:9292"
        },
        {
            "enabled": true,
            "id": "74121e71962e4947ac622c41706f0ee7",
            "interface": "public",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/74121e71962e4947ac622c41706f0ee7"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "17a877162c8e405b81d563d95ec4e3f8",
            "url": "http://23.253.211.234:8776/v2/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "7431a4f971dc4abb8d0e387434a06817",
            "interface": "admin",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/7431a4f971dc4abb8d0e387434a06817"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "9242e05f0c23467bbd1cf1f7a6e5e596",
            "url": "http://23.253.211.234:8773/"
        },
        {
            "enabled": true,
            "id": "7cffc75a14ca4334b458e475750bd84f",
            "interface": "public",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/7cffc75a14ca4334b458e475750bd84f"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "efeb249cbcd3412496bc4b194ea058da",
            "url": "http://example.com/identity/v2.0"
        },
        {
            "enabled": true,
            "id": "a422a6fa163b4a6ba8309e067ce3750b",
            "interface": "public",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/a422a6fa163b4a6ba8309e067ce3750b"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "312f401c14d143d8b3e3f4daf0418add",
            "url": "http://23.253.211.234:8774/v2.1/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "ac6a74efe9944afdb129d4df70cde0ec",
            "interface": "public",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/ac6a74efe9944afdb129d4df70cde0ec"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "9242e05f0c23467bbd1cf1f7a6e5e596",
            "url": "http://23.253.211.234:8773/"
        },
        {
            "enabled": true,
            "id": "adf43d7ff0d14d0fa1e8a5187f40e1af",
            "interface": "internal",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/adf43d7ff0d14d0fa1e8a5187f40e1af"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "efeb249cbcd3412496bc4b194ea058da",
            "url": "http://example.com/identity/v2.0"
        },
        {
            "enabled": true,
            "id": "b18be64a118244d39217db72534f8b33",
            "interface": "admin",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/b18be64a118244d39217db72534f8b33"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "736fb9bb21ef498287db9abcc55b20d9",
            "url": "http://23.253.211.234:8774/v2/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "c828983c9c214d819674649aa693cdff",
            "interface": "public",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/c828983c9c214d819674649aa693cdff"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "98cfd5347fb84601b2f88f3afd8dddd4",
            "url": "http://23.253.211.234:8776/v1/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "d062ebdb244f447498768fc0ced32e2d",
            "interface": "admin",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/d062ebdb244f447498768fc0ced32e2d"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "98cfd5347fb84601b2f88f3afd8dddd4",
            "url": "http://23.253.211.234:8776/v1/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "d281219ec0df4cf2b7c681463d5dcf51",
            "interface": "internal",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/d281219ec0df4cf2b7c681463d5dcf51"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "17a877162c8e405b81d563d95ec4e3f8",
            "url": "http://23.253.211.234:8776/v2/$(tenant_id)s"
        },
        {
            "enabled": true,
            "id": "d8e0824a17404431b5d978a87ac1bede",
            "interface": "admin",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/d8e0824a17404431b5d978a87ac1bede"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "efeb249cbcd3412496bc4b194ea058da",
            "url": "http://example.com/identity_v2_admin/v2.0"
        },
        {
            "enabled": true,
            "id": "d9b54bdc063046828ac3c6487bea8047",
            "interface": "internal",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/d9b54bdc063046828ac3c6487bea8047"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "9242e05f0c23467bbd1cf1f7a6e5e596",
            "url": "http://23.253.211.234:8773/"
        },
        {
            "enabled": true,
            "id": "ea74f9771dec475eabfc2cdff5364413",
            "interface": "admin",
            "links": {
                "self": "http://example.com/identity/v3/endpoints/ea74f9771dec475eabfc2cdff5364413"
            },
            "region": "RegionOne",
            "region_id": "RegionOne",
            "service_id": "ef6b15e425814dc69d830361baae0e33",
            "url": "http://23.253.211.234:8080"
        }
    ],
    "links": {
        "next": null,
        "previous": null,
        "self": "http://example.com/identity/v3/endpoints"
    }
}
POST
/v3/endpoints

创建端点

创建端点。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/endpoints

请求

参数

名称

入参

类型

描述

endpoint

body

对象

“endpoint”对象。

url

body

字符串

端点 URL。

enabled(可选)

body

布尔值

定义端点是否出现在服务目录中:- false。端点不出现在服务目录中。- true。端点出现在服务目录中。默认值为 true

接口

body

字符串

接口类型,描述端点的可见性。值为:- public。由在公共可用网络接口上的最终用户可见。- internal。由在未计量内部网络接口上的最终用户可见。- admin。由在安全网络接口上的管理用户可见。

service_id

body

字符串

服务所属的服务的 UUID。

region_id(可选)

body

字符串

(从 v3.2 开始)包含服务端点的区域的 ID。

name (可选)

body

字符串

(已弃用)端点名称。仅当资源上设置时,才会响应中返回该字段。

此字段已弃用,因为它没有价值。端点最好通过描述它们的组合服务、区域和接口或其 ID 来描述。

description (可选)

body

字符串

端点描述。仅在资源上设置时才返回。

示例
{
    "endpoint": {
        "interface": "public",
        "region_id": "RegionOne",
        "url": "http://example.com/identity/v3/endpoints/828384",
        "service_id": "9242e05f0c23467bbd1cf1f7a6e5e596"
    }
}

响应

参数

名称

入参

类型

描述

endpoint

body

对象

“endpoint”对象。

links

body

对象

“endpoint”资源的链接。

url

body

字符串

端点 URL。

region

body

字符串

(在 v3.2 中已弃用)服务端点的地理位置。

enabled

body

布尔值

指示端点是否出现在服务目录中:- false。端点不出现在服务目录中。- true。端点出现在服务目录中。

接口

body

字符串

接口类型,描述端点的可见性。值为:- public。由在公共可用网络接口上的最终用户可见。- internal。由在未计量内部网络接口上的最终用户可见。- admin。由在安全网络接口上的管理用户可见。

service_id

body

字符串

服务所属的服务的 UUID。

id

body

字符串

端点 ID。

name (可选)

body

字符串

(已弃用)端点名称。仅当资源上设置时,才会响应中返回该字段。

此字段已弃用,因为它没有价值。端点最好通过描述它们的组合服务、区域和接口或其 ID 来描述。

region_id

body

字符串

(从 v3.2 开始)包含服务端点的区域的 ID。

description (可选)

body

字符串

端点描述。仅在资源上设置时才返回。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

409 - Conflict

此操作与此资源的另一个操作冲突。

GET
/v3/endpoints/{endpoint_id}

显示端点详情

显示端点的详情。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/endpoints

请求

参数

名称

入参

类型

描述

endpoint_id

路径

字符串

端点 ID。

响应

参数

名称

入参

类型

描述

endpoint

body

对象

“endpoint”对象。

name (可选)

body

字符串

(已弃用)端点名称。仅当资源上设置时,才会响应中返回该字段。

此字段已弃用,因为它没有价值。端点最好通过描述它们的组合服务、区域和接口或其 ID 来描述。

links

body

对象

“endpoint”资源的链接。

url

body

字符串

端点 URL。

region

body

字符串

(在 v3.2 中已弃用)服务端点的地理位置。

接口

body

字符串

接口类型,描述端点的可见性。值为:- public。由在公共可用网络接口上的最终用户可见。- internal。由在未计量内部网络接口上的最终用户可见。- admin。由在安全网络接口上的管理用户可见。

service_id

body

字符串

服务所属的服务的 UUID。

description (可选)

body

字符串

端点描述。仅在资源上设置时才返回。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "endpoint": {
        "enabled": true,
        "id": "01c3d5b92f7841ac83fb4b26173c12c7",
        "interface": "admin",
        "links": {
            "self": "http://example.com/identity/v3/endpoints/01c3d5b92f7841ac83fb4b26173c12c7"
        },
        "region": "RegionOne",
        "region_id": "RegionOne",
        "service_id": "3b2d6ad7e02c4cde8498a547601f1b8f",
        "url": "http://23.253.211.234:9696/"
    }
}
PATCH
/v3/endpoints/{endpoint_id}

更新端点

更新端点。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/endpoint

请求

参数

名称

入参

类型

描述

endpoint

body

对象

“endpoint”对象。

url

body

字符串

端点 URL。

region

body

字符串

(在 v3.2 中已弃用)服务端点的地理位置。

接口

body

字符串

接口类型,描述端点的可见性。值为:- public。由在公共可用网络接口上的最终用户可见。- internal。由在未计量内部网络接口上的最终用户可见。- admin。由在安全网络接口上的管理用户可见。

service_id

body

字符串

服务所属的服务的 UUID。

endpoint_id

路径

字符串

端点 ID。

name (可选)

body

字符串

(已弃用)端点名称。仅当资源上设置时,才会响应中返回该字段。

此字段已弃用,因为它没有价值。端点最好通过描述它们的组合服务、区域和接口或其 ID 来描述。

description (可选)

body

字符串

端点描述。仅在资源上设置时才返回。

示例
{
    "endpoint": {
        "interface": "public",
        "region_id": "north",
        "url": "http://example.com/identity/v3/endpoints/828384",
        "service_id": "345678"
    }
}

响应

参数

名称

入参

类型

描述

endpoint

body

对象

“endpoint”对象。

id

body

字符串

端点 ID。

links

body

对象

“endpoint”资源的链接。

url

body

字符串

端点 URL。

region

body

字符串

(在 v3.2 中已弃用)服务端点的地理位置。

接口

body

字符串

接口类型,描述端点的可见性。值为:- public。由在公共可用网络接口上的最终用户可见。- internal。由在未计量内部网络接口上的最终用户可见。- admin。由在安全网络接口上的管理用户可见。

name (可选)

body

字符串

(已弃用)端点名称。仅当资源上设置时,才会响应中返回该字段。

此字段已弃用,因为它没有价值。端点最好通过描述它们的组合服务、区域和接口或其 ID 来描述。

service_id

body

字符串

服务所属的服务的 UUID。

description (可选)

body

字符串

端点描述。仅在资源上设置时才返回。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

示例
{
    "endpoint": {
        "id": "828384",
        "interface": "internal",
        "links": {
            "self": "http://example.com/identity/v3/endpoints/828384"
        },
        "region_id": "north",
        "service_id": "686766",
        "url": "http://example.com/identity/v3/endpoints/828384"
    }
}
DELETE
/v3/endpoints/{endpoint_id}

删除端点

删除端点。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/endpoint

请求

参数

名称

入参

类型

描述

endpoint_id

路径

字符串

端点 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

统一限制

在 OpenStack 中,配额系统主要包含两部分:limitusage。Keystone 中的统一限制是 limit 部分的替代品。它包含两种类型的资源:Registered LimitLimit。一个 registered limit 是默认限制。它通常由注册到 Keystone 的服务创建。一个 limit 是覆盖每个项目的注册限制的限制。

GET
/v3/registered_limits

列出注册限制

列出注册限制。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/registered_limits

请求

参数

名称

入参

类型

描述

service_id(可选)

查询

字符串

按服务 ID 过滤响应。

region_id(可选)

查询

字符串

按区域 ID 过滤响应。

resource_name(可选)

查询

字符串

按指定的资源名称过滤响应。

响应

参数

名称

入参

类型

描述

links

body

对象

指向资源集合的链接。

registered_limits

body

数组

“registered_limits”对象列表

id

body

字符串

注册限制 ID。

service_id

body

字符串

注册限制所属服务的 UUID。

region_id

body

字符串

包含服务端点的区域的 ID。该值为 None 也可以。

resource_name

body

字符串

资源名称。

default_limit

body

整数

注册限制的默认限制。

description

body

字符串

注册限制描述。

links

body

对象

指向相关资源的链接。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "links": {
        "self": "http://10.3.150.25/identity/v3/registered_limits",
        "previous": null,
        "next": null
    },
    "registered_limits": [
        {
            "resource_name": "snapshot",
            "region_id": null,
            "links": {
                "self": "http://10.3.150.25/identity/v3/registered_limits/195acb8a093e43e9afb23d6628361e7c"
            },
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "default_limit": 10,
            "id": "195acb8a093e43e9afb23d6628361e7c",
            "description": null
        },
        {
            "resource_name": "volume",
            "region_id": "RegionOne",
            "links": {
                "self": "http://10.3.150.25/identity/v3/registered_limits/ea7f74f15cba4c6db1406fe52532f98d"
            },
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "default_limit": 5,
            "id": "ea7f74f15cba4c6db1406fe52532f98d",
            "description": "Number of volumes"
        }
    ]
}
POST
/v3/registered_limits

创建注册限制

创建注册限制。它支持在一个请求中创建多个注册限制。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/registered_limits

请求

参数

名称

入参

类型

描述

registered_limits

body

数组

“registered_limits”对象列表

service_id

body

字符串

注册限制所属服务的 UUID。

region_id(可选)

body

字符串

包含服务端点的区域的 ID。

resource_name

body

字符串

资源名称。

default_limit

body

整数

注册限制的默认限制。

description (可选)

body

字符串

注册限制描述。

示例
{
    "registered_limits":[
        {
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "region_id": "RegionOne",
            "resource_name": "snapshot",
            "default_limit": 5
        },
        {
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "resource_name": "volume",
            "default_limit": 10,
            "description": "Number of volumes"
        }
    ]
}

响应

参数

名称

入参

类型

描述

registered_limits

body

数组

“registered_limits”对象列表

id

body

字符串

注册限制 ID。

service_id

body

字符串

注册限制所属服务的 UUID。

region_id

body

字符串

包含服务端点的区域的 ID。该值为 None 也可以。

resource_name

body

字符串

资源名称。

default_limit

body

整数

注册限制的默认限制。

description

body

字符串

注册限制描述。

links

body

对象

指向相关资源的链接。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

409 - Conflict

此操作与此资源的另一个操作冲突。

示例
{
    "registered_limits": [
        {
            "resource_name": "volume",
            "region_id": null,
            "links": {
                "self": "http://10.3.150.25/identity/v3/registered_limits/773147dd53cd4a17b921d555cf17c633"
            },
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "default_limit": 10,
            "id": "773147dd53cd4a17b921d555cf17c633",
            "description": "Number of volumes"
        },
        {
            "resource_name": "snapshot",
            "region_id": "RegionOne",
            "links": {
                "self": "http://10.3.150.25/identity/v3/registered_limits/e35a965b2b244209bb0c2b193c55955f"
            },
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "default_limit": 5,
            "id": "e35a965b2b244209bb0c2b193c55955f",
            "description": null
        }
    ]
}
PATCH
/v3/registered_limits/{registered_limit_id}

更新注册限制

更新指定的注册限制。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/registered_limit

请求

参数

名称

入参

类型

描述

registered_limit_id

路径

字符串

注册限制 ID。

registered_limit

body

数组

一个 registered_limit 对象

service_id(可选)

body

字符串

要更新的服务的 UUID,该注册限制属于该服务。service_id、resource_name 或 region_id 必须与现有值不同,否则将引发 409 错误。

region_id(可选)

body

字符串

包含服务端点的区域的 ID。service_id、resource_name 或 region_id 必须与现有值不同,否则将引发 409 错误。

resource_name(可选)

body

字符串

资源名称。service_id、resource_name 或 region_id 必须与现有值不同,否则将引发 409 错误。

default_limit (可选)

body

整数

注册限制的默认限制。

description (可选)

body

字符串

注册限制描述。

示例
{
    "registered_limit": {
        "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
        "region_id": "RegionOne",
        "resource_name": "snapshot",
        "default_limit": 5,
        "description": "Number of snapshots"
    }
}

响应

参数

名称

入参

类型

描述

registered_limit

body

数组

一个 registered_limit 对象

id

body

字符串

注册限制 ID。

service_id

body

字符串

注册限制所属服务的 UUID。

region_id

body

字符串

包含服务端点的区域的 ID。该值为 None 也可以。

resource_name

body

字符串

资源名称。

default_limit

body

整数

注册限制的默认限制。

description

body

字符串

注册限制描述。

links

body

对象

指向相关资源的链接。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

示例
{
    "registered_limit": {
        "resource_name": "snapshot",
        "region_id": "RegionOne",
        "links": {
            "self": "http://10.3.150.25/identity/v3/registered_limits/e35a965b2b244209bb0c2b193c55955f"
        },
        "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
        "default_limit": 5,
        "id": "e35a965b2b244209bb0c2b193c55955f",
        "description": "Number of snapshots"
    }
}
GET
/v3/registered_limits/{registered_limit_id}

显示注册限制详情

显示注册限制的详情。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/registered_limit

请求

参数

名称

入参

类型

描述

registered_limit_id

路径

字符串

注册限制 ID。

响应

参数

名称

入参

类型

描述

registered_limit

body

数组

一个 registered_limit 对象

id

body

字符串

注册限制 ID。

service_id

body

字符串

注册限制所属服务的 UUID。

region_id

body

字符串

包含服务端点的区域的 ID。该值为 None 也可以。

resource_name

body

字符串

资源名称。

default_limit

body

整数

注册限制的默认限制。

description

body

字符串

注册限制描述。

links

body

对象

指向相关资源的链接。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "registered_limit": {
        "resource_name": "volume",
        "region_id": null,
        "links": {
            "self": "http://10.3.150.25/identity/v3/registered_limits/773147dd53cd4a17b921d555cf17c633"
        },
        "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
        "default_limit": 10,
        "id": "773147dd53cd4a17b921d555cf17c633",
        "description": "Number of volumes"
    }
}
DELETE
/v3/registered_limits/{registered_limit_id}

删除注册限制

删除一个注册限制。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/registered_limit

请求

参数

名称

入参

类型

描述

registered_limit_id

路径

字符串

注册限制 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/limits/model

获取执行模型

返回配置的限制执行模型。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/limit_model

响应

参数

名称

入参

类型

描述

model

body

对象

描述配置的执行模型的对象。

name

body

字符串

执行模型的名称

description

body

字符串

所用执行模型的简短描述

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

平面执行示例
{
    "model": {
        "description": "Limit enforcement and validation does not take project hierarchy into consideration.",
        "name": "flat"
    }
}
GET
/v3/limits

列出限制

列出限制。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/limits

请求

参数

名称

入参

类型

描述

service_id(可选)

查询

字符串

按服务 ID 过滤响应。

region_id(可选)

查询

字符串

按区域 ID 过滤响应。

resource_name(可选)

查询

字符串

按指定的资源名称过滤响应。

project_id (可选)

查询

字符串

按项目 ID 过滤响应。

domain_id (可选)

查询

字符串

按域 ID 过滤响应。

响应

参数

名称

入参

类型

描述

links

body

对象

指向资源集合的链接。

limits

body

数组

一个 limits 对象列表

id

body

字符串

限制 ID。

project_id

body

字符串

项目的 ID。

domain_id

body

字符串

域的 ID。

service_id

body

字符串

限制所属服务的 UUID。

region_id

body

字符串

包含服务端点的区域的 ID。该值为 None 也可以。

resource_name

body

字符串

资源名称。

resource_limit

body

整数

覆盖限制。

description

body

字符串

限制描述。

links

body

对象

指向相关资源的链接。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "links": {
        "self": "http://10.3.150.25/identity/v3/limits",
        "previous": null,
        "next": null
    },
    "limits": [
        {
            "resource_name": "volume",
            "region_id": null,
            "links": {
                "self": "http://10.3.150.25/identity/v3/limits/25a04c7a065c430590881c646cdcdd58"
            },
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "project_id": "3a705b9f56bb439381b43c4fe59dccce",
            "domain_id": null,
            "id": "25a04c7a065c430590881c646cdcdd58",
            "resource_limit": 11,
            "description": "Number of volumes for project 3a705b9f56bb439381b43c4fe59dccce"
        },
        {
            "resource_name": "snapshot",
            "region_id": "RegionOne",
            "links": {
                "self": "http://10.3.150.25/identity/v3/limits/3229b3849f584faea483d6851f7aab05"
            },
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "project_id": "3a705b9f56bb439381b43c4fe59dccce",
            "domain_id": null,
            "id": "3229b3849f584faea483d6851f7aab05",
            "resource_limit": 5,
            "description": null
        }
    ]
}
POST
/v3/limits

创建限制

创建限制。支持在一个请求中创建多个限制。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/limits

请求

参数

名称

入参

类型

描述

limits

body

数组

一个 limits 对象列表

project_id (可选)

body

字符串

项目的 ID。

domain_id (可选)

body

字符串

域的名称。

service_id

body

字符串

限制所属服务的 UUID。

region_id(可选)

body

字符串

包含服务端点的区域的 ID。

resource_name

body

字符串

资源名称。

resource_limit

body

整数

覆盖限制。

description (可选)

body

字符串

限制描述。

示例
{
    "limits":[
        {
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "project_id": "3a705b9f56bb439381b43c4fe59dccce",
            "region_id": "RegionOne",
            "resource_name": "snapshot",
            "resource_limit": 5
        },
        {
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "domain_id": "edbafc92be354ffa977c58aa79c7bdb2",
            "resource_name": "volume",
            "resource_limit": 10,
            "description": "Number of volumes for project 3a705b9f56bb439381b43c4fe59dccce"
        }
    ]
}

响应

参数

名称

入参

类型

描述

limits

body

数组

一个 limits 对象列表

id

body

字符串

限制 ID。

project_id

body

字符串

项目的 ID。

domain_id

body

字符串

域的 ID。

service_id

body

字符串

限制所属服务的 UUID。

region_id

body

字符串

包含服务端点的区域的 ID。该值为 None 也可以。

resource_name

body

字符串

资源名称。

resource_limit

body

整数

覆盖限制。

description

body

字符串

限制描述。

links

body

对象

指向相关资源的链接。

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

409 - Conflict

此操作与此资源的另一个操作冲突。

示例
{
    "limits": [
        {
            "resource_name": "volume",
            "region_id": null,
            "links": {
                "self": "http://10.3.150.25/identity/v3/limits/25a04c7a065c430590881c646cdcdd58"
            },
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "project_id": null,
            "domain_id": "edbafc92be354ffa977c58aa79c7bdb2",
            "id": "25a04c7a065c430590881c646cdcdd58",
            "resource_limit": 10,
            "description": "Number of volumes for project 3a705b9f56bb439381b43c4fe59dccce"
        },
        {
            "resource_name": "snapshot",
            "region_id": "RegionOne",
            "links": {
                "self": "http://10.3.150.25/identity/v3/limits/3229b3849f584faea483d6851f7aab05"
            },
            "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
            "project_id": "3a705b9f56bb439381b43c4fe59dccce",
            "domain_id": null,
            "id": "3229b3849f584faea483d6851f7aab05",
            "resource_limit": 5,
            "description": null
        }
    ]
}
PATCH
/v3/limits/{limit_id}

更新限制

更新指定的限制。仅支持更新限制的 resource_limitdescription

关系:https://docs.openstack.org/api/openstack-identity/3/rel/limit

请求

参数

名称

入参

类型

描述

limit_id

路径

字符串

限制 ID。

limit

body

数组

一个 limit 对象

resource_limit (可选)

body

整数

覆盖限制。

description (可选)

body

字符串

限制描述。

示例
{
    "limit": {
        "resource_limit": 5,
        "description": "Number of snapshots for project 3a705b9f56bb439381b43c4fe59dccce"
    }
}

响应

参数

名称

入参

类型

描述

limit

body

数组

一个 limit 对象

id

body

字符串

限制 ID。

project_id

body

字符串

项目的 ID。

domain_id

body

字符串

域的 ID。

service_id

body

字符串

限制所属服务的 UUID。

region_id

body

字符串

包含服务端点的区域的 ID。该值为 None 也可以。

resource_name

body

字符串

资源名称。

resource_limit

body

整数

覆盖限制。

description

body

字符串

限制描述。

links

body

对象

指向相关资源的链接。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

示例
{
    "limit": {
        "resource_name": "snapshot",
        "region_id": "RegionOne",
        "links": {
            "self": "http://10.3.150.25/identity/v3/limits/3229b3849f584faea483d6851f7aab05"
        },
        "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
        "project_id": "3a705b9f56bb439381b43c4fe59dccce",
        "domain_id": null,
        "id": "3229b3849f584faea483d6851f7aab05",
        "resource_limit": 5,
        "description": "Number of snapshots for project 3a705b9f56bb439381b43c4fe59dccce"
    }
}
GET
/v3/limits/{limit_id}

显示限制详情

显示限制的详情。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/limit

请求

参数

名称

入参

类型

描述

limit_id

路径

字符串

限制 ID。

响应

参数

名称

入参

类型

描述

limit

body

数组

一个 limit 对象

id

body

字符串

限制 ID。

project_id

body

字符串

项目的 ID。

domain_id

body

字符串

域的 ID。

service_id

body

字符串

限制所属服务的 UUID。

region_id

body

字符串

包含服务端点的区域的 ID。该值为 None 也可以。

resource_name

body

字符串

资源名称。

resource_limit

body

整数

覆盖限制。

description

body

字符串

限制描述。

links

body

对象

指向相关资源的链接。

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "limit": {
        "resource_name": "volume",
        "region_id": null,
        "links": {
            "self": "http://10.3.150.25/identity/v3/limits/25a04c7a065c430590881c646cdcdd58"
        },
        "service_id": "9408080f1970482aa0e38bc2d4ea34b7",
        "project_id": "3a705b9f56bb439381b43c4fe59dccce",
        "domain_id": null,
        "id": "25a04c7a065c430590881c646cdcdd58",
        "resource_limit": 11,
        "description": null
    }
}
DELETE
/v3/limits/{limit_id}

删除限制

删除一个限制。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/limit

请求

参数

名称

入参

类型

描述

limit_id

路径

字符串

限制 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

用户

用户是拥有域的单个 API 消费者。角色将用户与项目或域明确关联。没有分配角色的用户无法访问 OpenStack 资源。

您可以列出、创建、显示用户详情、更新、删除和更改用户密码。

您还可以列出指定用户的组、项目和角色分配。要列出用户角色,请参阅 角色

GET
/v3/users

列出用户

列出用户。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/users

请求

参数

名称

入参

类型

描述

domain_id (可选)

查询

字符串

按域 ID 过滤响应。

enabled(可选)

查询

字符串

按启用 (true) 或禁用 (false) 用户过滤响应。

idp_id (可选)

查询

字符串

按身份提供商 ID 过滤响应。

name (可选)

查询

字符串

按用户名过滤响应。

password_expires_at (可选)

查询

字符串

根据用户密码是否过期过滤结果。查询应包含一个 operator 和一个 timestamp,用冒号 (:) 分隔两者,例如

password_expires_at={operator}:{timestamp}
  • 有效操作符为:ltltegtgteeqneq

    • lt:过期时间早于时间戳

    • lte:过期时间小于或等于时间戳

    • gt:过期时间晚于时间戳

    • gte:过期时间大于或等于时间戳

    • eq:过期时间等于时间戳

    • neq:过期时间不等于时间戳

  • 有效时间戳的格式为:YYYY-MM-DDTHH:mm:ssZ

例如

/v3/users?password_expires_at=lt:2016-12-08T22:02:00Z

例如,将返回密码在时间戳 (2016-12-08T22:02:00Z) 之前过期的用户列表。

protocol_id (可选)

查询

字符串

按协议 ID 过滤响应。

unique_id (可选)

查询

字符串

按唯一 ID 过滤响应。

limit (可选)

查询

整数

请求项目大小。返回最多限制值数量的项目。使用 limit 参数进行初始有限请求,并在后续有限请求中使用响应中最后一个项目看到的 ID 作为 marker 参数值。

marker (可选)

查询

字符串

最后一个项目看到的 ID。使用 limit 参数进行初始有限请求,并在后续有限请求中使用响应中最后一个项目看到的 ID 作为 marker 参数值

sort_key (可选)

查询

字符串

按属性对资源进行排序

sort_dir (可选)

查询

字符串

排序方向。有效值为 asc(升序)或 desc(降序)。

响应

参数

名称

入参

类型

描述

links

body

对象

指向资源集合的链接。

users

body

数组

一个 user 对象列表

default_project_id (可选)

body

字符串

用户的默认项目 ID。

domain_id

body

字符串

域的 ID。

enabled

body

布尔值

如果用户已启用,则此值为 true。如果用户已禁用,则此值为 false

id

body

字符串

用户 ID。

links

body

对象

user 资源的链接。

name

body

字符串

用户名。必须在拥有域内唯一。

password_expires_at

body

字符串

密码到期日期和时间。时区为 UTC。

这是一个响应对象属性;不适用于请求。 null 值表示密码永不过期。

3.7 版本新增

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

示例
{
    "links": {
        "next": null,
        "previous": null,
        "self": "http://example.com/identity/v3/users"
    },
    "users": [
        {
            "domain_id": "default",
            "enabled": true,
            "id": "2844b2a08be147a08ef58317d6471f1f",
            "links": {
                "self": "http://example.com/identity/v3/users/2844b2a08be147a08ef58317d6471f1f"
            },
            "name": "glance",
            "password_expires_at": null
        },
        {
            "domain_id": "default",
            "enabled": true,
            "id": "4ab84ab39de54f4d96eaff8f2145a7cd",
            "links": {
                "self": "http://example.com/identity/v3/users/4ab84ab39de54f4d96eaff8f2145a7cd"
            },
            "name": "swiftusertest1",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        },
        {
            "domain_id": "default",
            "enabled": true,
            "id": "56696a9a04864d63877a3d06a6f0b24b",
            "links": {
                "self": "http://example.com/identity/v3/users/56696a9a04864d63877a3d06a6f0b24b"
            },
            "name": "swift",
            "password_expires_at": null
        },
        {
            "domain_id": "default",
            "enabled": true,
            "id": "5acb638d15da44fc8de41b9a4bd41875",
            "links": {
                "self": "http://example.com/identity/v3/users/5acb638d15da44fc8de41b9a4bd41875"
            },
            "name": "alt_demo",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        },
        {
            "domain_id": "default",
            "enabled": true,
            "id": "7596e862b1af473c8ed6ae99d35b51e3",
            "links": {
                "self": "http://example.com/identity/v3/users/7596e862b1af473c8ed6ae99d35b51e3"
            },
            "name": "demo",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        },
        {
            "domain_id": "default",
            "enabled": true,
            "id": "802edb2141b44e77bbde241417450749",
            "links": {
                "self": "http://example.com/identity/v3/users/802edb2141b44e77bbde241417450749"
            },
            "name": "nova",
            "password_expires_at": null
        },
        {
            "domain_id": "592ab0800d3745baaf45c610fa41950a",
            "enabled": true,
            "id": "9aca3883784647fe9aff3a50d922489a",
            "links": {
                "self": "http://example.com/identity/v3/users/9aca3883784647fe9aff3a50d922489a"
            },
            "name": "swiftusertest4",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        },
        {
            "domain_id": "default",
            "enabled": true,
            "id": "a1251b011f9345e68c2458b841152034",
            "links": {
                "self": "http://example.com/identity/v3/users/a1251b011f9345e68c2458b841152034"
            },
            "name": "swiftusertest3",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        },
        {
            "domain_id": "default",
            "enabled": true,
            "id": "a43f46eb318041f6b712143862e3ad70",
            "links": {
                "self": "http://example.com/identity/v3/users/a43f46eb318041f6b712143862e3ad70"
            },
            "name": "neutron",
            "password_expires_at": null
        },
        {
            "domain_id": "default",
            "enabled": true,
            "id": "b964a9e51c0046a4a84d3f83a135a97c",
            "links": {
                "self": "http://example.com/identity/v3/users/b964a9e51c0046a4a84d3f83a135a97c"
            },
            "name": "admin",
            "password_expires_at": null
        },
        {
            "domain_id": "default",
            "enabled": true,
            "id": "dc87e591c0d247d5ac04e873bd8a1646",
            "links": {
                "self": "http://example.com/identity/v3/users/dc87e591c0d247d5ac04e873bd8a1646"
            },
            "name": "cinder",
            "password_expires_at": null
        },
        {
            "domain_id": "default",
            "enabled": true,
            "id": "ed214dc1c2c6468b926c96eca6c8aee9",
            "links": {
                "self": "http://example.com/identity/v3/users/ed214dc1c2c6468b926c96eca6c8aee9"
            },
            "name": "glance-swift",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        },
        {
            "domain_id": "default",
            "enabled": true,
            "id": "f4f6587b058a4f46a00242549b430d37",
            "links": {
                "self": "http://example.com/identity/v3/users/f4f6587b058a4f46a00242549b430d37"
            },
            "name": "swiftusertest2",
            "password_expires_at": "2016-11-06T15:32:17.000000"
        }
    ]
}
POST
/v3/users

创建用户

创建用户。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/users

请求

参数

名称

入参

类型

描述

user

body

对象

一个 user 对象

default_project_id (可选)

body

字符串

用户的默认项目 ID。用户的默认项目不能是域。设置此属性不会授予项目上的任何实际授权,并且仅为方便起见提供。因此,引用的项目不需要存在于用户域内。(自 v3.1 起)如果用户没有对其默认项目的授权,则在创建令牌时会忽略默认项目。(自 v3.1 起)此外,如果您的默认项目无效,则会颁发一个没有明确授权范围的令牌。

domain_id (可选)

body

字符串

用户的域 ID。如果请求中未提供域 ID,则 Identity 服务将尝试从请求中使用的令牌中提取域 ID。这需要使用域范围的令牌。

federated (可选)

body

列表

与用户关联的联合对象列表。列表中的每个对象都包含 idp_idprotocolsprotocols 是一个对象列表,其中每个对象都包含协议和用户的 protocol_idunique_id。例如

"federated": [
  {
    "idp_id": "efbab5a6acad4d108fec6c63d9609d83",
    "protocols": [
      {"protocol_id": mapped, "unique_id": "test@example.com"}
    ]
  }
]

enabled(可选)

body

布尔值

如果用户已启用,则此值为 true。如果用户已禁用,则此值为 false

name

body

字符串

用户名。必须在拥有域内唯一。

密码 (可选)

body

字符串

用户的密码。

extra (可选)

body

字符串

资源的额外属性。实际名称 extra 不是请求体中的键名,而是资源可能包含的任何不属于资源默认属性的属性的集合。通常这些是操作员为自己的特定用途(例如用户的 emaildescription)添加到 Keystone 中的自定义字段。

options (可选)

body

对象

用户的资源选项。可用的资源选项是 ignore_change_password_upon_first_useignore_password_expiryignore_lockout_failure_attemptslock_passwordmulti_factor_auth_enabledmulti_factor_auth_rules ignore_user_inactivity

示例
{
    "user": {
        "default_project_id": "263fd9",
        "domain_id": "1789d1",
        "enabled": true,
        "federated": [
            {
                "idp_id": "efbab5a6acad4d108fec6c63d9609d83",
                "protocols": [
                    {
                        "protocol_id": "mapped",
                        "unique_id": "test@example.com"
                    }
                ]
            }
        ],
        "name": "James Doe",
        "password": "secretsecret",
        "description": "James Doe user",
        "email": "jdoe@example.com",
        "options": {
            "ignore_password_expiry": true
        }
    }
}

响应

参数

名称

入参

类型

描述

user

body

对象

一个 user 对象

default_project_id (可选)

body

字符串

用户的默认项目 ID。

domain_id

body

字符串

域的 ID。

enabled

body

布尔值

如果用户已启用,则此值为 true。如果用户已禁用,则此值为 false

federated (可选)

body

列表

与用户关联的联合对象列表。列表中的每个对象都包含 idp_idprotocolsprotocols 是一个对象列表,其中每个对象都包含协议和用户的 protocol_idunique_id。例如

"federated": [
  {
    "idp_id": "efbab5a6acad4d108fec6c63d9609d83",
    "protocols": [
      {"protocol_id": "mapped", "unique_id": "test@example.com"}
    ]
  }
]

id

body

字符串

用户 ID。

links

body

对象

user 资源的链接。

name

body

字符串

用户名。必须在拥有域内唯一。

password_expires_at

body

字符串

密码到期日期和时间。时区为 UTC。

这是一个响应对象属性;不适用于请求。 null 值表示密码永不过期。

3.7 版本新增

选项

body

对象

用户的资源选项。可用的资源选项是 ignore_change_password_upon_first_useignore_password_expiryignore_lockout_failure_attemptslock_passwordmulti_factor_auth_enabledmulti_factor_auth_rules ignore_user_inactivity

状态码
成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

409 - Conflict

此操作与此资源的另一个操作冲突。

示例
{
    "user": {
        "default_project_id": "263fd9",
        "description": "James Doe user",
        "domain_id": "1789d1",
        "email": "jdoe@example.com",
        "enabled": true,
        "federated": [
            {
                "idp_id": "efbab5a6acad4d108fec6c63d9609d83",
                "protocols": [
                    {
                        "protocol_id": "mapped",
                        "unique_id": "test@example.com"
                    }
                ]
            }
        ],
        "id": "ff4e51",
        "links": {
            "self": "https://example.com/identity/v3/users/ff4e51"
        },
        "name": "James Doe",
        "options": {
            "ignore_password_expiry": true
        },
        "password_expires_at": "2016-11-06T15:32:17.000000"
    }
}
GET
/v3/users/{user_id}

显示用户详情

显示用户的详情。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/user

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

响应

参数

名称

入参

类型

描述

user

body

对象

一个 user 对象

default_project_id (可选)

body

字符串

用户的默认项目 ID。

domain_id

body

字符串

域的 ID。

enabled

body

布尔值

如果用户已启用,则此值为 true。如果用户已禁用,则此值为 false

federated (可选)

body

列表

与用户关联的联合对象列表。列表中的每个对象都包含 idp_idprotocolsprotocols 是一个对象列表,其中每个对象都包含协议和用户的 protocol_idunique_id。例如

"federated": [
  {
    "idp_id": "efbab5a6acad4d108fec6c63d9609d83",
    "protocols": [
      {"protocol_id": "mapped", "unique_id": "test@example.com"}
    ]
  }
]

id

body

字符串

用户 ID。

links

body

对象

user 资源的链接。

name

body

字符串

用户名。必须在拥有域内唯一。

password_expires_at

body

字符串

密码到期日期和时间。时区为 UTC。

这是一个响应对象属性;不适用于请求。 null 值表示密码永不过期。

3.7 版本新增

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "user": {
        "default_project_id": "263fd9",
        "domain_id": "1789d1",
        "enabled": true,
        "federated": [],
        "id": "9fe1d3",
        "links": {
            "self": "https://example.com/identity/v3/users/9fe1d3"
        },
        "name": "jsmith",
        "password_expires_at": "2016-11-06T15:32:17.000000"
    }
}
PATCH
/v3/users/{user_id}

更新用户

更新用户。

如果后端驱动程序不支持此功能,则此调用可能会返回 HTTP Not Implemented (501) 响应代码。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/user

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

user

body

对象

一个 user 对象

default_project_id (可选)

body

字符串

用户的新的默认项目 ID。

domain_id (可选)

body

字符串

用户的新的域 ID。更改用户的域的功能现已弃用,将在后续版本中删除。它在大多数 Identity 服务实现中默认情况下已禁用。

enabled(可选)

body

布尔值

启用或禁用用户。启用用户可以进行身份验证并接收授权。禁用用户无法进行身份验证或接收授权。此外,用户持有的所有令牌都将失效。如果您重新启用此用户,预先存在的令牌将不会再次有效。要启用用户,请设置为 true。要禁用用户,请设置为 false。默认值为 true

federated (可选)

body

列表

与用户关联的联合对象列表。列表中的每个对象都包含 idp_idprotocolsprotocols 是一个对象列表,其中每个对象都包含协议和用户的 protocol_idunique_id。例如

"federated": [
  {
    "idp_id": "efbab5a6acad4d108fec6c63d9609d83",
    "protocols": [
      {"protocol_id": mapped, "unique_id": "test@example.com"}
    ]
  }
]

name (可选)

body

字符串

用户的新的名称。必须在所属域内唯一。

密码 (可选)

body

字符串

用户的新的密码。

options (可选)

body

对象

用户的资源选项。可用的资源选项是 ignore_change_password_upon_first_useignore_password_expiryignore_lockout_failure_attemptslock_passwordmulti_factor_auth_enabledmulti_factor_auth_rules ignore_user_inactivity

示例
{
    "user": {
        "default_project_id": "263fd9",
        "enabled": true,
        "options": {
            "ignore_lockout_failure_attempts": true
        }
    }
}

响应

参数

名称

入参

类型

描述

user

body

对象

一个 user 对象

default_project_id (可选)

body

字符串

用户的默认项目 ID。

domain_id

body

字符串

域的 ID。

enabled

body

布尔值

如果用户已启用,则此值为 true。如果用户已禁用,则此值为 false

federated (可选)

body

列表

与用户关联的联合对象列表。列表中的每个对象都包含 idp_idprotocolsprotocols 是一个对象列表,其中每个对象都包含协议和用户的 protocol_idunique_id。例如

"federated": [
  {
    "idp_id": "efbab5a6acad4d108fec6c63d9609d83",
    "protocols": [
      {"protocol_id": "mapped", "unique_id": "test@example.com"}
    ]
  }
]

id

body

字符串

用户 ID。

links

body

对象

user 资源的链接。

name

body

字符串

用户名。必须在拥有域内唯一。

password_expires_at

body

字符串

密码到期日期和时间。时区为 UTC。

这是一个响应对象属性;不适用于请求。 null 值表示密码永不过期。

3.7 版本新增

选项

body

对象

用户的资源选项。可用的资源选项是 ignore_change_password_upon_first_useignore_password_expiryignore_lockout_failure_attemptslock_passwordmulti_factor_auth_enabledmulti_factor_auth_rules ignore_user_inactivity

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

501 - 未实现

服务器无法识别请求方法,或者缺乏满足请求的能力。

示例
{
    "user": {
        "default_project_id": "263fd9",
        "domain_id": "1789d1",
        "enabled": true,
        "federated": [],
        "id": "ff4e51",
        "links": {
            "self": "https://example.com/identity/v3/users/ff4e51"
        },
        "name": "jamesdoe",
        "options": {
            "ignore_lockout_failure_attempts": true
        },
        "password_expires_at": "2016-11-06T15:32:17.000000"
    }
}
DELETE
/v3/users/{user_id}

删除用户

删除一个用户。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/user

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

GET
/v3/users/{user_id}/groups

列出用户所属的组

列出用户所属的组。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/user_groups

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

响应

参数

名称

入参

类型

描述

links

body

对象

指向资源集合的链接。

groups

body

数组

一个 group 对象列表

description

body

字符串

组的描述。

domain_id

body

字符串

组的域 ID。

id

body

字符串

组的 ID。

links

body

对象

指向相关资源的链接。

name

body

字符串

组的名称。

membership_expires_at

body

字符串

组会员资格到期日期和时间。 null 值表示会员资格永不过期。

新增于版本 3.14

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "groups": [
        {
            "description": "Developers cleared for work on all general projects",
            "domain_id": "1789d1",
            "id": "ea167b",
            "links": {
                "self": "https://example.com/identity/v3/groups/ea167b"
            },
            "membership_expires_at": null,
            "name": "Developers"
        },
        {
            "description": "Developers cleared for work on secret projects",
            "domain_id": "1789d1",
            "id": "a62db1",
            "links": {
                "self": "https://example.com/identity/v3/groups/a62db1"
            },
            "membership_expires_at": "2016-11-06T15:32:17.000000",
            "name": "Secure Developers"
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/users/9fe1d3/groups",
        "previous": null,
        "next": null
    }
}
GET
/v3/users/{user_id}/projects

列出用户的项目

列出用户有权访问的项目。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/user_projects

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

响应

状态码
成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

示例
{
    "projects": [
        {
            "description": "description of this project",
            "domain_id": "161718",
            "enabled": true,
            "id": "456788",
            "links": {
                "self": "http://example.com/identity/v3/projects/456788"
            },
            "name": "a project name",
            "parent_id": "212223"
        },
        {
            "description": "description of this project",
            "domain_id": "161718",
            "enabled": true,
            "id": "456789",
            "links": {
                "self": "http://example.com/identity/v3/projects/456789"
            },
            "name": "another domain",
            "parent_id": "212223"
        }
    ],
    "links": {
        "self": "http://example.com/identity/v3/users/313233/projects",
        "previous": null,
        "next": null
    }
}
POST
/v3/users/{user_id}/password

更改用户的密码

更改用户的密码。

注意

此 API 调用不需要令牌进行身份验证。

关系:https://docs.openstack.org/api/openstack-identity/3/rel/user_change_password

请求

参数

名称

入参

类型

描述

user_id

路径

字符串

用户 ID。

user

body

对象

一个 user 对象

original_password

body

字符串

用户的原始密码。

password

body

字符串

用户的新的密码。

示例
{
    "user": {
        "password": "new_secretsecret",
        "original_password": "secretsecret"
    }
}

响应

状态码
成功

代码

原因

204 - No Content

服务器已完成请求。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。