获取IAM用户Token(使用密码)
功能介绍
该接口可以用于通过用户名/密码的方式进行认证来获取IAM用户的Token。Token是系统颁发给IAM用户的访问令牌,承载用户的身份、权限等信息。调用IAM以及其他云服务的接口时,可以使用本接口获取的IAM用户Token进行鉴权。
该接口可以使用全局区域的Endpoint和其他区域的Endpoint调用。IAM的Endpoint请参见:地区和终端节点。
接口使用导航:
- IAM用户获取Token
无特殊要求,请按照请求参数说明获取Token。
- 判断当前帐号是华为帐号还是华为云帐号
华为帐号不支持直接获取帐号Token,排查是否为华为帐号请参见:怎么知道当前登录华为云使用的是“华为帐号” 还是“华为云账号”?
- 华为帐号获取Token
华为账号获取token请参加以下步骤:创建一个IAM用户,授予该用户必要的权限,使用创建的IAM用户,获取IAM用户Token。
- 华为云帐号获取Token
无特殊要求,请按照请求参数说明获取Token。
- 第三方系统用户获取Token
如果您是第三方系统用户,直接使用联邦认证的用户名和密码获取Token,系统会提示密码错误。请先在华为云的登录页面,通过“忘记密码”功能,设置华为云帐号密码。
- Token有效期说明
- Token的有效期为24小时。建议进行缓存,避免频繁调用。使用Token前请确保Token离过期有足够的时间,防止调用API的过程中Token过期导致调用API失败。重新获取Token,不影响已有Token有效性。
- 如果在Token有效期内进行如下操作,当前Token将立即失效。
- 删除/停用IAM用户。
- 修改IAM用户密码、访问密钥。
- IAM用户权限发生变化(如帐号欠费无法访问云服务、申请公测通过、IAM用户权限被修改等)。
- 使用Token调用云服务API时, 返回“The token must be updated”,则Token过期,需要客户端重新获取Token。
- 获取Token常见问题
用户名或密码错误:请排查输入的用户名和密码是否正确。用户名密码正确但是仍旧报错,请排查当前获取Token的帐号是否为华为帐号,华为帐号不支持直接获取Token,请新建IAM用户并授权,使用IAM用户获取Token。
没有API访问权限:调用API前,请确保已开启编程访问。
- 其他相关操作
- 如果您开启了登录保护并设置登录保护为MFA验证,请参考获取IAM用户Token(使用密码+虚拟MFA)获取IAM用户Token。
- 如果需要获取具有Security Administrator权限的Token,请参见:如何获取Security Administrator权限的Token。
- 通过Postman获取用户Token示例请参见:如何通过Postman获取用户Token。
- 您还可以通过视频教程了解如何使用Token认证:IAM视频帮助 。
调试
您可以在API Explorer中调试该接口。
URI
POST /v3/auth/tokens
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
nocatalog |
否 |
String |
如果设置该参数,返回的响应体中将不显示catalog信息。任何非空字符串都将解释为true,并使该字段生效。 |
请求参数
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
Content-Type |
是 |
String |
该字段内容填为“application/json;charset=utf8”。 |
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
是 |
Object |
认证信息。 |
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
是 |
Object |
认证参数。 |
|
否 |
Object |
Token的使用范围,取值为project或domain,二选一即可。
说明:
|
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
methods |
是 |
Array of strings |
认证方法,该字段内容为["password"]。 |
是 |
Object |
IAM用户密码认证信息。
说明:
|
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
是 |
Object |
IAM用户所属帐号信息。了解帐号与IAM用户的关系。 |
|
name |
是 |
String |
IAM用户名。 |
password |
是 |
String |
IAM用户的登录密码。
说明:
|
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
name |
是 |
String |
IAM用户所属帐号名称,获取方式请参见:获取帐号、IAM用户、项目、用户组、区域、委托的名称和ID。 |
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
否 |
Object |
取值为domain时,表示获取的Token可以作用于全局服务,全局服务不区分项目或区域,如OBS服务。如需了解服务作用范围,请参考系统权限。domain支持id和name,二选一即可,建议选择“domain_id”。 |
|
否 |
Object |
取值为project时,表示获取的Token可以作用于项目级服务,仅能访问指定project下的资源,如ECS服务。如需了解服务作用范围,请参考系统权限。project支持id和name,二选一即可。 |
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
id |
否 |
String |
IAM用户所属帐号ID,获取方式请参见:获取帐号、IAM用户、项目、用户组、区域、委托的名称和ID。id和name,二选一即可。 |
name |
否 |
String |
IAM用户所属帐号名称,获取方式请参见:获取帐号、IAM用户、项目、用户组、区域、委托的名称和ID。id和name,二选一即可。 |
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
id |
否 |
String |
IAM用户所属帐号的项目ID,获取方式请参见:获取帐号、IAM用户、项目、用户组、区域、委托的名称和ID。id和name,二选一即可。 |
name |
否 |
String |
IAM用户所属帐号的项目名称,获取方式请参见:获取帐号、IAM用户、项目、用户组、区域、委托的名称和ID。id和name,二选一即可。 |
请求示例
- 获取IAM用户名为“IAMUser”,IAM用户密码为“IAMPassword”,所属租户名为“IAMDomain”,作用范围为项目“cn-north-1”,且返回的响应体中将不显示catalog信息的Token。
POST https://iam.myhuaweicloud.com/v3/auth/tokens?nocatalog=true{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "IAMDomain" //IAM用户所属帐号名 }, "name": "IAMUser", //IAM用户名 "password": "IAMPassword" //IAM用户密码 } } }, "scope": { "project": { "name": "cn-north-1" //项目名称 } } } } - 获取IAM用户名为“IAMUser”,IAM用户密码为“IAMPassword”,所属帐号名为“IAMDomain”,作用范围为整个帐号的Token。
POST https://iam.myhuaweicloud.com/v3/auth/tokens{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "IAMDomain" //IAM用户所属帐号名 }, "name": "IAMUser", //IAM用户名 "password": "IAMPassword" //IAM用户密码 } } }, "scope": { "domain": { "name": "IAMDomain" //IAM用户所属帐号名 } } } }
响应参数
参数 |
参数类型 |
描述 |
|---|---|---|
X-Subject-Token |
string |
签名后的Token。 |
参数 |
参数类型 |
描述 |
|---|---|---|
Object |
获取到的Token信息。 |
参数 |
参数类型 |
描述 |
|---|---|---|
Array of objects |
服务目录信息。 |
|
Object |
获取Token的IAM用户所属的帐号信息。如果获取Token时请求体中scope参数设置为domain,则返回该字段。 |
|
expires_at |
String |
Token过期时间。 |
issued_at |
String |
Token下发时间。 |
methods |
Array of strings |
获取Token的方式。 |
Object |
获取Token的IAM用户所属帐号的项目信息。如果获取Token时请求体中scope参数设置为project,则返回该字段。 |
|
Array of objects |
Token的权限信息。 |
|
Object |
获取Token的IAM用户信息。 |
参数 |
参数类型 |
描述 |
|---|---|---|
Array of objects |
终端节点。 |
|
id |
String |
服务ID。 |
name |
String |
服务名称。 |
type |
String |
该接口所属服务。 |
参数 |
参数类型 |
描述 |
|---|---|---|
id |
String |
终端节点ID。 |
interface |
String |
接口类型,描述接口在该终端节点的可见性。值为“public”,表示该接口为公开接口。 |
region |
String |
终端节点所属区域。 |
region_id |
String |
终端节点所属区域ID。 |
url |
String |
终端节点的URL。 |
响应示例
状态码为 201 时:
创建成功。
- 获取IAM用户名为“IAMUser”,IAM用户密码为“IAMPassword”,所属帐号名为“IAMDomain”,作用范围为项目“cn-north-1”,且返回的响应体中将不显示catalog信息的Token。
响应Header参数(获取到的Token): X-Subject-Token:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB...
响应Body参数: { "token": { "catalog": [], "expires_at": "2020-01-04T09:05:22.701000Z", "issued_at": "2020-01-03T09:05:22.701000Z", "methods": [ "password" ], "project": { "domain": { "id": "d78cbac186b744899480f25bd022f...", "name": "IAMDomain" }, "id": "aa2d97d7e62c4b7da3ffdfc11551f...", "name": "cn-north-1" }, "roles": [ { "id": "0", "name": "te_admin" }, { "id": "0", "name": "op_gated_OBS_file_protocol" }, { "id": "0", "name": "op_gated_Video_Campus" } ], "user": { "domain": { "id": "d78cbac186b744899480f25bd022f...", "name": "IAMDomain" }, "id": "7116d09f88fa41908676fdd4b039e...", "name": "IAMUser", "password_expires_at": "" } } } - 获取IAM用户名为“IAMUser”,IAM用户密码为“IAMPassword”,所属帐号名为“IAMDomain”,作用范围为整个帐号的Token。
响应Header参数(获取到的Token): X-Subject-Token:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB...
响应Body参数: { "token": { "catalog": [ { "endpoints": [ { "id": "33e1cbdd86d34e89a63cf8ad16a5f...", "interface": "public", "region": "*", "region_id": "*", "url": "https://iam.myhuaweicloud.com/v3.0" } ], "id": "100a6a3477f1495286579b819d399...", "name": "iam", "type": "iam" }, { "endpoints": [ { "id": "29319cf2052d4e94bcf438b55d143...", "interface": "public", "region": "*", "region_id": "*", "url": "https://bss.sample.domain.com/v1.0" } ], "id": "c6db69fabbd549908adcb861c7e47...", "name": "bssv1", "type": "bssv1" } ], "domain": { "id": "d78cbac186b744899480f25bd022f...", "name": "IAMDomain" }, "expires_at": "2020-01-04T09:08:49.965000Z", "issued_at": "2020-01-03T09:08:49.965000Z", "methods": [ "password" ], "roles": [ { "id": "0", "name": "te_admin" }, { "id": "0", "name": "secu_admin" }, { "id": "0", "name": "te_agency" } ], "user": { "domain": { "id": "d78cbac186b744899480f25bd022f...", "name": "IAMDomain" }, "id": "7116d09f88fa41908676fdd4b039e...", "name": "IAMUser", "password_expires_at": "" } } }
状态码为 400 时:
参数无效。请排查body体是否符合json语法。
{
"error": {
"code": 400,
"message": "The request body is invalid",
"title": "Bad Request"
}
}
状态码为 401 时:
认证失败。
- 如果您是第三方系统用户,直接使用联邦认证的用户名和密码获取Token,系统会提示密码错误。请在华为云的登录页面,通过“忘记密码”功能,设置华为云帐号密码,并在password中输入新设置的密码。
- 如果您的华为云帐号已升级为华为帐号,直接使用华为帐号名和密码获取Token,系统会提示密码错误。建议您为自己创建一个IAM用户,授予该用户必要的权限,获取IAM用户Token。
{
"error": {
"code": 401,
"message": "The username or password is wrong.",
"title": "Unauthorized"
}
}
返回值
返回值 |
描述 |
|---|---|
201 |
创建成功。 |
400 |
参数无效。 |
401 |
认证失败。 |
403 |
没有操作权限。 |
404 |
未找到相应的资源。 |
500 |
内部服务错误。 |
503 |
服务不可用。 |
错误码
无