身份 API v3 扩展 (CURRENT)¶
关系¶
以下操作中的条目包含一个关系链接,它显示为有效的 URI,但这些实际上是 URN(统一资源名称),类似于 GUID,只是它使用 URI 语法,因此更易于阅读。这些链接无法解析为任何有效内容,但存在是为了显示关系。
身份 API 扩展¶
此页面描述了这些身份 API v3 扩展
OS-ENDPOINT-POLICY API¶
创建、验证和删除服务端点与策略之间的关联。此类关联使端点能够请求其策略。
要创建、检查或删除关联,您需要通过其在身份服务器中的 ID 引用策略。
该扩展支持以下关联
策略与端点关联。
区域中的策略与服务类型端点关联。
策略与服务类型端点关联。
此顺序反映了策略从最具体到最不具体的顺序。
当端点请求其自身适当的策略时,扩展通过遍历关联方法的有序序列来查找策略。扩展显示它找到的第一个关联的策略。
如果端点的区域有父级,则扩展会以升序检查区域树中的区域关联。对于区域关联,扩展会以升序检查任何父区域。扩展不会组合策略。
关联策略和端点。
如果端点与另一个策略之间已存在关联,则此调用将替换该关联。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
endpoint_id |
路径 |
字符串 |
端点 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
验证策略与端点之间的关联。
也支持此 API 的 HEAD 版本。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
endpoint_id |
路径 |
字符串 |
端点 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
删除策略与端点之间的关联。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
endpoint_id |
路径 |
字符串 |
端点 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
关联策略与任何服务类型端点。
如果服务类型端点与另一个策略之间已存在关联,则此调用将替换该关联。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
service_id |
路径 |
字符串 |
服务 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
验证策略与服务类型端点之间的关联。
也支持此 API 的 HEAD 版本。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
service_id |
路径 |
字符串 |
服务 ID。 |
Response¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
删除策略与服务类型端点之间的关联。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
service_id |
路径 |
字符串 |
服务 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
显示端点的策略。
扩展通过遍历关联方法的有序序列来查找策略。扩展显示它找到的第一个关联的策略。如果端点的区域有父级,则扩展会以升序检查区域树中的区域关联。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy |
body |
对象 |
一个 |
type |
body |
字符串 |
序列化策略 Blob 的 MIME 媒体类型。从身份 API 的角度来看,策略 Blob 可以基于任何技术。在 OpenStack 中, |
blob |
body |
对象 |
策略规则本身,作为一个序列化的 blob。 |
links |
body |
对象 |
|
id |
body |
字符串 |
策略的 ID。 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"policy": {
"blob": {
"foobar_user": [
"role:compute-user"
]
},
"id": "13c92821e4c4476a878d3aae7444f52f",
"links": {
"self": "http://example.com/identity/v3/policies/13c92821e4c4476a878d3aae7444f52f"
},
"type": "application/json"
}
}
检查策略是否与端点关联。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
关联策略与区域中的服务类型端点。
如果区域中的服务与另一个策略之间已存在关联,则此调用将替换该关联。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
service_id |
路径 |
字符串 |
服务 ID。 |
region_id |
路径 |
字符串 |
区域 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
验证策略与区域中的服务类型端点之间的关联。
也支持此 API 的 HEAD 版本。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
service_id |
路径 |
字符串 |
服务 ID。 |
region_id |
路径 |
字符串 |
区域 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
删除策略与区域中的服务类型端点之间的关联。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
service_id |
路径 |
字符串 |
服务 ID。 |
region_id |
路径 |
字符串 |
区域 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
列出当前通过任何关联方法与策略关联的所有端点。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy_id |
路径 |
字符串 |
策略 ID。 |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
links |
body |
对象 |
|
url |
body |
字符串 |
端点 URL。 |
region |
body |
字符串 |
(v3.2 中已弃用) 服务端点的地理位置。 |
下一个 |
body |
字符串 |
|
self |
body |
字符串 |
|
接口 |
body |
字符串 |
接口类型,描述端点的可见性。值包括:- |
service_id |
body |
字符串 |
端点所属服务的 UUID。 |
endpoints |
body |
数组 |
一个 |
id |
body |
字符串 |
端点 UUID。 |
previous |
body |
字符串 |
|
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"endpoints": [
{
"id": "1",
"interface": "public",
"links": {
"self": "http://example.com/identity/v3/endpoints/1"
},
"region": "north",
"service_id": "9242e05f0c23467bbd1cf1f7a6e5e596",
"url": "http://example.com/identity/"
},
{
"id": "1",
"interface": "internal",
"links": {
"self": "http://example.com/identity/v3/endpoints/1"
},
"region": "south",
"service_id": "9242e05f0c23467bbd1cf1f7a6e5e596",
"url": "http://example.com/identity/"
}
],
"links": {
"next": null,
"previous": null,
"self": "http://example.com/identity/v3/OS-ENDPOINT-POLICY/policies/13c92821e4c4476a878d3aae7444f52f/endpoints"
}
}
通过遍历有序的关联方法序列,返回当前与给定端点关联的策略。将返回找到的第一个关联。如果端点的区域有父级,则将以升序检查区域树中的区域关联。
也支持此 API 的 HEAD 版本。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_id |
路径 |
字符串 |
端点 ID。 |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
policy |
body |
对象 |
一个 |
type |
body |
字符串 |
序列化策略 Blob 的 MIME 媒体类型。从身份 API 的角度来看,策略 Blob 可以基于任何技术。在 OpenStack 中, |
blob |
body |
对象 |
策略规则本身,作为一个序列化的 blob。 |
links |
body |
对象 |
|
id |
body |
字符串 |
策略的 ID。 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"policy": {
"blob": {
"foobar_user": [
"role:compute-user"
]
},
"id": "13c92821e4c4476a878d3aae7444f52f",
"links": {
"self": "http://example.com/identity/v3/policies/13c92821e4c4476a878d3aae7444f52f"
},
"type": "application/json"
}
}
OS-OAUTH1 API¶
通过 OAuth 1.0a 规范,提供身份用户将角色委托给第三方消费者的能力。需要身份 API 的 v3.0+。OAuth 派生令牌将提供代表授权用户行事的方式。
概述¶
定义¶
用户:身份 API 服务用户,其角色将被委托的实体,以及授权请求令牌的实体。
请求令牌:消费者用于从用户获取授权,并与 OAuth 验证器交换访问令牌的令牌。
访问令牌:消费者用于代表授权用户请求新的身份 API 令牌,而不是使用用户凭据的令牌。
令牌密钥:令牌用于识别自身的密钥。请求令牌和访问令牌都具有令牌密钥。对于 OpenStack,令牌密钥是令牌 ID。
令牌秘密:消费者用于建立给定令牌所有权的秘密。请求令牌和访问令牌都具有令牌秘密。
OAuth 验证器:必须与相应的请求令牌一起提供以交换访问令牌的字符串。
委托认证流程¶
通过 OAuth 进行委托认证分为五个步骤
身份 API 服务用户创建一个消费者。
消费者获取一个未经授权的请求令牌。
用户授权请求令牌。
消费者用请求令牌交换访问令牌。
允许用户创建消费者。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/consumers
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
description (可选) |
body |
字符串 |
消费者描述。 |
示例¶
{
"consumer": {
"description": "My consumer"
}
}
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
201 - 已创建 |
资源已创建并准备好使用。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
415 - 不支持的媒体类型 |
请求实体具有服务器或资源不支持的媒体类型。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
409 - Conflict |
此操作与此资源的另一个操作冲突。 |
状态:201 已创建
secret 只在创建消费者时返回一次。
示例¶
{
"consumer": {
"secret": "secretsecret",
"description": "My consumer",
"id": "7fea2d",
"links": {
"self": "http://example.com/identity/v3/OS-OAUTH1/consumers/7fea2d"
}
}
}
删除消费者。
删除消费者时,任何相关的请求令牌、访问令牌和身份 API 令牌也将被吊销。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/consumer
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
consumer_id |
路径 |
字符串 |
消费者 UUID。 |
Response¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
415 - 不支持的媒体类型 |
请求实体具有服务器或资源不支持的媒体类型。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
409 - Conflict |
此操作与此资源的另一个操作冲突。 |
列出消费者。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/consumers
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
示例¶
{
"consumers": [
{
"id": "0c2a74",
"links": {
"self": "http://example.com/identity/v3/OS-OAUTH1/consumers/0c2a74"
}
},
{
"description": "My consumer",
"id": "7fea2d",
"links": {
"self": "http://example.com/identity/v3/OS-OAUTH1/consumers/7fea2d"
}
}
],
"links": {
"next": null,
"previous": null,
"self": "http://example.com/identity/v3/OS-OAUTH1/consumers"
}
}
显示消费者详情。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/consumer
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
consumer_id |
路径 |
字符串 |
消费者 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
示例¶
{
"consumer": {
"id": "7fea2d",
"description": "My consumer",
"links": {
"self": "http://example.com/identity/v3/OS-OAUTH1/consumers/7fea2d"
}
}
}
更新消费者的描述。
如果您尝试更新除 description 之外的任何属性,将返回 HTTP 400 Bad Request 错误。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/consumer
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
consumer_id |
路径 |
字符串 |
消费者 UUID。 |
示例¶
{
"consumer": {
"description": "My new consumer"
}
}
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
415 - 不支持的媒体类型 |
请求实体具有服务器或资源不支持的媒体类型。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
409 - Conflict |
此操作与此资源的另一个操作冲突。 |
示例¶
{
"consumer": {
"description": "My new consumer",
"id": "7fea2d",
"links": {
"self": "http://example.com/identity/v3/OS-OAUTH1/consumers/7fea2d"
}
}
}
允许消费者获取未经授权的请求令牌。
支持的签名方法:HMAC-SHA1
消费者必须在请求中提供所有必需的 OAuth 参数。请参阅消费者获取请求令牌。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/request_tokens
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
Requested-Project-Id |
标头 |
字符串 |
所请求项目的 ID。 |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
oauth_token |
body |
字符串 |
身份 API 返回的 OAuth 令牌的密钥值。 |
oauth_token_secret |
body |
字符串 |
与 OAuth 令牌关联的秘密值。 |
oauth_expires_at (可选) |
body |
字符串 |
OAuth 令牌的过期日期和时间。 日期和时间戳格式为 ISO 8601 CCYY-MM-DDThh:mm:ss±hh:mm
如果包含 例如, 如果身份 API 不包含此属性或其值为 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
201 - 已创建 |
资源已创建并准备好使用。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
415 - 不支持的媒体类型 |
请求实体具有服务器或资源不支持的媒体类型。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
409 - Conflict |
此操作与此资源的另一个操作冲突。 |
示例¶
oauth_token=29971f&oauth_token_secret=238eb8&oauth_expires_at=2013-09-11T06:07:51.501805Z
要授权请求令牌,授权用户必须有权访问所请求的项目。成功授权后,将返回 OAuth 验证器代码。消费者通过带外方式从用户接收 OAuth 验证器。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/authorize_request_token
请求¶
示例¶
{
"roles": [
{
"id": "a3b29b"
},
{
"id": "49993e"
}
]
}
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
415 - 不支持的媒体类型 |
请求实体具有服务器或资源不支持的媒体类型。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
409 - Conflict |
此操作与此资源的另一个操作冲突。 |
示例¶
{
"token": {
"oauth_verifier": "8171"
}
}
允许消费者通过交换请求令牌来获取访问令牌。
用户授权请求令牌后,消费者将授权的请求令牌和 OAuth 验证器交换为访问令牌。
支持的签名方法:HMAC-SHA1
消费者必须在请求中提供所有必需的 OAuth 参数。请参阅消费者请求访问令牌。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/access_tokens
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
oauth_token |
body |
字符串 |
身份 API 返回的 OAuth 令牌的密钥值。 |
oauth_token_secret |
body |
字符串 |
与 OAuth 令牌关联的秘密值。 |
oauth_expires_at (可选) |
body |
字符串 |
OAuth 令牌的过期日期和时间。 日期和时间戳格式为 ISO 8601 CCYY-MM-DDThh:mm:ss±hh:mm
如果包含 例如, 如果身份 API 不包含此属性或其值为 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
201 - 已创建 |
资源已创建并准备好使用。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
415 - 不支持的媒体类型 |
请求实体具有服务器或资源不支持的媒体类型。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
409 - Conflict |
此操作与此资源的另一个操作冲突。 |
示例¶
oauth_token=accd36&oauth_token_secret=aa47da&oauth_expires_at=2013-09-11T06:07:51.501805Z
获取访问令牌。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/user_access_token
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
user_id |
路径 |
字符串 |
用户的 UUID。 |
access_token_id |
路径 |
字符串 |
访问令牌的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
示例¶
{
"access_token": {
"consumer_id": "7fea2d",
"id": "6be26a",
"expires_at": "2013-09-11T06:07:51.501805Z",
"links": {
"roles": "http://example.com/identity/v3/users/ce9e07/OS-OAUTH1/access_tokens/6be26a/roles",
"self": "http://example.com/identity/v3/users/ce9e07/OS-OAUTH1/access_tokens/6be26a"
},
"project_id": "b9fca3",
"authorizing_user_id": "ce9e07"
}
}
允许用户吊销访问令牌,从而阻止消费者请求新的身份服务 API 令牌。此外,还吊销通过该访问令牌颁发给消费者的任何身份服务 API 令牌。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/user_access_token
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
user_id |
路径 |
字符串 |
用户的 UUID。 |
access_token_id |
路径 |
字符串 |
访问令牌的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
415 - 不支持的媒体类型 |
请求实体具有服务器或资源不支持的媒体类型。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
409 - Conflict |
此操作与此资源的另一个操作冲突。 |
列出已授权的访问令牌。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/user_access_tokens
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
user_id |
路径 |
字符串 |
用户的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
示例¶
{
"access_tokens": [
{
"consumer_id": "7fea2d",
"id": "6be26a",
"expires_at": "2013-09-11T06:07:51.501805Z",
"links": {
"roles": "http://example.com/identity/v3/users/ce9e07/OS-OAUTH1/access_tokens/6be26a/roles",
"self": "http://example.com/identity/v3/users/ce9e07/OS-OAUTH1/access_tokens/6be26a"
},
"project_id": "b9fca3",
"authorizing_user_id": "ce9e07"
}
],
"links": {
"next": null,
"previous": null,
"self": "http://example.com/identity/v3/users/ce9e07/OS-OAUTH1/access_tokens"
}
}
列出访问令牌的关联角色。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/user_access_token_roles
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
user_id |
路径 |
字符串 |
用户的 UUID。 |
access_token_id |
路径 |
字符串 |
访问令牌的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
415 - 不支持的媒体类型 |
请求实体具有服务器或资源不支持的媒体类型。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
409 - Conflict |
此操作与此资源的另一个操作冲突。 |
示例¶
{
"roles": [
{
"id": "5ad150",
"domain_id": "7cf37b",
"links": {
"self": "http://example.com/identity/v3/roles/5ad150"
},
"name": "admin"
},
{
"id": "a62eb6",
"domain_id": "7cf37b",
"links": {
"self": "http://example.com/identity/v3/roles/a62eb6"
},
"name": "Member"
}
],
"links": {
"next": null,
"previous": null,
"self": "http://example.com/identity/v3/users/ce9e07/OS-OAUTH1/access_tokens/6be26a/roles"
}
}
显示访问令牌的某个角色详情。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH1/1.0/rel/user_access_token_role
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
user_id |
路径 |
字符串 |
用户的 UUID。 |
role_id |
路径 |
字符串 |
角色的 UUID。 |
access_token_id |
路径 |
字符串 |
访问令牌的 UUID。 |
Response¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
示例¶
{
"role": {
"id": "5ad150",
"domain_id": "7cf37b",
"links": {
"self": "http://example.com/identity/v3/roles/5ad150"
},
"name": "admin"
}
}
允许消费者获取身份服务认证令牌。
令牌代表授权用户的委托授权和身份(模拟)。生成的令牌的角色和范围与消费者最初请求的角色和范围匹配。
支持的签名方法:HMAC-SHA1
消费者必须在请求中提供必需的 OAuth 参数。请参阅访问受保护资源。
返回的令牌作用域为所请求的项目和所请求的角色。除了标准令牌响应外,令牌还包含一个 OAuth 特定对象。
令牌中的 OAuth 特定对象示例
"OS-OAUTH1": {
"access_token_id": "cce0b8be7"
}
关系:https://docs.openstack.org/identity/rel/v3/auth_tokens
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
404 - Not Found |
找不到请求的资源。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
400 - 请求错误 |
请求中的某些内容无效。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
OS-OAUTH2 API¶
通过OAuth 2.0 客户端凭据授权规范,为身份用户提供将角色委托给第三方消费者的能力。需要身份 API 的 v3.0+。OAuth2 派生的访问令牌将提供代表授权用户行事的方式。
概述¶
定义¶
用户:使用身份 API 服务的最终用户,其角色将被委托的实体,以及注册客户端的实体。
客户端:代表用户请求受保护资源的应用。当使用 OAuth 2.0 客户端密钥认证时,客户端的凭据通过应用程序凭据 API 创建。当使用 OAuth 2.0 相互 TLS 客户端认证时,客户端等同于 OpenStack 用户。
访问令牌:客户端用于以委托角色请求受保护资源的令牌。
委托认证流程¶
通过 OAuth 2.0 进行委托认证分为四个步骤
身份 API 服务用户创建一个应用程序凭据。当使用 OAuth 2.0 相互 TLS 客户端认证时,此步骤可以忽略。
客户端向 Keystone 上的授权服务器进行身份验证并请求新的访问令牌。
客户端使用访问令牌向 OpenStack 服务 API 发出请求。
Keystone 中间件验证 API 请求中的访问令牌以获取其元数据和有效性,如果令牌处于活动状态,则将请求转发到 OpenStack 服务。
允许用户创建访问令牌。用户通过在 HTTP 请求实体主体中使用“application/x-www-form-urlencoded”格式和 UTF-8 字符编码添加以下参数来向令牌端点发出请求。当使用 OAuth 2.0 客户端密钥认证时,请求应使用包含应用程序凭据信息的基本认证头通过授权服务器进行用户认证。当使用 OAuth 2.0 相互 TLS 客户端认证时,请求应包含参数“client_id”并应使用 TLS 证书。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-OAUTH2/1.0/rel/token
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
grant_type |
body |
字符串 |
值必须设置为“client_credentials”。 |
client_id |
body |
字符串 |
当使用 OAuth 2.0 Mutual-TLS 客户端认证时,该值必须设置为用户 ID。 |
示例¶
grant_type=client_credentials&client_id=12d31647289c45e1b69e57273fce78b4
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
access_token |
body |
字符串 |
授权服务器颁发的认证令牌。 |
token_type |
body |
字符串 |
授权服务器颁发的令牌类型。目前仅支持“Bearer”令牌类型。 |
expires_in |
body |
整数 |
访问令牌的生命周期(以秒为单位)。例如,值“3600”表示访问令牌将在生成响应后一小时内过期。 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
400 - 请求错误 |
请求中的某些内容无效。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
404 - Not Found |
找不到请求的资源。 |
500 - 内部服务器错误 |
服务内部出现问题。 通常不应发生这种情况。 如果发生这种情况,则表示服务器遇到了一些严重问题。 |
状态:200 正常
示例¶
{
"access_token": "gAAAAABhi1cMynG89h8t6TJrxNiZuNzjcIUIxNctoVfuqTw7BpUedLKxjPymClVEnj9GhIT5u2mpjaJATlEAtaa3D6_t8jk_fV-mqo2IUlsmTPTnMwkcjh5FSHQVRdqvDxgY3nSqLA_Hfv-zPmjS5KWX3hmyDE5YWO1ztX6QNVQb4wTPyNL1-7I",
"token_type": "Bearer",
"expires_in": 3600
}
OS-TRUST API¶
信任提供了用户之间特定于项目的角色委托,并可选择模拟。
API 资源¶
信任¶
信任代表用户(委托人)授权将角色委托给另一个用户(受托人),并可选择允许受托人模拟委托人。委托人创建信任后,受托人可以在身份验证请求中指定信任的 id 属性,然后创建表示委托人委托权限的令牌。
信任包含对委托属性的约束。基于信任创建的令牌将传达委托人在指定项目中的角色子集。可选地,信任可能仅在由 expires_at 定义的指定时间段内有效。如果未指定 expires_at,则信任有效直到明确撤销。
impersonation 标志允许委托人选择性地将模拟能力委托给受托人。对于验证令牌的服务,受托人将显示为委托人,尽管令牌也将包含 impersonation 标志以指示此行为正在生效。
在未至少指定一个角色的情况下,不能指定 project_id,反之亦然。换句话说,没有办法隐式地将所有角色委托给受托人,以防止用户意外创建范围远超预期的信任。没有 project_id 或任何委托角色的信任是无范围的,因此不代表对特定资源的授权。
信任是不可变的。如果受托人或委托人希望修改信任的属性,他们应该创建一个新信任并删除旧信任。如果删除信任,任何基于该信任生成的令牌将立即被吊销。
如果委托人失去对任何委托属性的访问权限,则该信任立即失效,并且任何基于该信任生成的令牌将立即被吊销。
信任也可以链式连接,这意味着可以使用信任范围的令牌创建信任。
欲了解更多信息,请参阅使用信任。
使用信任有效地承担了信任中委托的范围。不能指定其他范围属性。
身份验证指定的用户必须与信任的 trustee_user_id 属性匹配。
如果信任将 impersonation 属性设置为 true,则生成的令牌的用户属性也将表示委托人,而不是认证用户(受托人)。
请求¶
示例¶
{
"auth": {
"identity": {
"methods": [
"token"
],
"token": {
"id": "e80b74"
}
},
"scope": {
"OS-TRUST:trust": {
"id": "de0945a"
}
}
}
}
从信任创建的令牌将具有一个 OS-TRUST:trust 部分,其中包含信任的 id、impersonation 标志、trustee_user_id 和 trustor_user_id。
响应¶
示例¶
{
"token": {
"expires_at": "2013-02-27T18:30:59.999999Z",
"issued_at": "2013-02-27T16:30:59.999999Z",
"methods": [
"password"
],
"OS-TRUST:trust": {
"id": "fe0aef",
"impersonation": false,
"links": {
"self": "http://example.com/identity/v3/trusts/fe0aef"
},
"trustee_user": {
"id": "0ca8f6",
"links": {
"self": "http://example.com/identity/v3/users/0ca8f6"
}
},
"trustor_user": {
"id": "bd263c",
"links": {
"self": "http://example.com/identity/v3/users/bd263c"
}
}
},
"user": {
"domain": {
"id": "1789d1",
"links": {
"self": "http://example.com/identity/v3/domains/1789d1"
},
"name": "example.com"
},
"email": "joe@example.com",
"id": "0ca8f6",
"links": {
"self": "http://example.com/identity/v3/users/0ca8f6"
},
"name": "Joe"
}
}
}
从重新委托的信任创建的令牌将具有一个 OS-TRUST:trust 部分,其中包含与常规信任令牌相同的字段,只是添加了 redelegated_trust_id 和 redelegation_count。
{
"token": {
"expires_at": "2013-02-27T18:30:59.999999Z",
"issued_at": "2013-02-27T16:30:59.999999Z",
"methods": [
"password"
],
"OS-TRUST:trust": {
"id": "fe0aef",
"impersonation": false,
"redelegated_trust_id": "3ba234",
"redelegation_count": 2,
"links": {
"self": "http://example.com/identity/v3/trusts/fe0aef"
},
"trustee_user": {
"id": "0ca8f6",
"links": {
"self": "http://example.com/identity/v3/users/0ca8f6"
}
},
"trustor_user": {
"id": "bd263c",
"links": {
"self": "http://example.com/identity/v3/users/bd263c"
}
}
},
"user": {
"domain": {
"id": "1789d1",
"links": {
"self": "http://example.com/identity/v3/domains/1789d1"
},
"name": "example.com"
},
"email": "joe@example.com",
"id": "0ca8f6",
"links": {
"self": "http://example.com/identity/v3/users/0ca8f6"
},
"name": "Joe"
}
}
}
创建信任。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-TRUST/1.0/rel/trusts
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
trust |
body |
对象 |
一个信任对象。 |
impersonation |
body |
布尔值 |
如果设置为 true,则基于信任生成的令牌的用户属性将表示 |
trustee_user_id |
body |
字符串 |
表示能够使用信任的用户。 |
trustor_user_id |
body |
字符串 |
表示创建信任并委托其授权的用户。 |
allow_redelegation (可选) |
body |
布尔值 |
如果设置为 true,则 |
expires_at (可选) |
body |
字符串 |
指定信任的过期时间。信任可以在过期前撤销。如果该值表示过去的时间,则信任被停用。在再委托情况下,它不得超过再委托信任的相应 |
project_id (可选) |
body |
字符串 |
标识委托人正在委托授权的项目。 |
redelegation_count (可选) |
body |
整数 |
指定再委托信任链的最大剩余深度。后续的每个信任都会自动将此字段递减 1。最初颁发可再委托的新信任的 如果信任是由可再委托的信任范围令牌的 |
remaining_uses (可选) |
body |
布尔值 |
指定信任可用于获取令牌的次数。每次通过信任颁发令牌时,此值都会减少。一旦达到 0,将不再通过信任颁发令牌。默认值为 null,表示通过信任颁发的令牌数量没有限制。如果启用了再委托,则不得设置此项。 |
roles (可选) |
body |
数组 |
指定委托人在 角色仅在创建信任时提供,随后作为单独的只读集合可用。每个角色可以通过 |
示例¶
状态:201 已创建
{
"trust": {
"expires_at": "2013-02-27T18:30:59.999999Z",
"impersonation": true,
"allow_redelegation": true,
"project_id": "ddef321",
"roles": [
{
"name": "member"
}
],
"trustee_user_id": "86c0d5",
"trustor_user_id": "a0fdfd"
}
}
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
trust |
body |
对象 |
一个信任对象。 |
id |
body |
字符串 |
信任的 ID。 |
impersonation |
body |
布尔值 |
如果设置为 true,则基于信任生成的令牌的用户属性将表示 |
trustee_user_id |
body |
字符串 |
表示能够使用信任的用户。 |
trustor_user_id |
body |
字符串 |
表示创建信任并委托其授权的用户。 |
allow_redelegation (可选) |
body |
布尔值 |
如果设置为 true,则 |
expires_at (可选) |
body |
字符串 |
指定信任的过期时间。信任可以在过期前撤销。如果该值表示过去的时间,则信任被停用。在再委托情况下,它不得超过再委托信任的相应 |
project_id (可选) |
body |
字符串 |
标识委托人正在委托授权的项目。 |
redelegated_trust_id (可选) |
body |
字符串 |
与再委托信任一起返回,提供信任链中前驱的信息。 |
redelegation_count (可选) |
body |
整数 |
指定再委托信任链的最大剩余深度。后续的每个信任都会自动将此字段递减 1。最初颁发可再委托的新信任的 如果信任是由可再委托的信任范围令牌的 |
remaining_uses (可选) |
body |
布尔值 |
指定信任可用于获取令牌的次数。每次通过信任颁发令牌时,此值都会减少。一旦达到 0,将不再通过信任颁发令牌。默认值为 null,表示通过信任颁发的令牌数量没有限制。如果启用了再委托,则不得设置此项。 |
roles (可选) |
body |
数组 |
指定委托人在 角色仅在创建信任时提供,随后作为单独的只读集合可用。每个角色可以通过 |
roles_links |
body |
对象 |
一个角色链接对象。包括角色的 |
links |
body |
对象 |
一个信任链接对象。包括信任的 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
201 - 已创建 |
资源已创建并准备好使用。 |
错误¶
代码 |
原因 |
|---|---|
400 - 请求错误 |
请求中的某些内容无效。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
404 - Not Found |
找不到请求的资源。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
409 - Conflict |
此操作与此资源的另一个操作冲突。 |
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
415 - 不支持的媒体类型 |
请求实体具有服务器或资源不支持的媒体类型。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
示例¶
状态:201 已创建
{
"trust": {
"expires_at": "2013-02-27T18:30:59.999999Z",
"id": "1ff900",
"impersonation": true,
"redelegation_count": 10,
"links": {
"self": "http://example.com/identity/v3/OS-TRUST/trusts/1ff900"
},
"project_id": "ddef321",
"remaining_uses": null,
"roles": [
{
"id": "ed7b78",
"links": {
"self": "http://example.com/identity/v3/roles/ed7b78"
},
"name": "member"
}
],
"roles_links": {
"next": null,
"previous": null,
"self": "http://example.com/identity/v3/OS-TRUST/trusts/1ff900/roles"
},
"trustee_user_id": "86c0d5",
"trustor_user_id": "a0fdfd"
}
}
列出所有信任。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-TRUST/1.0/rel/trusts
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
trustor_user_id (可选) |
查询 |
字符串 |
按委托人用户 ID 过滤响应。要列出给定委托人的信任,请使用查询字符串(例如, |
trustee_user_id (可选) |
查询 |
字符串 |
按受托人用户 ID 过滤响应。要列出给定受托人的信任,请使用查询字符串(例如, |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
trust |
body |
对象 |
一个信任对象。 |
id |
body |
字符串 |
信任的 ID。 |
impersonation |
body |
布尔值 |
如果设置为 true,则基于信任生成的令牌的用户属性将表示 |
trustee_user_id |
body |
字符串 |
表示能够使用信任的用户。 |
trustor_user_id |
body |
字符串 |
表示创建信任并委托其授权的用户。 |
allow_redelegation (可选) |
body |
布尔值 |
如果设置为 true,则 |
expires_at (可选) |
body |
字符串 |
指定信任的过期时间。信任可以在过期前撤销。如果该值表示过去的时间,则信任被停用。在再委托情况下,它不得超过再委托信任的相应 |
project_id (可选) |
body |
字符串 |
标识委托人正在委托授权的项目。 |
redelegated_trust_id (可选) |
body |
字符串 |
与再委托信任一起返回,提供信任链中前驱的信息。 |
redelegation_count (可选) |
body |
整数 |
指定再委托信任链的最大剩余深度。后续的每个信任都会自动将此字段递减 1。最初颁发可再委托的新信任的 如果信任是由可再委托的信任范围令牌的 |
remaining_uses (可选) |
body |
布尔值 |
指定信任可用于获取令牌的次数。每次通过信任颁发令牌时,此值都会减少。一旦达到 0,将不再通过信任颁发令牌。默认值为 null,表示通过信任颁发的令牌数量没有限制。如果启用了再委托,则不得设置此项。 |
roles (可选) |
body |
数组 |
指定委托人在 角色仅在创建信任时提供,随后作为单独的只读集合可用。每个角色可以通过 |
roles_links |
body |
对象 |
一个角色链接对象。包括角色的 |
links |
body |
对象 |
一个信任链接对象。包括信任的 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
400 - 请求错误 |
请求中的某些内容无效。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
404 - Not Found |
找不到请求的资源。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
示例¶
状态:200 正常
{
"trusts": [
{
"id": "1ff900",
"expires_at": "2013-02-27T18:30:59.999999Z",
"impersonation": true,
"links": {
"self": "http://example.com/identity/v3/OS-TRUST/trusts/1ff900"
},
"project_id": "0f1233",
"trustee_user_id": "86c0d5",
"trustor_user_id": "a0fdfd"
},
{
"id": "f4513a",
"impersonation": false,
"links": {
"self": "http://example.com/identity/v3/OS-TRUST/trusts/f45513a"
},
"project_id": "0f1233",
"trustee_user_id": "86c0d5",
"trustor_user_id": "3cd2ce"
}
]
}
获取 {trust_id} 的信任信息。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-TRUST/1.0/rel/trust
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
trust_id |
路径 |
字符串 |
信任 ID。 |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
trust |
body |
对象 |
一个信任对象。 |
id |
body |
字符串 |
信任的 ID。 |
impersonation |
body |
布尔值 |
如果设置为 true,则基于信任生成的令牌的用户属性将表示 |
trustee_user_id |
body |
字符串 |
表示能够使用信任的用户。 |
trustor_user_id |
body |
字符串 |
表示创建信任并委托其授权的用户。 |
allow_redelegation (可选) |
body |
布尔值 |
如果设置为 true,则 |
expires_at (可选) |
body |
字符串 |
指定信任的过期时间。信任可以在过期前撤销。如果该值表示过去的时间,则信任被停用。在再委托情况下,它不得超过再委托信任的相应 |
project_id (可选) |
body |
字符串 |
标识委托人正在委托授权的项目。 |
redelegated_trust_id (可选) |
body |
字符串 |
与再委托信任一起返回,提供信任链中前驱的信息。 |
redelegation_count (可选) |
body |
整数 |
指定再委托信任链的最大剩余深度。后续的每个信任都会自动将此字段递减 1。最初颁发可再委托的新信任的 如果信任是由可再委托的信任范围令牌的 |
remaining_uses (可选) |
body |
布尔值 |
指定信任可用于获取令牌的次数。每次通过信任颁发令牌时,此值都会减少。一旦达到 0,将不再通过信任颁发令牌。默认值为 null,表示通过信任颁发的令牌数量没有限制。如果启用了再委托,则不得设置此项。 |
roles (可选) |
body |
数组 |
指定委托人在 角色仅在创建信任时提供,随后作为单独的只读集合可用。每个角色可以通过 |
roles_links |
body |
对象 |
一个角色链接对象。包括角色的 |
links |
body |
对象 |
一个信任链接对象。包括信任的 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
400 - 请求错误 |
请求中的某些内容无效。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
404 - Not Found |
找不到请求的资源。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
示例¶
状态:200 正常
{
"trust": {
"id": "987fe8",
"expires_at": "2013-02-27T18:30:59.999999Z",
"impersonation": true,
"links": {
"self": "http://example.com/identity/v3/OS-TRUST/trusts/987fe8"
},
"roles": [
{
"id": "ed7b78",
"links": {
"self": "http://example.com/identity/v3/roles/ed7b78"
},
"name": "member"
}
],
"roles_links": {
"next": null,
"previous": null,
"self": "http://example.com/identity/v3/OS-TRUST/trusts/1ff900/roles"
},
"project_id": "0f1233",
"trustee_user_id": "be34d1",
"trustor_user_id": "56ae32"
}
}
删除 {trust_id} 的信任。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-TRUST/1.0/rel/trust
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
trust_id |
路径 |
字符串 |
信任 ID。 |
响应¶
示例¶
状态:204 无内容
列出由 {trust_id} 信任委托的角色。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-TRUST/1.0/rel/trust_roles
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
trust_id |
路径 |
字符串 |
信任 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
400 - 请求错误 |
请求中的某些内容无效。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
404 - Not Found |
找不到请求的资源。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
示例¶
状态:200 正常
{
"roles": [
{
"id": "c1648e",
"links": {
"self": "http://example.com/identity/v3/roles/c1648e"
},
"name": "manager"
},
{
"id": "ed7b78",
"links": {
"self": "http://example.com/identity/v3/roles/ed7b78"
},
"name": "member"
}
]
}
检查角色是否由信任委托。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-TRUST/1.0/rel/trust_role
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
trust_id |
路径 |
字符串 |
信任 ID。 |
role_id |
路径 |
字符串 |
角色的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
400 - 请求错误 |
请求中的某些内容无效。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
404 - Not Found |
找不到请求的资源。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
示例¶
状态:200 正常
获取由信任委托的角色。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-TRUST/1.0/rel/trust_role
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
trust_id |
路径 |
字符串 |
信任 ID。 |
role_id |
路径 |
字符串 |
角色的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
400 - 请求错误 |
请求中的某些内容无效。 |
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
403 - 禁止 |
策略不允许当前用户执行此操作。 |
404 - Not Found |
找不到请求的资源。 |
405 - 方法不允许 |
此端点的请求方法无效。 |
413 - 请求实体过大 |
请求大小超过服务器愿意或能够处理的限制。 |
503 - 服务不可用 |
服务不可用。这通常是由服务配置错误引起的,导致服务无法成功启动。 |
示例¶
状态:200 正常
{
"role": {
"id": "c1648e",
"links": {
"self": "http://example.com/identity/v3/roles/c1648e"
},
"name": "manager"
}
}
OS-REVOKE API¶
此 API 提供了一个令牌吊销列表。每个事件都表达了一组描述一组不再有效的令牌的条件。需要身份 API 的 v3.2+。
v1.1 中的新功能¶
已弃用使用 expires_at,转而使用 audit_id 和 audit_chain_id。
吊销事件可以使用 audit_id 吊销单个令牌。
吊销事件可以使用 audit_chain_id 吊销所有相关令牌。相关令牌由第一个(非重新作用域)令牌定义。链中的所有令牌都将具有相同的 audit_chain_id。
API 资源¶
吊销事件¶
吊销事件是包含用于评估令牌有效性的条件的 JSON 对象。与吊销事件的所有条件匹配的令牌将被视为已吊销,并且不应被接受为用户授权的证明。
吊销事件没有唯一标识符(ID)。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-REVOKE/1.0/rel/events
列出吊销事件。
响应中返回的 HTTP Date 头反映了最近颁发的吊销事件的时间戳。客户端可以在后续请求中使用此值作为 since 查询参数来限制事件列表。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
since (可选) |
查询 |
字符串 |
用于限制结果列表的时间戳,仅返回在指定时间或之后发生的事件。(RFC 1123 格式日期时间) |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
events |
body |
字符串 |
吊销事件列表。 |
issued_before |
body |
字符串 |
(字符串,ISO 8601 扩展格式日期时间,带微秒)。 在此时间之前颁发的令牌被视为已吊销。 此属性可用于确定过期事件的有效时间。它还可用于查询以过滤事件,以便仅返回自上次请求以来发生的一部分事件。 |
user_id |
body |
字符串 |
吊销表示特定用户身份的令牌。 |
audit_id |
body |
字符串 |
指定分配给令牌本身的唯一标识符(UUID)。 这将仅吊销单个令牌。此属性反映了令牌吊销列表(吊销事件之前使用的机制)的使用,但不利用可能传达授权的数据(令牌 ID)。 如果为 |
audit_chain_id |
body |
字符串 |
根据链中第一个令牌的 如果吊销事件指定了 如果为 |
domain_id |
body |
字符串 |
吊销作用域为特定域的令牌。 |
project_id |
body |
字符串 |
吊销作用域为特定项目的令牌。 |
role_id |
body |
字符串 |
吊销具有特定角色的令牌。 |
OS-TRUST:trust_id |
body |
字符串 |
吊销因特定信任而颁发的令牌,作为 OS-TRUST API 扩展的一部分。 |
OS-OAUTH1:consumer_id |
body |
字符串 |
吊销颁发给特定 OAuth 消费者的令牌,作为 OS-OAUTH1 API 扩展的一部分。 |
expires_at |
body |
字符串 |
指定要吊销的一个或多个令牌的确切过期时间。 此属性对于吊销令牌链非常有用,例如重新作用域现有令牌时产生的令牌链。当基于初始身份验证颁发令牌时,会为其指定一个 expires_at 值。当使用令牌获取另一个令牌时,新令牌将具有与原始令牌相同的 expires_at 值。 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"events": [
{
"issued_before": "2014-02-27T18:30:59.999999Z",
"user_id": "f287de"
},
{
"audit_id": "VcxU2JYqT8OzfUVvrjEITQ",
"issued_before": "2014-02-27T18:30:59.999999Z"
},
{
"audit_chain_id": "VcxU2JYqT8OzfUVvrjEITQ",
"issued_before": "2014-02-27T18:30:59.999999Z",
"project_id": "976bf9"
},
{
"domain_id": "be2c70",
"issued_before": "2014-02-2805:15:59.999999Z",
"user_id": "f287de"
}
]
}
OS-EP-FILTER API¶
此 API 支持使用项目范围创建自定义目录。结果是能够根据所使用的项目宣传特定端点。关联可以通过两种不同的方式完成。第一种是通过在项目和端点之间建立直接关联,这意味着所有作用域到该特定项目的令牌将在服务目录中接收特定端点或一组端点。第二种是创建端点组。端点组是至少包含一个端点属性的过滤器。通过将项目关联到端点组,所有作用域到该项目的服务目录都将包含与端点组中定义的属性匹配的端点。使用端点组是一种将端点或一组端点动态关联到特定项目的方式。
API 资源¶
端点组¶
端点组表示具有相同特性(例如 service_id、interface 或 region_id)的服务端点的动态集合。任何端点属性都可以用作过滤器的一部分。
一个示例用例是为特定项目授予对特定服务端点的访问权限。当用户对该项目进行作用域令牌身份验证时,他们会获得该服务的端点,因为该关联根据过滤器匹配了端点的属性。继续此示例,假设我们希望在服务目录中为特定项目宣传一组特定的端点。我们可以创建一个端点组,根据其接口类型和服务 ID 明确过滤端点。
{
"endpoint_group": {
"description": "endpoint group description",
"filters": {
"interface": "admin",
"service_id": "1b501a"
},
"name": "endpoint group name"
}
}
这意味着一个端点组将只返回接口类型为 admin 且对应服务 ID 为 1b501a 的端点。
创建一个新的端点组过滤器,它表示具有相同特征的服务端点的动态集合
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_groups
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name |
body |
字符串 |
端点组的名称。 |
filters |
body |
对象 |
描述端点组执行的过滤。使用的过滤器必须是 |
description (可选) |
body |
字符串 |
端点组描述。 |
示例¶
{
"endpoint_group": {
"description": "endpoint group description",
"filters": {
"interface": "admin",
"service_id": "1b501a"
},
"name": "endpoint group name"
}
}
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
201 - 已创建 |
资源已创建并准备好使用。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:201 已创建
{
"endpoint_group": {
"description": "endpoint group description",
"filters": {
"interface": "admin",
"service_id": "1b501a"
},
"id": "ac4861",
"links": {
"self": "http://example.com/identity/v3/OS-EP-FILTER/endpoint_groups/ac4861"
},
"name": "endpoint group name"
}
}
显示端点组的详细信息。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_group
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_group_id |
路径 |
字符串 |
端点组的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:200 正常
{
"endpoint_group": {
"description": "endpoint group description",
"filters": {
"interface": "admin",
"service_id": "1b501a"
},
"id": "ac4861",
"links": {
"self": "http://example.com/identity/v3/OS-EP-FILTER/endpoint_groups/ac4861"
},
"name": "endpoint group name"
}
}
确定端点组是否存在。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_group
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_group_id |
路径 |
字符串 |
端点组的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:200 正常
修改端点组的属性。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_group
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_group_id |
路径 |
字符串 |
端点组的 UUID。 |
name |
body |
字符串 |
端点组的名称。 |
filters |
body |
对象 |
描述端点组执行的过滤。使用的过滤器必须是 |
description (可选) |
body |
字符串 |
端点组描述。 |
示例¶
{
"endpoint_group": {
"filters": {
"interface": "public"
}
}
}
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:200 正常
{
"endpoint_group": {
"description": "endpoint group description",
"filters": {
"interface": "public",
"service_id": "1b501a"
},
"id": "ac4861",
"links": {
"self": "http://example.com/identity/v3/OS-EP-FILTER/endpoint_groups/ac4861"
},
"name": "endpoint group name"
}
}
删除一个端点组。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_group
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_group_id |
路径 |
字符串 |
端点组的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
状态:204 无内容
列出所有可用的端点组。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_groups
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
name (可选) |
查询 |
字符串 |
按端点组名称过滤响应。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:200 正常
{
"endpoint_groups": [
{
"endpoint_group": {
"description": "endpoint group description #1",
"filters": {
"interface": "admin",
"service_id": "1b501a"
},
"id": "ac4861",
"links": {
"self": "http://example.com/identity/v3/OS-EP-FILTER/endpoint_groups/ac4861"
},
"name": "endpoint group name #1"
}
},
{
"endpoint_group": {
"description": "endpoint group description #2",
"filters": {
"interface": "admin"
},
"id": "3de68c",
"links": {
"self": "http://example.com/identity/v3/OS-EP-FILTER/endpoint_groups/3de68c"
},
"name": "endpoint group name #2"
}
}
],
"links": {
"self": "https://example.com/identity/v3/OS-EP-FILTER/endpoint_groups",
"previous": null,
"next": null
}
}
项目与端点关联¶
如前所述,项目可以直接或通过使用端点组与端点关联。以下 API 调用描述了如何将项目与单个端点和端点组关联。
创建 project_id 和 endpoint_id 之间的直接关联。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/project_endpoint
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
project_id |
路径 |
字符串 |
项目的 UUID。 |
endpoint_id |
路径 |
字符串 |
端点 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:204 无内容
验证 project_id 和 endpoint_id 之间是否存在关联。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/project_endpoint
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
project_id |
路径 |
字符串 |
项目的 UUID。 |
endpoint_id |
路径 |
字符串 |
端点 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:204 无内容
移除 project_id 和 endpoint_id 之间的直接关联。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/project_endpoint
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
project_id |
路径 |
字符串 |
项目的 UUID。 |
endpoint_id |
路径 |
字符串 |
端点 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:204 无内容
返回当前与 project_id 关联的所有端点。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/project_endpoints
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
project_id |
路径 |
字符串 |
项目的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:200 正常
{
"endpoints": [
{
"id": "6fedc0",
"interface": "public",
"url": "http://example.com/identity/",
"region": "north",
"links": {
"self": "http://example.com/identity/v3/endpoints/6fedc0"
},
"service_id": "1b501a"
},
{
"id": "6fedc0",
"interface": "internal",
"region": "south",
"url": "http://example.com/identity/",
"links": {
"self": "http://example.com/identity/v3/endpoints/6fedc0"
},
"service_id": "1b501a"
}
],
"links": {
"self": "http://example.com/identity/v3/OS-EP-FILTER/projects/263fd9/endpoints",
"previous": null,
"next": null
}
}
返回当前与 endpoint_id 关联的所有项目。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_projects
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_id |
路径 |
字符串 |
端点 ID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:200 正常
{
"projects": [
{
"domain_id": "1789d1",
"enabled": true,
"id": "263fd9",
"links": {
"self": "http://example.com/identity/v3/projects/263fd9"
},
"name": "a project name 1",
"description": "a project description 1"
},
{
"domain_id": "1789d1",
"enabled": true,
"id": "61a1b7",
"links": {
"self": "http://example.com/identity/v3/projects/61a1b7"
},
"name": "a project name 2",
"description": "a project description 2"
}
],
"links": {
"self": "http://example.com/identity/v3/OS-EP-FILTER/endpoints/6fedc0/projects",
"previous": null,
"next": null
}
}
项目与端点组关联¶
项目可以通过与单个端点组关联来与多个端点关联。所有与端点组中的过滤器匹配的端点都将与项目关联。以下 API 调用描述了如何将项目与端点组关联。
创建 endpoint_group_id 和 project_id 之间的关联。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_group_project
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_group_id |
路径 |
字符串 |
端点组的 UUID。 |
project_id |
路径 |
字符串 |
项目的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:204 无内容
验证 project_id 和 endpoint_group_id 之间是否存在关联。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_group_project
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_group_id |
路径 |
字符串 |
端点组的 UUID。 |
project_id |
路径 |
字符串 |
项目的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:200 正常
{
"project": {
"domain_id": "1789d1",
"enabled": true,
"id": "263fd9",
"links": {
"self": "http://example.com/identity/v3/projects/263fd9"
},
"name": "project name #1",
"description": "project description #1"
}
}
验证 project_id 和 endpoint_group_id 之间是否存在关联。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_group_project
请求参数¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_group_id |
路径 |
字符串 |
端点组的 UUID。 |
project_id |
路径 |
字符串 |
项目的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:200 正常
移除 project_id 和 endpoint_group_id 之间的关联。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_group_project
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_group_id |
路径 |
字符串 |
端点组的 UUID。 |
project_id |
路径 |
字符串 |
项目的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:204 无内容
返回当前与 endpoint_group_id 关联的所有项目。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_group_projects
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_group_id |
路径 |
字符串 |
端点组的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:200 正常
{
"projects": [
{
"domain_id": "1789d1",
"enabled": true,
"id": "263fd9",
"links": {
"self": "http://example.com/identity/v3/projects/263fd9"
},
"name": "a project name 1",
"description": "a project description 1"
},
{
"domain_id": "1789d1",
"enabled": true,
"id": "61a1b7",
"links": {
"self": "http://example.com/identity/v3/projects/61a1b7"
},
"name": "a project name 2",
"description": "a project description 2"
}
],
"links": {
"self": "http://example.com/identity/v3/OS-EP-FILTER/endpoints/6fedc0/projects",
"previous": null,
"next": null
}
}
返回当前与 endpoint_group_id 关联的所有端点。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/endpoint_group_endpoints
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
endpoint_group_id |
路径 |
字符串 |
端点组的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:200 正常
{
"endpoints": [
{
"enabled": true,
"id": "6fedc0"
"interface": "admin",
"legacy_endpoint_id": "6fedc0",
"links": {
"self": "http://example.com/identity/v3/endpoints/6fedc0"
},
"region": "RegionOne",
"service_id": "1b501a",
"url": "https://:9292"
},
{
"enabled": true,
"id": "b501aa"
"interface": "internal",
"legacy_endpoint_id": "b501aa",
"links": {
"self": "http://example.com/identity/v3/endpoints/b501aa"
},
"region": "RegionOne",
"service_id": "1b501a",
"url": "https://:9292"
},
{
"enabled": true,
"id": "b7c573"
"interface": "public",
"legacy_endpoint_id": "b7c573",
"links": {
"self": "http://example.com/identity/v3/endpoints/b7c573"
},
"region": "RegionOne",
"service_id": "1b501a",
"url": "https://:9292"
}
],
"links": {
"self": "http://example.com/identity/v3/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}/endpoints",
"previous": null,
"next": null
}
}
返回当前与 project_id 关联的所有端点组。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-EP-FILTER/1.0/rel/project_endpoint_groups
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
project_id |
路径 |
字符串 |
项目的 UUID。 |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
示例¶
状态:200 正常
{
"endpoint_groups": [
{
"endpoint_group": {
"description": "endpoint group description #1",
"filters": {
"interface": "admin",
"service_id": "1b501a"
},
"id": "ac4861",
"links": {
"self": "http://example.com/identity/v3/OS-EP-FILTER/endpoint_groups/ac4861"
},
"name": "endpoint group name #1"
}
},
{
"endpoint_group": {
"description": "endpoint group description #2",
"filters": {
"interface": "admin"
},
"id": "3de68c",
"links": {
"self": "http://example.com/identity/v3/OS-EP-FILTER/endpoint_groups/3de68c"
},
"name": "endpoint group name #2"
}
}
],
"links": {
"self": "https://example.com/identity/v3/OS-EP-FILTER/endpoint_groups",
"previous": null,
"next": null
}
}
OS-FEDERATION API¶
提供用户管理身份提供者 (IdPs) 的能力,并建立一套规则来将联合协议属性映射到身份 API 属性。需要 Identity API v3.0+。
1.4 版新增功能¶
对应 Identity API v3.12 版本。
添加 remote_id_attribute 作为协议的属性。
1.3 版新增功能¶
对应 Identity API v3.5 版本。
添加了特定于身份提供者的 websso 路由。
1.2 版新增功能¶
对应 Identity API v3.4 版本。
添加 websso 路由。
1.1 版新增功能¶
对应 Identity API v3.3 版本。这些功能自2014年9月4日起被认为是稳定的。
弃用列表项目和域,转而使用 Identity API v3.3 中提供的核心功能。
引入了一种将身份令牌交换为 SAML 断言的机制。
引入了一种检索身份提供者元数据的机制。
定义¶
可信身份提供者:在身份 API 中设置的、受信任提供已验证用户信息的一个身份提供者。
服务提供者:向主体或其他系统实体提供服务的系统实体,在此情况下,OpenStack 身份 API 是服务提供者。
属性映射:联合协议为已认证身份传递的用户信息称为
属性。这些属性可能与身份 API 概念不直接对齐。为了克服这种不匹配,可以在发送方(第三方身份提供者)、消费方(身份 API 服务)或双方进行映射。协议:能够执行联合身份认证的协议。例如,OpenID Connect 或 SAML 2.0 协议。
API 资源¶
身份提供者¶
/v3/OS-FEDERATION/identity_providers
身份提供者 (IdP) 是身份 API 信任用于验证身份的第三方服务。
可选属性
domain_id(字符串)与 IdP 关联的域的 ID。
如果客户端未指定值,服务将自动创建一个域并将其与 IdP 关联。
domain_id不是唯一的,因此用户可以将多个 IdP 链接到一个域。description(字符串)描述身份提供者。
如果客户端未指定值,服务将把此值默认为
null。enabled(布尔值)指示此身份提供者是否应接受联合身份验证请求。
如果客户端未指定值,服务将把此值默认为
false。remote_ids(列表)来自身份提供者的有效远程 IdP 实体值。如果客户端未指定值,则列表将为空。
协议¶
/v3/OS-FEDERATION/identity_providers/{idp_id}/protocols
协议条目包含指示对给定传入请求使用哪个映射规则的信息。一个 IdP 可以有多个支持的协议。
必需属性
mapping_id(字符串)指示应使用哪个映射来处理联合身份验证请求。
可选属性
remote_id_attribute(字符串)从 HTTPD 环境中获取身份提供者实体 ID 的键。对于 mod_shib,这将是 Shib-Identity-Provider。对于 mod_auth_openidc,这可以是 HTTP_OIDC_ISS。对于 mod_auth_mellon,这可以是 MELLON_IDP。这将覆盖 keystone.conf 中提供的默认值。
映射¶
/v3/OS-FEDERATION/mappings
一个 mapping 是一组将联合协议属性映射到身份 API 对象的规则。每个协议的身份提供者可以指定一个 mapping。映射只是一组 rules。
必需属性
rules(对象列表)每个对象都包含一个将属性映射到身份 API 概念的规则。规则包含
remote属性描述和目标local属性。local(对象列表)引用本地身份 API 资源,例如
group或user,远程属性将映射到其中。每个对象都有以下两种结构之一。
要将远程属性值直接映射到本地属性,请识别本地资源类型和属性
[ { "local": [ { "user": { "name": "{0}" } } ], } ]
如果在处理断言时缺少
user属性,服务器会尝试直接映射REMOTE_USER环境变量。如果此变量也不可用,服务器将返回 HTTP401 Unauthorized错误。如果
user具有type属性设置为local并且指定了域,则该用户被视为存在于本地 keystone 后端,服务器将尝试从身份后端获取用户详细信息(id、name、roles、groups)。但是,如果用户在后端不存在,服务器将返回相应的 HTTP 错误代码。
如果在本地规则中
type属性未设置为local且未指定域,则该用户被视为临时用户,并成为身份提供者域的成员。用户对象映射到现有本地用户的示例
[ { "local": [ { "user": { "name": "username", "type": "local", "domain": { "name": "domain_name" } } } ], } ]
对于属性类型和值映射,请识别本地资源类型、属性和值
[ { "local": [ { "group": { "id": "89678b" } } ], } ]
这通过在指定组上分配角色,为临时用户分配授权属性。用户不会被添加到组中,但在令牌的有效期内,他们将获得与在组中相同的授权。
[ { "local": [ { "group_ids": "{0}" } ], } ]
通过提供组ID列表,也可以映射多个组。这些组ID也可以进行白名单/黑名单处理。
remote(对象列表)必须至少包含一个对象。
如果包含多个对象,则仅当所有远程属性匹配时才应用本地属性。
除非使用
any_one_of或not_one_of指定约束,否则由type标识的值始终直接传递。type(字符串)这表示一个断言类型关键字。
any_one_of(字符串列表)这与
not_any_of互斥。仅当指定的字符串中的任何一个出现在远程属性
type中时,规则才匹配。not_any_of(字符串列表)这与
any_one_of互斥。如果指定的字符串中的任何一个出现在远程属性
type中,则不匹配该规则。regex(布尔值)如果为
true,则每个字符串都将作为针对远程属性type的正则表达式搜索进行评估。
blacklist和whitelist规则总是与type结合使用。blacklist(字符串列表)这与
whitelist互斥。该规则作为过滤器,从远程属性
type中移除任何指定的字符串。whitelist(字符串列表)这与
blacklist互斥。该规则作为过滤器,只允许远程属性
type中指定的字符串通过。
服务提供商¶
/v3/OS-FEDERATION/service_providers
服务提供商是身份服务信任的第三方服务。
必需属性
auth_url(字符串)
指定用户认证后可检索令牌的受保护 URL。
sp_url(字符串)
指定应将断言发送到的远程对等方的 URL。
可选属性
description(字符串)
描述服务提供商
如果客户端未指定值,服务可能将此值默认为 null。
enabled(布尔值)
指示云管理员是否启用了突发到此服务提供商的功能。如果设置为 false,则 SP 不会出现在目录中,并且生成断言的请求将导致 403 错误。如果客户端未指定值,服务将将其默认为 false。
relay_state_prefix(字符串)
指示服务提供商在 ECP 封装的 SAML 消息中使用的中继状态前缀。
如果客户端未指定值,服务将把此值默认为 ss:mem:。
API¶
注册一个用于认证联合用户的身份提供者。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/identity_provider
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
authorization_ttl(可选) |
body |
整数 |
通过映射传递并持久化在数据库中的组成员资格的有效时长(分钟)。如果未设置,将使用 keystone 中配置的默认值(如果启用)。 |
domain_id |
body |
字符串 |
与身份提供者关联的域的 ID。通过身份提供者进行身份验证的联合用户将在指定的域下创建。 |
description (可选) |
body |
字符串 |
身份提供者描述 |
enabled |
body |
bool |
身份提供者是否启用 |
id |
路径 |
字符串 |
身份提供者ID |
remote_ids |
body |
数组 |
身份提供者远程唯一 ID 列表 |
由于一个域只能关联一个身份提供者,如果指定的 domain_id 已映射到现有的身份提供者,将返回 409 响应代码。
示例¶
{
"identity_provider": {
"domain_id": "1789d1",
"description": "Stores ACME identities.",
"remote_ids": ["acme_id_1", "acme_id_2"],
"enabled": true
}
}
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
authorization_ttl(可选) |
body |
整数 |
通过映射传递并持久化在数据库中的组成员资格的有效时长(分钟)。如果未设置,将使用 keystone 中配置的默认值(如果启用)。 |
domain_id |
body |
字符串 |
与身份提供者关联的域的 ID。通过身份提供者进行身份验证的联合用户将在指定的域下创建。 |
description (可选) |
body |
字符串 |
身份提供者描述 |
enabled |
body |
bool |
身份提供者是否启用 |
id |
body |
字符串 |
身份提供者唯一ID |
links |
body |
对象 |
包含身份提供者资源及其协议的 URI 的链接 |
remote_ids |
body |
数组 |
身份提供者远程唯一 ID 列表 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
201 - 已创建 |
资源已创建并准备好使用。 |
示例¶
{
"identity_provider": {
"domain_id": "1789d1",
"description": "Stores ACME identities",
"remote_ids": ["acme_id_1", "acme_id_2"],
"enabled": true,
"id": "ACME",
"links": {
"protocols": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME/protocols",
"self": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME"
}
}
}
列出已注册的身份提供者。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/identity_providers
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id (可选) |
查询 |
字符串 |
按身份提供者的 ID 属性筛选 |
enabled(可选) |
查询 |
bool |
按身份提供者的启用属性筛选 |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
身份提供者 |
body |
数组 |
身份提供者列表 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"identity_providers": [
{
"domain_id": "1789d1",
"description": "Stores ACME identities",
"remote_ids": ["acme_id_1", "acme_id_2"],
"enabled": true,
"id": "ACME",
"links": {
"protocols": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME/protocols",
"self": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME"
}
},
{
"domain_id": "2890e2",
"description": "Stores contractor identities",
"remote_ids": ["sore_id_1", "store_id_2"],
"enabled": false,
"id": "ACME-contractors",
"links": {
"protocols": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME-contractors/protocols",
"self": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME-contractors"
}
}
],
"links": {
"next": null,
"previous": null,
"self": "http://example.com/identity/v3/OS-FEDERATION/identity_providers"
}
}
获取已注册的身份提供者。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/identity_provider
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
路径 |
字符串 |
身份提供者ID |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
authorization_ttl(可选) |
body |
整数 |
通过映射传递并持久化在数据库中的组成员资格的有效时长(分钟)。如果未设置,将使用 keystone 中配置的默认值(如果启用)。 |
domain_id |
body |
字符串 |
与身份提供者关联的域的 ID。通过身份提供者进行身份验证的联合用户将在指定的域下创建。 |
description (可选) |
body |
字符串 |
身份提供者描述 |
enabled |
body |
bool |
身份提供者是否启用 |
id |
body |
字符串 |
身份提供者唯一ID |
links |
body |
对象 |
包含身份提供者资源及其协议的 URI 的链接 |
remote_ids |
body |
数组 |
身份提供者远程唯一 ID 列表 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"identity_provider": {
"authorization_ttl": null,
"domain_id": "1789d1",
"description": "Stores ACME identities",
"remote_ids": ["acme_id_1", "acme_id_2"],
"enabled": false,
"id": "ACME",
"links": {
"protocols": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME/protocols",
"self": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME"
}
}
}
当删除身份提供者时,由该身份提供者生成的任何令牌都将被撤销。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/identity_provider
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
路径 |
字符串 |
身份提供者ID |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
当身份提供者被禁用时,由该身份提供者生成的所有令牌都将被吊销。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/identity_provider
请求¶
除了 domain_id,身份提供者的任何属性都可以在请求正文中传递。要更新 domain_id,您需要删除并重新创建身份提供者。如果请求中包含 domain_id,将返回 400 响应代码。
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
路径 |
字符串 |
身份提供者ID |
示例¶
{
"identity_provider": {
"remote_ids": ["beta_id_1", "beta_id_2"],
"enabled": true
}
}
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
authorization_ttl(可选) |
body |
整数 |
通过映射传递并持久化在数据库中的组成员资格的有效时长(分钟)。如果未设置,将使用 keystone 中配置的默认值(如果启用)。 |
domain_id |
body |
字符串 |
与身份提供者关联的域的 ID。通过身份提供者进行身份验证的联合用户将在指定的域下创建。 |
description (可选) |
body |
字符串 |
身份提供者描述 |
enabled |
body |
bool |
身份提供者是否启用 |
id |
body |
字符串 |
身份提供者唯一ID |
links |
body |
对象 |
包含身份提供者资源及其协议的 URI 的链接 |
remote_ids |
body |
数组 |
身份提供者远程唯一 ID 列表 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"identity_provider": {
"authorization_ttl": null,
"domain_id": "1789d1",
"description": "Beta dev idp",
"remote_ids": ["beta_id_1", "beta_id_2"],
"enabled": true,
"id": "ACME",
"links": {
"protocols": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME/protocols",
"self": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME"
}
}
}
向身份提供者添加协议和属性映射。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/identity_provider_protocol
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
idp_id |
路径 |
字符串 |
身份提供者ID |
protocol_id |
路径 |
字符串 |
联合协议ID |
协议 |
body |
对象 |
联合协议对象 |
示例¶
{
"protocol": {
"mapping_id": "xyz234"
}
}
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
协议 |
body |
对象 |
联合协议对象 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
201 - 已创建 |
资源已创建并准备好使用。 |
示例¶
{
"protocol": {
"id": "saml2",
"links": {
"identity_provider": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME",
"self": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME/protocols/saml2"
},
"mapping_id": "xyz234"
}
}
列出身份提供者的所有协议和属性映射。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/identity_provider_protocols
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
路径 |
字符串 |
身份提供者ID |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
协议 |
body |
数组 |
联合协议列表 |
links |
body |
对象 |
包含联合协议集合 URI 的链接 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"links": {
"next": null,
"previous": null,
"self": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME/protocols"
},
"protocols": [
{
"id": "saml2",
"links": {
"identity_provider": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME",
"self": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME/protocols/saml2"
},
"mapping_id": "xyz234"
}
]
}
获取身份提供者的协议和属性映射。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/identity_provider_protocol
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
idp_id |
路径 |
字符串 |
身份提供者ID |
protocol_id |
路径 |
字符串 |
联合协议ID |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
协议 |
body |
对象 |
联合协议对象 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"protocol": {
"id": "saml2",
"links": {
"identity_provider": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME",
"self": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME/protocols/saml2"
},
"mapping_id": "xyz234"
}
}
更新身份提供者和协议的属性映射。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/identity_provider_protocol
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
idp_id |
路径 |
字符串 |
身份提供者ID |
protocol_id |
路径 |
字符串 |
联合协议ID |
协议 |
body |
对象 |
联合协议对象 |
示例¶
{
"protocol": {
"mapping_id": "xyz234"
}
}
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
协议 |
body |
对象 |
联合协议对象 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"protocol": {
"id": "saml2",
"links": {
"identity_provider": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME",
"self": "http://example.com/identity/v3/OS-FEDERATION/identity_providers/ACME/protocols/saml2"
},
"mapping_id": "xyz234"
}
}
从身份提供者删除协议和属性映射。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/identity_provider_protocol
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
idp_id |
路径 |
字符串 |
身份提供者ID |
protocol_id |
路径 |
字符串 |
联合协议ID |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
创建联合映射。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/mapping
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
路径 |
字符串 |
联合映射唯一ID |
rules |
body |
对象 |
用于将远程用户映射到本地用户的规则列表 |
示例¶
{
"mapping": {
"rules": [
{
"local": [
{
"user": {
"name": "{0}"
}
},
{
"group": {
"id": "0cd5e9"
}
}
],
"remote": [
{
"type": "UserName"
},
{
"type": "orgPersonType",
"not_any_of": [
"Contractor",
"Guest"
]
}
]
}
]
}
}
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
body |
字符串 |
联合映射唯一ID |
links |
body |
对象 |
指向映射所在 URI 的链接 |
rules |
body |
对象 |
用于将远程用户映射到本地用户的规则列表 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
201 - 已创建 |
资源已创建并准备好使用。 |
示例¶
{
"mapping": {
"id": "ACME",
"links": {
"self": "http://example.com/identity/v3/OS-FEDERATION/mappings/ACME"
},
"rules": [
{
"local": [
{
"user": {
"name": "{0}"
}
},
{
"group": {
"id": "0cd5e9"
}
}
],
"remote": [
{
"type": "UserName"
},
{
"type": "orgPersonType",
"not_any_of": [
"Contractor",
"Guest"
]
}
]
}
]
}
}
获取特定的联合映射。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/mapping
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
路径 |
字符串 |
联合映射唯一ID |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
body |
字符串 |
联合映射唯一ID |
links |
body |
对象 |
指向映射所在 URI 的链接 |
rules |
body |
对象 |
用于将远程用户映射到本地用户的规则列表 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"mapping": {
"id": "ACME",
"links": {
"self": "http://example.com/identity/v3/OS-FEDERATION/mappings/ACME"
},
"rules": [
{
"local": [
{
"user": {
"name": "{0}"
}
},
{
"group": {
"id": "0cd5e9"
}
}
],
"remote": [
{
"type": "UserName"
},
{
"type": "orgPersonType",
"not_any_of": [
"Contractor",
"Guest"
]
}
]
}
]
}
}
更新联合映射。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/mapping
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
路径 |
字符串 |
联合映射唯一ID |
rules |
body |
对象 |
用于将远程用户映射到本地用户的规则列表 |
示例¶
{
"mapping": {
"rules": [
{
"local": [
{
"user": {
"name": "{0}"
}
},
{
"group": {
"id": "0cd5e9"
}
}
],
"remote": [
{
"type": "UserName"
},
{
"type": "orgPersonType",
"any_one_of": [
"Contractor",
"SubContractor"
]
}
]
}
]
}
}
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
body |
字符串 |
联合映射唯一ID |
links |
body |
对象 |
指向映射所在 URI 的链接 |
rules |
body |
对象 |
用于将远程用户映射到本地用户的规则列表 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"mapping": {
"id": "ACME",
"links": {
"self": "http://example.com/identity/v3/OS-FEDERATION/mappings/ACME"
},
"rules": [
{
"local": [
{
"user": {
"name": "{0}"
}
},
{
"group": {
"id": "0cd5e9"
}
}
],
"remote": [
{
"type": "UserName"
},
{
"type": "orgPersonType",
"any_one_of": [
"Contractor",
"SubContractor"
]
}
]
}
]
}
}
列出所有联合映射。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/mappings
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
links |
body |
对象 |
链接到映射集合所在的 URI |
映射 |
body |
数组 |
联合映射集合 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"links": {
"next": null,
"previous": null,
"self": "http://example.com/identity/v3/OS-FEDERATION/mappings"
},
"mappings": [
{
"id": "ACME",
"links": {
"self": "http://example.com/identity/v3/OS-FEDERATION/mappings/ACME"
},
"rules": [
{
"local": [
{
"user": {
"name": "{0}"
}
},
{
"group": {
"id": "0cd5e9"
}
}
],
"remote": [
{
"type": "UserName"
},
{
"type": "orgPersonType",
"any_one_of": [
"Contractor",
"SubContractor"
]
}
]
}
]
}
]
}
移除特定的联合映射。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/mapping
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
路径 |
字符串 |
联合映射唯一ID |
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
创建服务提供商实体。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/service_provider
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
auth_url |
body |
字符串 |
用于身份验证的 URL |
description (可选) |
body |
字符串 |
服务提供商的描述 |
enabled |
body |
bool |
服务提供者是否启用 |
id |
路径 |
字符串 |
服务提供商唯一ID |
sp_url |
body |
字符串 |
服务提供商的 URL |
示例¶
{
"service_provider": {
"auth_url": "https://example.com/identity/v3/OS-FEDERATION/identity_providers/acme/protocols/saml2/auth",
"description": "Remote Service Provider",
"enabled": true,
"sp_url": "https://example.com/identity/Shibboleth.sso/SAML2/ECP"
}
}
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
auth_url |
body |
字符串 |
用于身份验证的 URL |
description (可选) |
body |
字符串 |
服务提供商的描述 |
enabled |
body |
bool |
服务提供者是否启用 |
id |
body |
字符串 |
服务提供商唯一ID |
links |
body |
字符串 |
指向服务提供商所在 URI 的链接 |
中继状态前缀 |
body |
字符串 |
RelayState SAML 属性的前缀 |
sp_url |
body |
字符串 |
服务提供商的 URL |
状态码¶
成功¶
代码 |
原因 |
|---|---|
201 - 已创建 |
资源已创建并准备好使用。 |
示例¶
{
"service_provider": {
"auth_url": "https://example.com/identity/v3/OS-FEDERATION/identity_providers/acme/protocols/saml2/auth",
"description": "Remote Service Provider",
"enabled": true,
"id": "ACME",
"links": {
"self": "https://example.com/identity/v3/OS-FEDERATION/service_providers/ACME"
},
"relay_state_prefix": "ss:mem:",
"sp_url": "https://example.com/identity/Shibboleth.sso/SAML2/ECP"
}
}
列出所有服务提供程序。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/service_providers
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
links |
body |
字符串 |
指向服务提供商集合所在 URI 的链接 |
service_providers |
body |
数组 |
服务提供商列表 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"links": {
"next": null,
"previous": null,
"self": "http://example.com/identity/v3/OS-FEDERATION/service_providers"
},
"service_providers": [
{
"auth_url": "https://example.com/identity/v3/OS-FEDERATION/identity_providers/acme/protocols/saml2/auth",
"description": "Stores ACME identities",
"enabled": true,
"id": "ACME",
"links": {
"self": "http://example.com/identity/v3/OS-FEDERATION/service_providers/ACME"
},
"relay_state_prefix": "ss:mem:",
"sp_url": "https://example.com/identity/Shibboleth.sso/SAML2/ECP"
},
{
"auth_url": "https://other.example.com/identity/v3/OS-FEDERATION/identity_providers/acme/protocols/saml2/auth",
"description": "Stores contractor identities",
"enabled": false,
"id": "ACME-contractors",
"links": {
"self": "http://example.com/identity/v3/OS-FEDERATION/service_providers/ACME-contractors"
},
"relay_state_prefix": "ss:mem:",
"sp_url": "https://other.example.com/identity/Shibboleth.sso/SAML2/ECP"
}
]
}
获取特定的服务提供商引用。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/service_provider
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
路径 |
字符串 |
服务提供商唯一ID |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
auth_url |
body |
字符串 |
用于身份验证的 URL |
description (可选) |
body |
字符串 |
服务提供商的描述 |
enabled |
body |
bool |
服务提供者是否启用 |
id |
body |
字符串 |
服务提供商唯一ID |
links |
body |
字符串 |
指向服务提供商所在 URI 的链接 |
中继状态前缀 |
body |
字符串 |
RelayState SAML 属性的前缀 |
sp_url |
body |
字符串 |
服务提供商的 URL |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"service_provider": {
"auth_url": "https://example.com/identity/v3/OS-FEDERATION/identity_providers/acme/protocols/saml2/auth",
"description": "Remote Service Provider",
"enabled": true,
"id": "ACME",
"links": {
"self": "https://example.com/identity/v3/OS-FEDERATION/service_providers/ACME"
},
"relay_state_prefix": "ss:mem:",
"sp_url": "https://example.com/identity/Shibboleth.sso/SAML2/ECP"
}
}
删除服务提供程序。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/service_provider
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
路径 |
字符串 |
服务提供商唯一ID |
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
204 - No Content |
服务器已完成请求。 |
更新服务提供商的属性。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/service_provider
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
id |
路径 |
字符串 |
服务提供商唯一ID |
auth_url |
body |
字符串 |
用于身份验证的 URL |
description (可选) |
body |
字符串 |
服务提供商的描述 |
enabled |
body |
bool |
服务提供者是否启用 |
sp_url |
body |
字符串 |
服务提供商的 URL |
示例¶
{
"service_provider": {
"auth_url": "https://new.example.com/identity/v3/OS-FEDERATION/identity_providers/protocol/saml2/auth",
"enabled": true,
"relay_state_prefix": "ss:temp:",
"sp_auth": "https://new.example.com/identity/Shibboleth.sso/SAML2/ECP"
}
}
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
auth_url |
body |
字符串 |
用于身份验证的 URL |
description (可选) |
body |
字符串 |
服务提供商的描述 |
enabled |
body |
bool |
服务提供者是否启用 |
id |
body |
字符串 |
服务提供商唯一ID |
links |
body |
字符串 |
指向服务提供商所在 URI 的链接 |
中继状态前缀 |
body |
字符串 |
RelayState SAML 属性的前缀 |
sp_url |
body |
字符串 |
服务提供商的 URL |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"service_provider": {
"auth_url": "https://new.example.com/identity/v3/OS-FEDERATION/identity_providers/protocol/saml2/auth",
"description": "Remote Service Provider",
"enabled": true,
"id": "ACME",
"links": {
"self": "https://example.com/identity/v3/OS-FEDERATION/service_providers/ACME"
},
"relay_state_prefix": "ss:temp:",
"sp_url": "https://new.example.com/identity/Shibboleth.sso/SAML2/ECP"
}
}
在 v1.1 中已弃用。请使用核心 GET /auth/projects。此调用具有相同的响应格式。
返回联合用户有权访问的项目集合。要访问此资源,使用未作用域的令牌,用户然后可以选择一个项目并请求一个作用域令牌。请注意,只返回启用的项目。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/projects
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
links |
body |
对象 |
指向项目集合所在 URI 的链接 |
projects |
body |
数组 |
经认证用户可以作用域到的项目列表 |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"projects": [
{
"domain_id": "37ef61",
"enabled": true,
"id": "12d706",
"links": {
"self": "http://example.com/identity/v3/projects/12d706"
},
"name": "a project name"
},
{
"domain_id": "37ef61",
"enabled": true,
"id": "9ca0eb",
"links": {
"self": "http://example.com/identity/v3/projects/9ca0eb"
},
"name": "another project"
}
],
"links": {
"self": "http://example.com/identity/v3/OS-FEDERATION/projects",
"previous": null,
"next": null
}
}
在 v1.1 中已弃用。请使用核心 GET /auth/domains。此调用具有相同的响应格式。
返回联合用户有权访问的域集合。要访问此资源,使用未作用域的令牌,用户然后可以选择一个域并请求一个作用域令牌。请注意,只返回启用的域。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/domains
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
domains |
body |
数组 |
经认证用户可以作用域到的域列表 |
links |
body |
对象 |
链接到域集合所在的 URI |
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
示例¶
{
"domains": [
{
"description": "desc of domain",
"enabled": true,
"id": "37ef61",
"links": {
"self": "http://example.com/identity/v3/domains/37ef61"
},
"name": "my domain"
}
],
"links": {
"self": "http://example.com/identity/v3/OS-FEDERATION/domains",
"previous": null,
"next": null
}
}
联合临时用户可以请求一个未作用域的令牌,该令牌可用于获取一个作用域令牌。
如果用户直接映射(映射到现有用户),将颁发一个标准的未作用域令牌。
由于这部分认证与 SAML2 认证工作流程严格相关,客户端不应发送任何数据,因为客户端在服务提供商和身份提供商之间重定向时,内容可能会丢失。Web 单点登录 (WebSSO) 和增强客户端代理 (ECP) 机制具有不同的认证工作流程,并且在访问受保护端点时使用不同的 HTTP 方法,因此应允许 GET 和 POST 两种 HTTP 方法。
返回的令牌将包含有关联合用户所属组的信息。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/identity_provider_protocol_auth
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
idp_id |
路径 |
字符串 |
身份提供者唯一 ID |
protocol_id |
路径 |
字符串 |
联合协议唯一ID |
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
X-Subject-Token |
标头 |
字符串 |
身份验证令牌。身份验证响应在此标头中返回令牌 ID,而不是在响应正文中返回。 |
令牌 |
body |
对象 |
包含方法和用户信息集的联合未作用域令牌 |
示例¶
{
"token": {
"methods": [
"mapped"
],
"user": {
"domain": {
"id": "Federated"
},
"id": "username%40example.com",
"name": "username@example.com",
"OS-FEDERATION": {
"identity_provider": "ACME",
"protocol": "SAML",
"groups": [
{"id": "abc123"},
{"id": "bcd234"}
]
}
}
}
}
联合用户可以使用未作用域的令牌请求作用域令牌。项目或域可以通过 ID 或名称指定。ID 足以唯一标识项目或域。
关系:https://docs.openstack.org/api/openstack-identity/3/rel/auth_tokens
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
auth |
body |
对象 |
包含用户身份和作用域信息的身份验证数据 |
示例¶
{
"auth": {
"identity": {
"methods": [
"token"
],
"token": {
"id": "--federated-token-id--"
}
},
"scope": {
"project": {
"id": "263fd9"
}
}
}
}
与返回的未作用域令牌类似,返回的作用域令牌将在令牌的 user 部分添加 OS-FEDERATION 部分。
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
X-Subject-Token |
标头 |
字符串 |
身份验证令牌。身份验证响应在此标头中返回令牌 ID,而不是在响应正文中返回。 |
令牌 |
body |
对象 |
包含方法、角色、用户、范围、目录、颁发和到期信息的联合作用域令牌 |
示例¶
{
"token": {
"methods": [
"token"
],
"roles": [
{
"id": "36a8989f52b24872a7f0c59828ab2a26",
"name": "admin"
}
],
"expires_at": "2014-08-06T13:43:43.367202Z",
"project": {
"domain": {
"id": "1789d1",
"links": {
"self": "http://example.com/identity/v3/domains/1789d1"
},
"name": "example.com"
},
"id": "263fd9",
"links": {
"self": "http://example.com/identity/v3/projects/263fd9"
},
"name": "project-x"
},
"catalog": [
{
"endpoints": [
{
"id": "39dc322ce86c4111b4f06c2eeae0841b",
"interface": "public",
"region": "RegionOne",
"url": "http://example.com/identity"
},
{
"id": "ec642f27474842e78bf059f6c48f4e99",
"interface": "internal",
"region": "RegionOne",
"url": "http://example.com/identity"
},
{
"id": "c609fc430175452290b62a4242e8a7e8",
"interface": "admin",
"region": "RegionOne",
"url": "http://example.com/identity"
}
],
"id": "266c2aa381ea46df81bb05ddb02bd14a",
"name": "keystone",
"type": "identity"
}
],
"user": {
"domain": {
"id": "Federated"
},
"id": "username%40example.com",
"name": "username@example.com",
"OS-FEDERATION": {
"identity_provider": "ACME",
"protocol": "SAML",
"groups": [
{"id": "abc123"},
{"id": "bcd234"}
]
}
},
"issued_at": "2014-08-06T12:43:43.367288Z"
}
}
对于 Web 单点登录 (WebSSO) 身份验证,用户需要输入另一个 URL 端点。成功身份验证后,keystone 不会颁发标准未作用域令牌,而是会发出 JavaScript 代码,将 Web 浏览器重定向到原始 Horizon。一个未作用域的联合令牌将包含在发送的表单中。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
protocol_id |
路径 |
字符串 |
联合协议唯一ID |
与上述路由相反,此路由开始一个特定于所提供身份提供者和协议的 Web 单点登录请求。Keystone 将发出 JavaScript,以与另一条路由相同的方式处理重定向。一个未作用域的联合令牌将包含在发送的表单中。
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
idp_id |
路径 |
字符串 |
身份提供者唯一 ID |
protocol_id |
路径 |
字符串 |
联合协议唯一ID |
1.1 版新增
用户可以根据请求中使用的作用域令牌生成 SAML 断言文档。
请求参数
要生成 SAML 断言,用户必须在请求正文中提供作用域令牌 ID 和服务提供商 ID。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/saml2
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
auth |
body |
对象 |
带有用户身份和服务提供商范围信息的身份验证数据 |
示例¶
{
"auth": {
"identity": {
"methods": [
"token"
],
"token": {
"id": "--token_id--"
}
},
"scope": {
"service_provider": {
"id": "--sp_id--"
}
}
}
}
响应将是一个完整的 SAML 断言。请注意,为便于阅读,证书已被截断。服务器还将设置两个 HTTP 头:X-sp-url 和 X-auth-url。前者是断言应发送到的 URL,后者是客户端最终通过身份验证后将颁发令牌的远程 URL。
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
标头 |
body |
对象 |
XML 标题 |
xml |
body |
对象 |
XML 格式的 SAML 断言 |
示例¶
Headers:
Content-Type: text/xml
X-sp-url: http://beta.example.com/Shibboleth.sso/POST/ECP
X-auth-url: http://beta.example.com/identity/v3/OS-FEDERATION/identity_providers/beta/protocols/auth
<?xml version="1.0" encoding="UTF-8"?>
<ns0:Response xmlns:ns0="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xmldsig="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Destination="http://beta.example.com/Shibboleth.sso/POST/ECP" ID="818dee98a5d44a238ae3038d26cbebb6" IssueInstant="2015-05-27T13:23:48Z" Version="2.0">
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://keystone.idp/v3/OS-FEDERATION/saml2/idp</saml:Issuer>
<ns0:Status>
<ns0:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</ns0:Status>
<saml:Assertion ID="68237000470e47a690bdd513bb264460" IssueInstant="2015-05-27T13:23:47Z" Version="2.0">
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://keystone.idp/v3/OS-FEDERATION/saml2/idp</saml:Issuer>
<xmldsig:Signature>
<xmldsig:SignedInfo>
<xmldsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<xmldsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<xmldsig:Reference URI="#68237000470e47a690bdd513bb264460">
<xmldsig:Transforms>
<xmldsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<xmldsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</xmldsig:Transforms>
<xmldsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<xmldsig:DigestValue>IgfoWcCoBpmv64ianaK/qj63QQQ=</xmldsig:DigestValue>
</xmldsig:Reference>
</xmldsig:SignedInfo>
<xmldsig:SignatureValue>H6GvkAcDW0BSoBaktpVTxUFtvUAcFMXRqYXLFvmse5DeOSnByvGOgW/yJMjIqzwG
LjCqJXYMePIkEUYb4kqbbkN1wNFuxKtmACcC3T3/7rAavrIz3I4cT6mCipN9qFlE
tzR0mD2IZhExuTzyMaON8krTWWoddx8LIYEfQ03O4eSYObi5fHmGJRGs9D5De0aK
XkIeKo7HRAjZsU5fAMGlEKfazemTZMBbnpUD//oFsxf1yFcFTOyiAHddAaG7Rqv3
4SYjYo4dRKAI/yQuA+MVmHDcJUE+KVqVoJZJSVJe+Lz+X1ReRlEgvP0mhaM0yY+R
w7FozqQyKSKJW9abmxJTFQ==</xmldsig:SignatureValue>
<xmldsig:KeyInfo>
<xmldsig:X509Data>
<xmldsig:X509Certificate>...</xmldsig:X509Certificate>
</xmldsig:X509Data>
</xmldsig:KeyInfo>
</xmldsig:Signature>
<saml:Subject>
<saml:NameID>admin</saml:NameID>
<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml:SubjectConfirmationData NotOnOrAfter="2015-05-27T14:23:47.711682Z" Recipient="http://beta.example.com/Shibboleth.sso/POST/ECP/">
</saml:SubjectConfirmation>
</saml:Subject>
<saml:AuthnStatement AuthnInstant="2015-05-27T13:23:47Z" SessionIndex="cd839a3ff0fc4a4aab52e55fae8094a2" SessionNotOnOrAfter="2015-05-27T14:23:47.711682Z">
<saml:AuthnContext>
<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef>
<saml:AuthenticatingAuthority>http://keystone.idp/v3/OS-FEDERATION/saml2/idp</saml:AuthenticatingAuthority>
</saml:AuthnContext>
</saml:AuthnStatement>
<saml:AttributeStatement>
<saml:Attribute Name="openstack_user" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml:AttributeValue xsi:type="xs:string">admin</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="openstack_user_domain" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml:AttributeValue xsi:type="xs:string">Default</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="openstack_roles" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml:AttributeValue xsi:type="xs:string">admin</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="openstack_project" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml:AttributeValue xsi:type="xs:string">admin</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="openstack_project_domain" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml:AttributeValue xsi:type="xs:string">Default</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>
</ns0:Response>
有关 SAML 断言结构的更多信息,请参阅规范。
用户可以根据请求中使用的作用域令牌生成 SAML 断言文档,以与 增强客户端或代理 (ECP) 配置文件配合使用。
请求参数
要生成 ECP 封装的 SAML 断言,用户必须在请求正文中提供作用域令牌 ID 和服务提供商 ID。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/saml2/ecp
请求¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
auth |
body |
对象 |
带有用户身份和服务提供商范围信息的身份验证数据 |
示例¶
{
"auth": {
"identity": {
"methods": [
"token"
],
"token": {
"id": "--token_id--"
}
},
"scope": {
"service_provider": {
"id": "--sp_id--"
}
}
}
}
响应将是一个 ECP 封装的 SAML 断言。请注意,为便于阅读,证书已被截断。服务器还将设置两个 HTTP 头:X-sp-url 和 X-auth-url。前者是断言应发送到的 URL,后者是客户端最终通过身份验证后将颁发令牌的远程 URL。
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
标头 |
body |
对象 |
XML 标题 |
xml |
body |
对象 |
XML 格式的 SAML 断言 |
示例¶
Headers:
Content-Type: text/xml
X-sp-url: http://beta.example.com/Shibboleth.sso/POST/ECP
X-auth-url: http://beta.example.com/identity/v3/OS-FEDERATION/identity_providers/beta/protocols/auth
<?xml version='1.0' encoding='UTF-8'?>
<ns0:Envelope
xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp"
xmlns:ns2="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
xmlns:xmldsig="http://www.w3.org/2000/09/xmldsig#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns0:Header>
<ns1:RelayState ns0:actor="http://schemas.xmlsoap.org/soap/actor/next" ns0:mustUnderstand="1">ss:mem:1ddfe8b0f58341a5a840d2e8717b0737</ns1:RelayState>
</ns0:Header>
<ns0:Body>
<ns2:Response Destination="http://beta.example.com/Shibboleth.sso/POST/ECP" ID="8c21de08d2f2435c9acf13e72c982846" IssueInstant="2015-03-25T14:43:21Z" Version="2.0">
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://keystone.idp/v3/OS-FEDERATION/saml2/idp</saml:Issuer>
<ns2:Status>
<ns2:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</ns2:Status>
<saml:Assertion ID="a5f02efb0bff4044b294b4583c7dfc5d" IssueInstant="2015-03-25T14:43:21Z" Version="2.0">
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://keystone.idp/v3/OS-FEDERATION/saml2/idp</saml:Issuer>
<xmldsig:Signature>
<xmldsig:SignedInfo>
<xmldsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<xmldsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<xmldsig:Reference URI="#a5f02efb0bff4044b294b4583c7dfc5d">
<xmldsig:Transforms>
<xmldsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<xmldsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</xmldsig:Transforms>
<xmldsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<xmldsig:DigestValue>0KH2CxdkfzU+6eiRhTC+mbObUKI=</xmldsig:DigestValue>
</xmldsig:Reference>
</xmldsig:SignedInfo>
<xmldsig:SignatureValue>m2jh5gDvX/1k+4uKtbb08CHp2b9UWsLwjtMijs9C9gZV2dIJKiF9SJBWE4C79qT4
uktgeB0RQiFrgxOGfpp1gyQunmNyZcipcetOk4PebH4/z+po/59w8oGp89fPfdRj
WhWA0fWP32Pr5eslRQjbHnSRTFMp3ycBZHsCCsTWdhyiWC6aERsspHeeGjkzxRAZ
HxJ8oLMj/TWBJ2iaUDUT6cxa1svmtumoC3GPPOreuGELXTL5MtKotTVqYN6lZP8B
Ueaji11oRI1HE9XMuPu0iYlSo1i3JyejciSFgplgdHsebpM29PMo8oz2TCybY39p
kmuD4y9XX3lRBcpJRxku7w==</xmldsig:SignatureValue>
<xmldsig:KeyInfo>
<xmldsig:X509Data>
<xmldsig:X509Certificate>...</xmldsig:X509Certificate>
</xmldsig:X509Data>
</xmldsig:KeyInfo>
</xmldsig:Signature>
<saml:Subject>
<saml:NameID>admin</saml:NameID>
<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml:SubjectConfirmationData NotOnOrAfter="2015-03-25T15:43:21.172385Z" Recipient="http://beta.example.com/Shibboleth.sso/POST/ECP" />
</saml:SubjectConfirmation>
</saml:Subject>
<saml:AuthnStatement AuthnInstant="2015-03-25T14:43:21Z" SessionIndex="9790eb729858456f8a33b7a11f0a637e" SessionNotOnOrAfter="2015-03-25T15:43:21.172385Z">
<saml:AuthnContext>
<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef>
<saml:AuthenticatingAuthority>http://keystone.idp/v3/OS-FEDERATION/saml2/idp</saml:AuthenticatingAuthority>
</saml:AuthnContext>
</saml:AuthnStatement>
<saml:AttributeStatement>
<saml:Attribute Name="openstack_user" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml:AttributeValue xsi:type="xs:string">admin</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="openstack_user_domain" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml:AttributeValue xsi:type="xs:string">Default</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="openstack_roles" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml:AttributeValue xsi:type="xs:string">admin</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="openstack_project" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml:AttributeValue xsi:type="xs:string">admin</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="openstack_project_domain" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml:AttributeValue xsi:type="xs:string">Default</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>
</ns2:Response>
</ns0:Body>
</ns0:Envelope>
用户可以检索作为身份提供者身份服务相关的元数据。
响应将是一个包含元数据属性的完整文档。请注意,为便于阅读,此示例证书已截断。
关系:https://docs.openstack.org/api/openstack-identity/3/ext/OS-FEDERATION/1.0/rel/metadata
响应¶
参数¶
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
标头 |
body |
对象 |
XML 标题 |
xml |
body |
对象 |
XML 格式的身份提供者元数据信息 |
示例¶
Headers:
Content-Type: text/xml
<?xml version="1.0" encoding="UTF-8"?>
<ns0:EntityDescriptor xmlns:ns0="urn:oasis:names:tc:SAML:2.0:metadata"
xmlns:ns1="http://www.w3.org/2000/09/xmldsig#" entityID="k2k.com/v3/OS-FEDERATION/idp"
validUntil="2014-08-19T21:24:17.411289Z">
<ns0:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<ns0:KeyDescriptor use="signing">
<ns1:KeyInfo>
<ns1:X509Data>
<ns1:X509Certificate>MIIDpTCCAo0CAREwDQYJKoZIhvcNAQEFBQAwgZ</ns1:X509Certificate>
</ns1:X509Data>
</ns1:KeyInfo>
</ns0:KeyDescriptor>
</ns0:IDPSSODescriptor>
<ns0:Organization>
<ns0:OrganizationName xml:lang="en">openstack</ns0:OrganizationName>
<ns0:OrganizationDisplayName xml:lang="en">openstack</ns0:OrganizationDisplayName>
<ns0:OrganizationURL xml:lang="en">openstack</ns0:OrganizationURL>
</ns0:Organization>
<ns0:ContactPerson contactType="technical">
<ns0:Company>openstack</ns0:Company>
<ns0:GivenName>first</ns0:GivenName>
<ns0:SurName>lastname</ns0:SurName>
<ns0:EmailAddress>admin@example.com</ns0:EmailAddress>
<ns0:TelephoneNumber>555-555-5555</ns0:TelephoneNumber>
</ns0:ContactPerson>
</ns0:EntityDescriptor>
有关 SAML 断言结构的更多信息,请参阅规范。
OS-SIMPLE-CERT API¶
允许检索证书颁发机构和证书的信息。需要 Identity API v3.0+。
显示可用的 CA 证书。
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
500 - 内部服务器错误 |
服务内部出现问题。 通常不应发生这种情况。 如果发生这种情况,则表示服务器遇到了一些严重问题。 |
示例¶
MIIDgTCCAmmgAwIBAgIJAIr3n9+0RSC7MA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV
BAYTAlVTMQ4wDAYDVQQIDAVVbnNldDEOMAwGA1UEBwwFVW5zZXQxDjAMBgNVBAoM
BVVuc2V0MRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20wHhcNMTYxMDIwMTMwMjE4
WhcNMjYxMDE4MTMwMjE4WjBXMQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVW5zZXQx
DjAMBgNVBAcMBVVuc2V0MQ4wDAYDVQQKDAVVbnNldDEYMBYGA1UEAwwPd3d3LmV4
YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwoJkYpfJ
Bvqfq0eAuqTIziiunNQdnSUX/aMS5UuI6tjzSkYnR5FCdf9UP8OrpA37gthvz3KK
XhNLqnnV8MLzEo3+lN5IAr+TE1foXnqGs6vNvj5Jn1lViXXpIeaHxMwkJpJjPwxJ
nFLtxL1m9hIx5anV5ZyJWV8RIaMqnzOJ7QYiX07aouRvmtT5O1LQzr2ht2l4EzPY
YDt9UV/daSikrmroBnwgWMecaFJOC1pxSyvO2PAnw+yhX6NHgGPJmOu0TSN2IK1p
o07ZVM3QJLLbEZFjcUK7FXNRk5ZfzjkCrJA1l0Ys3ByHTb2offffIyTYPuatQtfF
0XvTIwMN5eIAswIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBTZ4Nls
7DRmUBcrYhYDLSsDM0BCWzAfBgNVHSMEGDAWgBTZ4Nls7DRmUBcrYhYDLSsDM0BC
WzANBgkqhkiG9w0BAQsFAAOCAQEALil6WvVii6yNVwu0zgt2iDYqHvnnHWnSVhEJ
eKeBFRxpuwiH+UOeygFB0/6lD2r11cD0SdgaMfLAKkKspQucJIsp3BYLwBJ25oxn
NL2yB3HLZeEebAQzXQwnRbWUbIpcp/XPlKjybiA3unqE+X/qdQZgxJ2Xgtp7bHhN
yzDCSOUZlHrkKNXtFNvqRtoCeMBs2+jfqx2ap64ORSnLihEi57lOcUn2DbAR45OI
+wppD5CcUTDsE0r+XbBK3Cm3dn6pVyVcawv5qDidRB7JdsDbx6VC7gcBbdgdbLWz
Xf4KS8N77jeGjqKJ7QY5jkHdXhY+gGbeponch4y2VqLgMI0VGQ==
显示可用的签名证书。
响应¶
状态码¶
成功¶
代码 |
原因 |
|---|---|
200 - 正常 |
请求成功。 |
错误¶
代码 |
原因 |
|---|---|
401 - 未授权 |
用户必须在发出请求之前进行身份验证。 |
500 - 内部服务器错误 |
服务内部出现问题。 通常不应发生这种情况。 如果发生这种情况,则表示服务器遇到了一些严重问题。 |
示例¶
MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBXMQswCQYDVQQGEwJVUzEO
MAwGA1UECAwFVW5zZXQxDjAMBgNVBAcMBVVuc2V0MQ4wDAYDVQQKDAVVbnNldDEY
MBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tMB4XDTE2MTAyMDEzMDIxOFoXDTI2MTAx
ODEzMDIxOFowRzELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVVuc2V0MQ4wDAYDVQQK
DAVVbnNldDEYMBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAua3cVYSD9KY31+wNXZv3HBS5MyzTfoY+nh4nJ2x8
Ram6liu4gkHYRonTUriIrgDLyo+2fuXrmyFcq1+8ke4KD3n24i8pzcrt6BOGAVYP
KdPyXU0EkZECNmH/tKjvVqMLHcq2apsZdZ5ujBtE5G4zbTjVIEzz90AbAmRVJy7S
seluCxBKtg3IGa1WwqgU4B5pgog+VDpT8XPKFvHi1cVaX76qS6MOUxXA7kuOQUct
JxcyITS26Mxym7wOTI+7JV5A9Ow/dUN6CrGMrfHB59Psx3os/BfoopFmIbbnHdOO
ETOeifelkhwLWLfmmOHxWgYYX/aEyW3L/xCU5QDCz9B0wQIDAQABo00wSzAJBgNV
HRMEAjAAMB0GA1UdDgQWBBQeoHzsYSUSfGymk6kem/lpGVJS9DAfBgNVHSMEGDAW
gBTZ4Nls7DRmUBcrYhYDLSsDM0BCWzANBgkqhkiG9w0BAQsFAAOCAQEAfsH6AN7p
XWBg062LUtpfDsRyXqOLYofR4Y0Mzo1rH0jaozJsnOxsj42BdP+hBGjtZB9eUwgP
gx+MJQC4pz+Wuc/xMysDT6f0hyjZmsakXM92lsztlW7+Y7u9ATa2lDTER1Fv7X6D
I+kN+dhphq0lrIRWZvAf3TlZpEUG38cTxLD8OsdOlq4BxSzmvKFQf4mcbu39OX7i
0fGih0SxSa03idx9NWEOEp9IaGLo/mfL84nb4YjgV9yJj+3CkxYvqPlpiM2rHD/C
hMgz/UB52OxbjYjbWoyStZwvlSwKWY75C9iYA04TZrhs5UWvAT+I2Y2UY/krrZ2a
Rke2Bj7NAvXPHw==