获取委托Token
功能介绍
该接口用来获取委托Token,例如:A账号与B账号创建了委托关系,A账号为委托方,B账号为被委托方,则B账号可以通过该接口获取委托Token。B账号仅能使用该Token管理A账号的委托资源,不能管理自己账号中的资源,如果B账号需要管理自己账号中的资源,需要通过获取用户Token获取自己的Token。
Token的有效期为24小时,建议进行缓存,避免频繁调用。使用Token前请确保Token离过期有足够的时间,防止调用API的过程中Token过期导致调用API失败。重新获取Token,不影响已有Token有效性。
URI
POST /v3/auth/tokens
请求
- Request Header参数说明
参数
是否必选
类型
说明
Content-Type
是
String
该字段内容填为“application/json;charset=utf8”。
X-Auth-Token
是
String
被委托方用户B具有Agent Operator权限的token。
- Request Body参数说明
参数
是否为必选
类型
说明
identity
是
Json Object
认证参数,包含:methods,assume_role。
"identity": { "methods": ["assume_role"], "assume_role": {
methods
是
String Array
token的获取方式,该字段内容为“assume_role”。
domain_name或domain_id
是
String
委托方用户A的账号名称或者ID,domain_name和domain_id二选一。
xrole_name
是
String
委托方用户A创建的委托的名称。
scope
否
Json Object
token的使用范围,取值为project或domain,二选一即可。
- 示例1:取值为project时,表示获取的token仅能访问指定project下的资源,project支持id和name,二选一即可。
"scope": { "project": { "id": "0b95b78b67fa045b38104c12fb..." } }
- 示例2:取值为domain时,表示获取的Token可以访问委托方账号中授权的所有资源,domain支持id和name,二选一即可。
"scope": { "domain": { "id": "6b8eb224c76842e3ac2..." } }
- 示例1:取值为project时,表示获取的token仅能访问指定project下的资源,project支持id和name,二选一即可。
- 请求样例
响应
- Response Header参数说明
参数
是否必选
类型
描述
X-Subject-Token
是
String
获取的委托token。
- Token格式说明
参数
是否必选
类型
描述
methods
是
Json Array
获取token的方式。
expires_at
是
String
token到期时间。
issued_at
是
String
token产生时间。
user
是
Json Object
委托方用户的详细信息,示例:
"user": { "name": "user A", "id": "userid", "password_expires_at":"2016-11-06T15:32:17.000000", "domain": { "name": "domain A", "id": "domainid" } }
- user.name:委托方的用户名称。
- user.id:委托方的用户ID。
- domain.name:委托方用户的所属的账户名称。
- domain.id:委托方用户的所属账户的ID。
- password_expires_at:可选,密码过期时间(UTC时间),“null”表示密码不过期。
domain
否
Json Object
如果请求体中scope参数设置为domain,则返回该字段。
示例:
"domain": { "name" : "domain A", "id" : "domainid" }
- domain.name:委托方用户的所属账户的名称。
- domain.id:委托方用户的所属账户的ID。
project
否
Json Object
如果请求体中scope参数设置为project,则返回该字段。
示例:
"project": { "name": "projectname", "id": "projectid" }
- project.name:project名称。
- project.id:project的ID。
catalog
否
Json Array
endpoints相关信息。
示例:
"catalog": [{ "type": "identity", "id": "1331e5cff2a74d76b03da1225910e31d", "name": "iam", "endpoints": [{ "url": "https://sample.domain.com/v3", "region": "*", "region_id": "*", "interface": "public", "id": "089d4a381d574308a703122d3ae738e9" }] }]
roles
是
Json Object
Token的权限信息。
示例:
"roles" : [{ "name" : "role1", "id" : "roleid1" }, { "name" : "role2", "id" : "roleid2" } ]
assumed_by
是
Json Object
被委托方用户的详细信息。
示例:
"assumed_by": { "user": { "domain": { "name": "domain B", "id": "bfdd55e02a014894b5a2693f31..." }, "name": "user B", "id": "ff5ea657f1dd45c4b8f398cab..." } }
- domain.name:被委托方用户的所属账户的名称。
- user.name:被委托方用户的用户名称。
- 响应样例
Response Header中存储信息为: X-Subject-Token:MIIDkgYJKoZIhvcNAQcCoIIDgzCCA38CAQExDTALBglghkgBZQMEAgEwgXXXXX... X-Frame-Options: SAMEORIGIN Response Body中存储信息为: { "token": { "methods": [ "assume_role" ], "issued_at": "2017-05-18T11:44:05.232000Z", "expires_at": "2017-05-19T11:44:05.232000Z", "user": { "id": "93e12ecdad6f4abd84968741da...", "name": "user A/agencytest", "password_expires_at":"2016-11-06T15:32:17.000000", "domain": { "id": "ce925c42c25943bebba10ea64a...", "name": "domain A" } }, "domain": { "id": "ce925c42c25943bebba10ea64a...", "name": "domain A" }, "roles": [ { "id": "c11c61319f08404eaf94f8030b9...", "name": "role1" }, { "id": "d52dde35ijg62fex2ijhdc785sc3...", "name": "role2" }, { "id": "d862dwd32dwhu854rdcs447ed1d7..." "name": "op_gated_tasssg6" } ], "assumed_by": { "user": { "domain": { "name": "domain B", "id": "c1a78a82d81c4a19b03bfe82d3ad..." }, "id": "cdeb158dda854cc3bab77d8926ff...", "name": "User B" } } } }
状态码
状态码 |
说明 |
---|---|
201 |
请求成功。 |
400 |
请求错误。 |
401 |
认证失败。 |
403 |
鉴权失败。 |
404 |
找不到资源。 |
500 |
内部服务错误。 |
503 |
服务不可用。 |