获取委托Token
功能介绍
该接口可以用于获取委托方的token。
例如:A账号希望B账号管理自己的某些资源,所以A账号创建了委托给B账号,则A账号为委托方,B账号为被委托方。那么B账号可以通过该接口获取委托token。B账号仅能使用该token管理A账号的委托资源,不能管理自己账号中的资源。如果B账号需要管理自己账号中的资源,则需要获取自己的用户token。详情请参考:委托其他账号管理资源。
token是系统颁发给用户的访问令牌,承载用户的身份、权限等信息。调用IAM以及其他云服务的接口时,可以使用本接口获取的token进行鉴权。
该接口可以使用全局区域的Endpoint和其他区域的Endpoint调用。IAM的Endpoint请参见:地区和终端节点。
- token的有效期为24小时,建议进行缓存,避免频繁调用。
- 使用Token前请确保Token离过期有足够的时间,防止调用API的过程中Token过期导致调用API失败。
调试
您可以在API Explorer中调试该接口。
URI
POST /v3/auth/tokens
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
nocatalog |
否 |
String |
如果设置该参数,返回的响应体中将不显示catalog信息。任何非空字符串都将解释为true,并使该字段生效。 |
请求参数
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
Content-Type |
是 |
String |
该字段内容填为“application/json;charset=utf8”。 |
X-Auth-Token |
是 |
String |
被委托方B账号中的IAM用户token,且该token具有Agent Operator权限。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
是 |
Object |
认证信息。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
是 |
Object |
认证参数。 |
|
是 |
Object |
token的使用范围,需要填写委托方A的project或domain,填写其中任一即可。
说明:
|
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
methods |
是 |
Array of strings |
token的获取方式,该字段内容为["assume_role"]。 取值范围:
|
是 |
Object |
assume_role的具体信息。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
domain_id |
否 |
String |
委托方A的账号ID。“domain_id”与“domain_name”至少填写一个,建议选择“domain_id”。 委托方A可以参考获取账号、IAM用户、项目、用户组、区域、委托的名称和ID获取账号ID。 |
domain_name |
否 |
String |
委托方A的账号名称。“domain_id”与“domain_name”至少填写一个,建议选择“domain_id”。 您可以在IAM控制台委托列表中查看委托方A的账号名称。 |
agency_name |
是 |
String |
委托方A创建的委托名称,获取方式请参见:获取账号、IAM用户、项目、用户组、区域、委托的名称和ID。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
否 |
Object |
取值为domain时,表示获取的Token可以作用于全局服务,全局服务不区分项目或区域,如OBS服务。如需了解服务作用范围,请参考系统权限。domain支持id和name,二选一即可,建议选择“domain_id”。 |
|
否 |
Object |
取值为project时,表示获取的Token可以作用于项目级服务,仅能访问指定project下的资源,如ECS服务。如需了解服务作用范围,请参考系统权限。project支持id和name,二选一即可。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
id |
否 |
String |
委托方A的账号ID,获取方式请参见:获取账号、IAM用户、项目、用户组、区域、委托的名称和ID。id和name,二选一即可。 |
name |
否 |
String |
委托方A的账号名,获取方式请参见:获取账号、IAM用户、项目、用户组、区域、委托的名称和ID。id和name,二选一即可。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
id |
否 |
String |
委托方A项目的ID,获取方式请参见:获取账号、IAM用户、项目、用户组、区域、委托的名称和ID。id和name,二选一即可。 |
name |
否 |
String |
委托方A项目的名称,获取方式请参见:获取账号、IAM用户、项目、用户组、区域、委托的名称和ID。id和name,二选一即可。 |
请求示例
- 由被委托方B(账号名为IAMDomainB)中的IAM用户B(用户名IAMUserB,请求头中的X-Auth-Token字段需要填写IAMUserB的用户token,且该token需要具有Agent Operator权限),获取委托方A(账号名为IAMDomainA)创建的委托名为IAMAgency,作用范围为委托方A的项目“cn-north-1”,且返回的响应体中将不显示catalog信息的token。
POST https://iam.myhuaweicloud.com/v3/auth/tokens?nocatalog=true
{ "auth": { "identity": { "methods": [ "assume_role" ], "assume_role": { "domain_name": "IAMDomainA", //委托方IAM用户A所属账号名称 "agency_name": "IAMAgency" //委托方IAM用户A创建的委托名称 } }, "scope": { "project": { "name": "cn-north-1" //项目名称 } } } }
- 由被委托方B(账号名为IAMDomainB)中的IAM用户B(用户名IAMUserB,请求头中的X-Auth-Token字段需要填写IAMUserB的用户token,且该token需要具有Agent Operator权限),获取委托方A(账号名为IAMDomainA)创建的委托名为IAMAgency,作用范围为委托方A整个账号的token。
POST https://iam.myhuaweicloud.com/v3/auth/tokens
{ "auth": { "identity": { "methods": [ "assume_role" ], "assume_role": { "domain_name": "IAMDomainA", //委托方IAM用户A所属账号名称 "agency_name": "IAMAgency" //委托方IAM用户A创建的委托名称 } }, "scope": { "domain": { "name": "IAMDomainA" //委托方IAM用户A所属账号名称 } } } }
响应参数
参数 |
参数类型 |
描述 |
---|---|---|
X-Subject-Token |
String |
签名后的token。 |
参数 |
参数类型 |
描述 |
---|---|---|
Object |
token信息列表。 |
参数 |
参数类型 |
描述 |
---|---|---|
methods |
Array of strings |
获取token的方式。 |
expires_at |
String |
token到期时间。
说明:
UTC时间,格式为YYYY-MM-DDTHH:mm:ss.ssssssZ,日期和时间戳格式参照ISO-8601,如:2023-06-28T08:56:33.710000Z。 |
issued_at |
String |
token下发时间。
说明:
UTC时间,格式为YYYY-MM-DDTHH:mm:ss.ssssssZ,日期和时间戳格式参照ISO-8601,如:2023-06-28T08:56:33.710000Z。 |
Object |
被委托方B的相关信息。 |
|
Array of objects |
服务目录信息。 |
|
Object |
委托方A的账号信息。如果获取token时请求体中scope参数设置为domain,则返回该字段。 |
|
Object |
委托方A的项目信息。如果获取token时请求体中scope参数设置为project,则返回该字段。 |
|
Array of objects |
委托token的权限信息。 |
|
Object |
委托方A所创建的委托的信息。 |
参数 |
参数类型 |
描述 |
---|---|---|
name |
String |
被委托方B中IAM用户的用户名。 |
id |
String |
被委托方B中IAM用户的用户ID。 |
Object |
被委托方B的账号信息。 |
|
password_expires_at |
String |
被委托方B中IAM用户的密码过期时间,“”表示密码不过期。
说明:
UTC时间,格式为YYYY-MM-DDTHH:mm:ss.ssssssZ,日期和时间戳格式参照ISO-8601,如:2023-06-28T08:56:33.710000Z。 |
参数 |
参数类型 |
描述 |
---|---|---|
Array of objects |
终端节点。 |
|
id |
String |
服务ID。 |
name |
String |
服务名称。 |
type |
String |
该接口所属服务。 |
响应示例
状态码为 201 时:
创建成功。
示例1:由被委托方B(账号名为IAMDomainB)中的IAM用户B(用户名IAMUserB,请求头中的X-Auth-Token字段需要填写IAMUserB的用户token,且该token需要具有Agent Operator权限),获取委托方A(账号名为IAMDomainA)创建的委托名为IAMAgency,作用范围为委托方A整个账号的token。
示例2:由被委托方B(账号名为IAMDomainB)中的IAM用户B(用户名IAMUserB,请求头中的X-Auth-Token字段需要填写IAMUserB的用户token,且该token需要具有Agent Operator权限),获取委托方A(账号名为IAMDomainA)创建的委托名为IAMAgency,作用范围为委托方A的项目“cn-north-1”,且返回的响应体中将不显示catalog信息的token。
- 示例 1
响应Header参数: X-Subject-Token:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB...
响应Body参数: { "token": { "expires_at": "2020-01-05T05:05:17.429000Z", "methods": [ "assume_role" ], "catalog": [ { "endpoints": [ { "id": "33e1cbdd86d34e89a63cf8ad16a5f49f", "interface": "public", "region": "*", "region_id": "*", "url": "https://iam.myhuaweicloud.com/v3.0" } ], "id": "100a6a3477f1495286579b819d399e36", "name": "iam", "type": "iam" } ], "domain": { "id": "d78cbac186b744899480f25bd022f468", "name": "IAMDomainA" }, "roles": [ { "id": "0", "name": "op_gated_eip_ipv6" }, { "id": "0", "name": "op_gated_rds_mcs" } ], "issued_at": "2020-01-04T05:05:17.429000Z", "user": { "domain": { "id": "d78cbac186b744899480f25bd022f468", "name": "IAMDomainA" }, "id": "0760a9e2a60026664f1fc0031f9f205e", "name": "IAMDomainA/IAMAgency" }, "assumed_by": { "user": { "domain": { "id": "a2cd82a33fb043dc9304bf72a0f38f00", "name": "IAMDomainB" }, "id": "0760a0bdee8026601f44c006524b17a9", "name": "IAMUserB", "password_expires_at": "" } } } }
- 示例 2
响应Header参数: X-Subject-Token:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB...
响应Body参数: { "token": { "expires_at": "2020-01-05T06:49:28.094000Z", "methods": [ "assume_role" ], "catalog": [], "roles": [ { "id": "0", "name": "op_gated_eip_ipv6" }, { "id": "0", "name": "op_gated_rds_mcs" } ], "project": { "domain": { "id": "d78cbac186b744899480f25bd022f468", "name": "IAMDomainA" }, "id": "aa2d97d7e62c4b7da3ffdfc11551f878", "name": "cn-north-1" }, "issued_at": "2020-01-04T06:49:28.094000Z", "user": { "domain": { "id": "d78cbac186b744899480f25bd022f468", "name": "IAMDomainA" }, "id": "0760a9e2a60026664f1fc0031f9f205e", "name": "IAMDomainA/IAMAgency" }, "assumed_by": { "user": { "domain": { "id": "a2cd82a33fb043dc9304bf72a0f38f00", "name": "IAMDomainB" }, "id": "0760a0bdee8026601f44c006524b17a9", "name": "IAMUserB", "password_expires_at": "" } } } }
状态码为 400 时:
参数无效。
{ "error": { "code": 400, "message": "The request body is invalid", "title": "Bad Request" } }
状态码为 401 时:
认证失败。
{ "error": { "code": 401, "message": "The X-Auth-Token is invalid!", "title": "Unauthorized" } }
状态码为 403 时:
没有操作权限。
- 可能原因:被委托方B中用户B的用户token(即X-Auth-Token填写的token)缺少Agent Operator权限,请添加权限。
{ "error": { "code": 403, "message": "You have no right to do this action", "title": "Forbidden" } }
返回值
返回值 |
描述 |
---|---|
201 |
创建成功。 |
400 |
参数无效。 |
401 |
认证失败。 |
403 |
没有操作权限。 可能原因:被委托方B中用户B的用户token(即X-Auth-Token填写的token)缺少Agent Operator权限,请添加权限。 |
404 |
未找到相应的资源。 |
500 |
内部服务错误。 |
503 |
服务不可用。 |
错误码
无