文档首页> 统一身份认证服务 IAM> API参考> API> Token管理> 获取IAM用户Token(使用密码+虚拟MFA)
更新时间:2022-04-08 GMT+08:00
分享

获取IAM用户Token(使用密码+虚拟MFA)

功能介绍

该接口可以用于通过用户名/密码+虚拟MFA的方式进行认证,在IAM用户开启了的登录保护功能,并选择通过虚拟MFA验证时获取IAM用户Token。

Token是系统颁发给用户的访问令牌,承载用户的身份、权限等信息。调用IAM以及其他云服务的接口时,可以使用本接口获取的Token进行鉴权。

该接口可以使用全局区域的Endpoint和其他区域的Endpoint调用。IAM的Endpoint请参见:地区和终端节点

  • Token的有效期

    Token的有效期为24小时。建议进行缓存,避免频繁调用。使用Token前请确保Token离过期有足够的时间,防止调用API的过程中Token过期导致调用API失败。

    重新获取Token,不影响已有Token有效性。如果在Token有效期内进行如下操作,当前Token将立即失效:

    • 删除/停用IAM用户。
    • 修改IAM用户密码、访问密钥。
    • IAM用户权限发生变化(如帐号欠费无法访问云服务、申请公测通过、IAM用户权限被修改等)。
  • 非华为云帐号获取Token
    • 如果您的华为云帐号已升级为华为帐号,将不支持获取帐号Token,建议您为自己创建一个IAM用户,授予该用户必要的权限,获取IAM用户Token。
    • 如果您是第三方系统用户,直接使用联邦认证的用户名和密码获取Token,系统会提示密码错误。请先在华为云的登录页面,通过“忘记密码”功能,设置华为云帐号密码
  • 相关操作

调试

您可以在API Explorer中调试该接口。

URI

POST /v3/auth/tokens

表1 Query参数

参数

是否必选

参数类型

描述

nocatalog

String

如果设置该参数,返回的响应体中将不显示catalog信息。任何非空字符串都将解释为true,并使该字段生效。

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

Content-Type

String

该字段内容填为“application/json;charset=utf8”。

表3 请求Body参数

参数

是否必选

参数类型

描述

auth

Object

认证信息。

表4 auth

参数

是否必选

参数类型

描述

identity

Object

认证参数。

scope

Object

Token的使用范围,取值为project或domain,二选一即可。

说明:
  • 如果您将scope设置为domain,该Token适用于全局级服务;如果将scope设置为project,该Token适用于项目级服务。
  • 如果您将scope同时设置为project和domain,将以project参数为准,获取到项目级服务的Token。
  • 如果您将scope置空,将获取到全局级服务的Token。建议您按需要填写Token使用范围。
表5 auth.identity

参数

是否必选

参数类型

描述

methods

Array of strings

认证方法,该字段内容为["password", "totp"]。

取值范围:

  • password
  • totp

password

Object

用户密码认证信息。

说明:

totp

Object

totp认证信息,仅在您已开启虚拟MFA方式的登录保护功能时需要填写该参数。

表6 auth.identity.password

参数

是否必选

参数类型

描述

user

Object

需要获取Token的IAM用户信息。

表7 auth.identity.password.user

参数

是否必选

参数类型

描述

domain

Object

IAM用户所属帐号信息。了解帐号与IAM用户的关系

name

String

IAM用户名。

password

String

IAM用户的登录密码。

说明:
  • 务必保证密码输入正确,避免获取Token失败。
  • 如果您是第三方系统用户,直接使用联邦认证的用户名和密码获取Token,系统会提示密码错误。请在华为云的登录页面,通过“忘记密码”功能,设置华为云帐号密码,并在password中输入新设置的密码。
表8 auth.identity.password.user.domain

参数

是否必选

参数类型

描述

name

String

IAM用户所属帐号名称,获取方式请参见:获取帐号、IAM用户、项目、用户组、区域、委托的名称和ID

表9 auth.identity.totp

参数

是否必选

参数类型

描述

user

Object

IAM用户信息。该IAM用户已开启登录保护,并选择以虚拟MFA方式进行身份验证,开启/关闭登录保护方法请参见:敏感操作

表10 auth.identity.totp.user

参数

是否必选

参数类型

描述

id

String

已开启虚拟MFA方式的登录保护的IAM用户ID。

passcode

String

