获取IAM用户Token(使用密码)
功能介绍
该接口可以用于通过用户名/密码的方式进行认证来获取IAM用户的Token。Token是系统颁发给IAM用户的访问令牌,承载用户的身份、权限等信息。调用IAM以及其他云服务的接口时,可以使用本接口获取的IAM用户Token进行鉴权。但强烈推荐您使用AK/SK签名认证方式调用API,可以避免因缓存的Token失效导致的API调用失败的问题。
该接口可以使用全局区域的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最长30分钟失效。
- 删除/停用IAM用户。
- 修改IAM用户密码、访问密钥。
- IAM用户权限发生变化(如账号欠费无法访问云服务、申请公测通过、IAM用户权限被修改等)。
- 使用Token调用云服务API时, 返回“The token must be updated”,则Token过期,需要客户端重新获取Token。
- 获取Token常见问题
用户名或密码错误:请排查输入的用户名和密码是否正确。用户名密码正确但是仍旧报错,请排查当前获取Token的账号是否为华为账号,华为账号不支持直接获取Token,请新建IAM用户并授权,使用IAM用户获取Token。
没有API访问权限:调用API前,请确保已开启编程访问。
Token是否可以被篡改:Token生成时加入了签名防篡改的机制,Token被修改后无法通过验签,防止Token被伪造。
- 其他相关操作
- 如果您开启了登录保护并设置登录保护为MFA验证,请参考获取IAM用户Token(使用密码+虚拟MFA)获取IAM用户Token。
- 如果需要获取具有Security Administrator权限的Token,请参见:如何获取Security Administrator权限的Token。
- 通过Postman获取用户Token示例请参见:如何通过Postman获取用户Token。
调试
您可以在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。当auth.scope选择了domain时,获取的Token可以作用于全局服务,id和name需要二选一。 |
name |
否 |
String |
IAM用户所属账号名称,获取方式请参见:获取账号、IAM用户、项目、用户组、区域、委托的名称和ID。当auth.scope选择了domain时,获取的Token可以作用于全局服务,id和name需要二选一。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
id |
否 |
String |
表示IAM用户所属账号的项目ID,获取方式请参见:获取账号、IAM用户、项目、用户组、区域、委托的名称和ID。当auth.scope选择了project时,获取的Token可以作用于项目级服务,id和name需要二选一。每个区域的项目ID有所不同,需要根据业务所在的区域使用对应的项目ID。 |
name |
否 |
String |
表示IAM用户所属账号的项目名称,获取方式请参见:获取账号、IAM用户、项目、用户组、区域、委托的名称和ID。当auth.scope选择了project时,获取的Token可以作用于项目级服务,id和name需要二选一。 |
请求示例
- 获取IAM用户名为“IAMUser”,IAM用户密码为“IAMPassword”,所属租户名为“IAMDomain”,作用范围为项目“ap-southeast-1”,且返回的响应体中将不显示catalog信息的Token。IAM用户名、所属账号名可以在界面控制台“我的凭证”中查看,具体获取方法请参见:获取账号、IAM用户、项目、用户组、区域、委托的名称和ID。
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": "ap-southeast-1" //项目名称 } } } }
- 获取IAM用户名为“IAMUser”,IAM用户密码为“IAMPassword”,所属账号名为“IAMDomain”,作用范围为整个账号的Token。IAM用户名、所属账号名可以在界面控制台“我的凭证”中查看,具体获取方法请参见:获取账号、IAM用户、项目、用户组、区域、委托的名称和ID。
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,小于32KB。 |
参数 |
参数类型 |
描述 |
---|---|---|
Object |
获取到的Token信息。 |
参数 |
参数类型 |
描述 |
---|---|---|
Array of objects |
服务目录信息。 |
|
Object |
获取Token的IAM用户所属的账号信息。如果获取Token时请求体中scope参数设置为domain,则返回该字段。 |
|
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。 |
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。 |
参数 |
参数类型 |
描述 |
---|---|---|
name |
String |
IAM用户名。 |
id |
String |
IAM用户ID。 |
password_expires_at |
String |
密码过期时间,“”表示密码不过期。
说明:
UTC时间,格式为YYYY-MM-DDTHH:mm:ss.ssssssZ,日期和时间戳格式参照ISO-8601,如:2023-06-28T08:56:33.710000Z。 |
Object |
IAM用户所属的账号信息。 |
响应示例
状态码为 201 时:
创建成功。
- 获取IAM用户名为“IAMUser”,IAM用户密码为“IAMPassword”,所属账号名为“IAMDomain”,作用范围为项目“ap-southeast-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": "ap-southeast-1" }, "roles": [ { "id": "0", "name": "te_admin" }, { "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 |
服务不可用。 |
错误码
无