Skip to content

Latest commit

 

History

History
1101 lines (992 loc) · 89.9 KB

获取IAM用户Token(使用密码).md

File metadata and controls

1101 lines (992 loc) · 89.9 KB

获取IAM用户Token(使用密码)

功能介绍

该接口可以用于通过用户名/密码的方式进行认证来获取IAM用户的Token。Token是系统颁发给IAM用户的访问令牌,承载用户的身份、权限等信息。调用IAM以及其他云服务的接口时,可以使用本接口获取的IAM用户Token进行鉴权。

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

接口使用导航:

IAM用户获取Token

判断当前帐号是华为帐号还是华为云帐号

华为帐号获取Token

华为云帐号获取Token

第三方系统用户获取Token

Token有效期说明

获取Token常见问题

其他相关操作

  • 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前,请确保已开启编程访问

  • 其他相关操作

调试

您可以在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"]。

password

Object

IAM用户密码认证信息。

说明:

表 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,建议您为自己创建一个IAM用户,授予该用户必要的权限,获取IAM用户Token。
  • 如果您是第三方系统用户,直接使用联邦认证的用户名和密码获取Token,系统会提示密码错误。请在华为云的登录页面,通过“忘记密码”功能,设置华为云帐号密码,并在password中输入新设置的密码。

表 8 auth.identity.password.user.domain

参数

是否必选

参数类型

描述

name

String

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

表 9 auth.scope

参数

是否必选

参数类型

描述

domain

Object

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

project

Object

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

表 10 auth.scope.domain

参数

是否必选

参数类型

描述

id

String

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

name

String

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

表 11 auth.scope.project

参数

是否必选

参数类型

描述

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用户所属帐号名
                }
            }
        }
    }
    

响应参数

表 12 响应Header参数

参数

参数类型

描述

X-Subject-Token

string

签名后的Token。

表 13 响应Body参数

参数

参数类型

描述

Token

Object

获取到的Token信息。

表 14 Token

参数

参数类型

描述

catalog

Array of objects

服务目录信息。

domain

Object

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

expires_at

String

Token过期时间。

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用户信息。

表 15 Token.catalog

参数

参数类型

描述

endpoints

Array of objects

终端节点。

id

String

服务ID。

name

String

服务名称。

type

String

该接口所属服务。

表 16 Token.catalog.endpoints

参数

参数类型

描述

id

String

终端节点ID。

interface

String

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

region

String

终端节点所属区域。

region_id

String

终端节点所属区域ID。

url

String

终端节点的URL。

表 17 Token.domain

参数

参数类型

描述

name

String

帐号名称。

id

String

帐号ID。

表 18 Token.project

参数

参数类型

描述

domain

Object

项目所属帐号信息。

id

String

项目ID。

name

String

项目名称。

表 19 Token.project.domain

参数

参数类型

描述

id

String

帐号ID。

name

String

帐号名称。

表 20 Token.roles

参数

参数类型

描述

name

String

权限名称。

id

String

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

表 21 Token.user

参数

参数类型

描述

name

String

IAM用户名。

id

String

IAM用户ID。

password_expires_at

String

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

domain

Object

IAM用户所属的帐号信息。

表 22 Token.user.domain

参数

参数类型

描述

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_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

服务不可用。

错误码