虚拟MFA验证码,在MFA应用程序中获取动态验证码,获取方法请参见:如何获取虚拟MFA验证码

说明:

务必保证验证码输入正确,避免获取Token失败。

表11 auth.scope

参数

是否必选

参数类型

描述

domain

Object

取值为domain时,表示获取的Token可以作用于全局服务,全局服务不区分项目或区域,如OBS服务。如需了解服务作用范围,请参考系统权限。domain支持id和name,二选一即可,建议选择“domain_id”。

project

Object

取值为project时,表示获取的Token可以作用于项目级服务,仅能访问指定project下的资源,如ECS服务。如需了解服务作用范围,请参考系统权限。project支持id和name,二选一即可。

表12 auth.scope.domain

参数

是否必选

参数类型

描述

id

String

IAM用户所属帐号ID,获取方式请参见:获取帐号、IAM用户、项目、用户组、区域、委托的名称和ID

name

String

IAM用户所属帐号名称,获取方式请参见:获取帐号、IAM用户、项目、用户组、区域、委托的名称和ID

表13 auth.scope.project

参数

是否必选

参数类型

描述

id

String

IAM用户所属帐号的项目id,获取方式请参见:获取帐号、IAM用户、项目、用户组、区域、委托的名称和ID

name

String

IAM用户所属帐号的项目名称,获取方式请参见:获取帐号、IAM用户、项目、用户组、区域、委托的名称和ID

请求示例

  • 示例1:获取IAM用户名为“IAMUser”,密码为“IAMPassword”,所属帐号名为“IAMDomain”,作用范围为整个帐号的Token。
    POST https://iam.myhuaweicloud.com/v3/auth/tokens
    {
        "auth": {
            "identity": {
                "methods": [
                    "password",
                    "totp"
                ],
                "password": {
                    "user": {
                        "name": "IAMUser",                            //IAM用户名
                        "password": "IAMPassword",                   //IAM用户密码
                        "domain": {
                            "name": "IAMDomain"                      //IAM用户所属帐号名
                        }
                    }
                },
                "totp": {
                    "user": {
                        "id": "7116d09f88fa41908676fdd4b039e...",  //IAM用户ID
                        "passcode": "******"                           //虚拟MFA验证码
                    }
                }
            },
            "scope": {
                "domain": {
                    "name": "IAMDomain"                                 //IAM用户所属帐号名
                }
            }
        }
    }
  • 示例2:获取IAM用户名为“IAMUser”,密码为“IAMPassword”,所属帐号名为“IAMDomain”,作用范围为项目“cn-north-1”,且返回的响应体中将不显示catalog信息的Token。
    POST https://iam.myhuaweicloud.com/v3/auth/tokens?nocatalog=true
    {
        "auth": {
            "identity": {
                "methods": [
                    "password",
                    "totp"
                ],
                "password": {
                    "user": {
                        "name": "IAMUser",                            //IAM用户名
                        "password": "IAMPassword",                   //IAM用户密码
                        "domain": {
                            "name": "IAMDomain"                      //IAM用户所属帐号名
                        }
                    }
                },
                "totp": {
                    "user": {
                        "id": "7116d09f88fa41908676fdd4b039e...",  //IAM用户ID
                        "passcode": "******"                           //虚拟MFA验证码
                    }
                }
            },
            "scope": {
                "project": {
                    "name": "cn-north-1"                                //项目名称
                }
            }
        }
    }

响应参数

表14 响应Header参数

参数

参数类型

描述

X-Subject-Token

string

签名后的Token。

表15 响应Body参数

参数

参数类型

描述

token

Object

获取到的Token信息。

表16 token

参数

参数类型

描述

catalog

Array of objects

服务目录信息。

domain

Object

获取Token的IAM用户所属的帐号信息。如果获取Token时请求体中scope参数设置为domain,则返回该字段。

expires_at

String

Token过期时间。

mfa_authn_at

String

MFA验证时间。

issued_at

String

Token下发时间。

methods

Array of strings

获取Token的方式。

project

Object

获取Token的IAM用户所属帐号的项目信息。如果获取Token时请求体中scope参数设置为project,则返回该字段。

roles

Array of objects

Token的权限信息。

user

Object

获取Token的IAM用户信息。

表17 token.catalog

参数

参数类型

描述

endpoints

Array of objects

终端节点。

id

String

