获取iam用户token(使用密码)-九游平台
功能介绍
该接口可以用于通过用户名/密码的方式进行认证来获取iam用户的token。token是系统颁发给iam用户的访问令牌,承载用户的身份、权限等信息。调用iam以及其他云服务的接口时,可以使用本接口获取的iam用户token进行鉴权。但强烈推荐您使用调用api,可以避免因缓存的token失效导致的api调用失败的问题。
该接口可以使用全局区域的endpoint和其他区域的endpoint调用。iam的endpoint请参见:。
在使用本接口前,请先确认当前需要获取token的身份:
- iam用户获取token
直接按照请求参数说明获取token。
- 华为账号获取token
华为账号不支持直接获取账号token,排查是否为华为账号请参见:
华为账号获取token请参见以下步骤:,授予该用户必要的权限,使用创建的iam用户名和密码,获取iam用户token。
- 华为云账号获取token
直接按照请求参数说明获取token。
- 第三方系统用户获取token
如果您是第三方系统用户,直接使用联邦认证的用户名和密码获取token,系统会提示密码错误。请先在华为云的登录页面,通过“忘记密码”功能,设置华为云账号密码。
通过postman获取用户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被修改后无法通过验签,防止token被伪造。
调试
您可以在中调试该接口。
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 |
需要获取token的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”,作用范围为项目“cn-north-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": "cn-north-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,日期和时间戳格式参照,如:2023-06-28t08:56:33.710000z。 |
issued_at |
string |
token下发时间。
说明:
utc时间,格式为yyyy-mm-ddthh:mm:ss.ssssssz,日期和时间戳格式参照,如: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 |
账号名称。 |
id |
string |
账号id。 |
参数 |
参数类型 |
描述 |
---|---|---|
object |
项目所属账号信息。 |
|
id |
string |
项目id。 |
name |
string |
项目名称。 |
参数 |
参数类型 |
描述 |
---|---|---|
id |
string |
账号id。 |
name |
string |
账号名称。 |
参数 |
参数类型 |
描述 |
---|---|---|
name |
string |
权限名称。 |
id |
string |
权限id。默认显示为0,非真实权限id。 |
参数 |
参数类型 |
描述 |
---|---|---|
name |
string |
iam用户名。 |
id |
string |
iam用户id。 |
password_expires_at |
string |
密码过期时间,“”表示密码不过期。
说明:
utc时间,格式为yyyy-mm-ddthh:mm:ss.ssssssz,日期和时间戳格式参照,如:2023-06-28t08:56:33.710000z。 |
object |
iam用户所属的账号信息。 |
参数 |
参数类型 |
描述 |
---|---|---|
name |
string |
iam用户所属账号名称。 |
id |
string |
iam用户所属账号id。 |
响应示例
状态码为 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_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 |
服务不可用。 |
错误码
无
故障处理
- 提示用户名或密码错误:请排查输入的用户名和密码是否正确。用户名密码正确但是仍旧报错,请排查,华为账号不支持直接获取token,请新建一个iam用户并授权,并使用该iam用户名和密码获取token。
- 提示没有api访问权限:调用api前,请确保已开启编程访问。
相关操作
- 如果您开启了登录保护并设置登录保护为mfa验证,请参考获取iam用户token。
- 如果需要获取具有security administrator权限的token,请参见:。
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