服务ID。

name

String

服务名称。

type

String

该接口所属服务。

表18 token.catalog.endpoints

参数

参数类型

描述

id

String

终端节点ID。

interface

String

接口类型,描述接口在该终端节点的可见性。值为“public”,表示该接口为公开接口。

region

String

终端节点所属区域。

region_id

String

终端节点所属区域ID。

url

String

终端节点的URL。

表19 token.domain

参数

参数类型

描述

name

String

帐号名称。

id

String

帐号ID。

表20 token.project

参数

参数类型

描述

domain

Object

项目所属帐号信息。

id

String

项目ID。

name

String

项目名称。

表21 token.project.domain

参数

参数类型

描述

id

String

帐号ID。

name

String

帐号名称。

表22 token.roles

参数

参数类型

描述

name

String

权限名称。

id

String

权限ID。默认显示为0,非真实权限ID。

表23 token.user

参数

参数类型

描述

name

String

IAM用户名。

id

String

IAM用户ID。

password_expires_at

String

密码过期时间(UTC时间),“”表示密码不过期。

domain

Object

IAM用户所属的帐号信息。

表24 token.user.domain

参数

参数类型

描述

name

String

IAM用户所属帐号名称。

id

String

IAM用户所属帐号ID。

响应示例

状态码为 201 时:

创建成功。

  • 示例 1:获取IAM用户名为“IAMUser”,密码为“IAMPassword”,所属帐号名为“IAMDomain”,作用范围为整个帐号的Token。
    响应Header参数(获取到的Token):
    X-Subject-Token:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB...
    响应Body参数:
    {
        "token": {
            "expires_at": "2020-01-04T09:08:49.965000Z",
            "mfa_authn_at": "2020-01-03T09:08:49.965000Z",
            "methods": [
                "password",
                "totp"
            ],
            "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.myhuaweicloud.com/v1.0"
                        }
                    ],
                    "id": "c6db69fabbd549908adcb861c7e47...",
                    "name": "bssv1",
                    "type": "bssv1"
                }
            ],
            "domain": {
                "id": "d78cbac186b744899480f25bd022f...",
                "name": "IAMDomain"
            },
            "roles": [
                {
                    "id": "0",
                    "name": "te_admin"
                },
                {
                    "id": "0",
                    "name": "secu_admin"
                },
                {
                    "id": "0",
                    "name": "te_agency"
                }
            ],
            "issued_at": "2020-01-03T09:08:49.965000Z",
            "user": {
                "domain": {
                    "id": "d78cbac186b744899480f25bd022f...",
                    "name": "IAMDomain"
                },
                "id": "7116d09f88fa41908676fdd4b039e...",
                "name": "IAMUser",
                "password_expires_at": ""
            }
        }
    }
  • 示例 2:获取IAM用户名为“IAMUser”,密码为“IAMPassword”,所属帐号名为“IAMDomain”,作用范围为项目“cn-north-1”,且返回的响应体中将不显示catalog信息的Token。
    响应Header参数(获取到的Token):
    X-Subject-Token:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB...
    响应Body参数:
    {
        "token": {
            "expires_at": "2020-01-04T09:05:22.701000Z",
            "mfa_authn_at": "2020-01-03T09:05:22.701000Z",
            "methods": [
                "password",
                "totp"
            ],
            "catalog": [],
            "roles": [
                {
                    "id": "0",
                    "name": "te_admin"
                },
                {
                    "id": "0",
                    "name": "op_gated_OBS_file_protocol"
                },
                {
                    "id": "0",
                    "name": "op_gated_Video_Campus"
                }
            ],
            "project": {
                "domain": {
                    "id": "d78cbac186b744899480f25bd022f...",
                    "name": "IAMDomain"
                },
                "id": "aa2d97d7e62c4b7da3ffdfc11551f...",
                "name": "cn-north-1"
            },
            "issued_at": "2020-01-03T09:05:22.701000Z",
            "user": {
                "domain": {
                    "id": "d78cbac186b744899480f25bd022f...",
                    "name": "IAMDomain"
                },
                "id": "7116d09f88fa41908676fdd4b039e...",
                "name": "IAMUser",
                "password_expires_at": ""
            }
        }
    }

状态码为 400 时:

参数无效。

{
    "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

服务不可用。

错误码

分享:

    相关文档

    相关产品

关闭导读