文档首页> > API参考> Token管理> 获取用户Token

获取用户Token

分享
更新时间: 2019/07/13 15:28

功能介绍

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

该接口可以使用全局区域的Endpoint和其他区域的Endpoint调用,全局区域的Endpoint为iam.myhuaweicloud.com。如果使用全局区域的Endpoint调用,除了巴黎、新加坡、亚特兰大区域外,该token可以在所有区域使用。如果使用区域的Endpoint调用,该token仅在该区域生效,不能跨区域使用。IAM的Endpoint请参见:终端节点

说明:
  • Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。
  • 获取用户Token示例,请参见:如何通过Postman获取用户Token
  • 如果需要获取具有Security Administrator权限的Token,请参见:IAM 常见问题

URI

URI格式

POST /v3/auth/tokens

请求

  • Request Header参数说明

    参数

    是否必选

    类型

    说明

    Content-Type

    String

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

    本接口功能为获取Token,因此调用该接口时,请求头中不用填写“X-Auth-Token”字段,只添加“Content-Type”即可,添加消息头后的请求如下所示。

    POST https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens
    Content-Type: application/json

  • Request Body参数说明

    参数

    是否必选

    类型

    说明

    identity

    Json Object

    认证参数,包含:methods,password。

    "identity": {
          "methods": ["password"],
          "password": {

    methods

    String Array

    认证方法,该字段内容为“password”。如果用户开启了虚拟MFA设备的登录保护功能时,该字段内容为[“password”,"totp"]

    password

    Json Object

    认证信息,示例:

    "password": {
            "user": {
              "name": "James",
              "password": "**********",
              "domain": {
                "name": "A-Company"
    • user.name用户名称,根据获取token的主体填写。
    • password用户的登录密码。
    • domain.name用户所属的账号名称。如果是账号获取token,账号的user.name和domain.name相同,此处填写user.name即可。否则此处填写用户所属的账号名称。
    说明:
    • user.name和domain.name可以在界面控制台“我的凭证”中查看,具体获取方法请参见:获取用户名、账号名和项目名
    • 如果是第三方系统用户,直接使用联邦认证的用户名和密码获取token,系统会提示密码错误。需要在华为云的登录页面,通过“忘记密码”功能,在华为云中设置登录密码,并在password中输入新设置的密码。
    • 该接口提供了锁定机制用于防止暴力破解,调用时,请确保用户名密码正确,输错一定次数(管理员可设置该规则)将被锁定。

    totp

    Json Object

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

    示例:

    "totp": {
            "user": {
              "id": "b95b78b67fa045b38104c12fb...",
              "passcode": "******"

    scope

    Json Object

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

    • 示例1:取值为project时,表示获取的token仅能访问指定project下的资源,project支持id和name,二选一即可。
      "scope": {
            "project": {
            "id": "0b95b78b67fa045b38104c12fb..."
            "name": "cn-north-1"
            }
          }
      说明:

      使用区域的Endpoint(非全局域名)调用该接口时,推荐您将scope设置为project,该参数需要填入对应区域project的name或者id。

    • 示例2:取值为domain时,表示获取的Token可以访问指定账号下所有资源,domain支持id和name,二选一即可。
      "scope": {
            "domain": {
            "id": "6b8eb224c76842e3ac2..."
            "name": "A-Company"
            }
          }
      说明:

      使用全局区域的Endpoint调用该接口时,推荐您将scope设置为domain,该token可以跨区域使用,如果将scope设置为project,该token仅能在指定的project中使用,不能跨区域使用。

    nocatalog

    String

    如果设置该参数,返回的响应体中将不显示catalog信息。

  • 请求样例

    获取用户名为James,登录密码为“**********”,所属账号名为A-Company,作用范围为整个账号的token。

    {
      "auth": {
        "identity": {
          "methods": ["password"],
          "password": {
            "user": {
              "name": "James",
              "password": "**********",
              "domain": {
                "name": "A-Company"
              }
            }
          }
        },
        "scope": {
          "domain": {
            "name": "A-Company"
          }
        }
      }
    }

    获取用户名为James,登录密码为“**********”,所属账号名为A-Company,作用范围为指定project的token。

    {
      "auth": {
        "identity": {
          "methods": ["password"],
          "password": {
            "user": {
              "name": "James",
              "password": "**********",
              "domain": {
                "name": "A-Company"
              }
            }
          }
        },
        "scope": {
          "project": {
            "name": "cn-north-1"
          }
        }
      }
    }

    开启虚拟MFA方式登录保护时获取token的请求样例。

    {
    	"auth": {
    		"identity": {
    			"methods": ["password", "totp"],
    			"password": {
    				"user": {
    					"name": "James",
    					"password": "********",
    					"domain": {
    						"name": "A-Company"
    					}
    				}
    			},
    			"totp" : {
    				"user": {
    					"id": "dfsafdfsaf....",
    					"passcode": "******"
    				}
    			}
    		},
    		"scope": {
    			"domain": {
    				"name": "A-Company"
    			}
    		}
    	}
    }

响应

  • Response Header参数说明

    参数

    是否必选

    类型

    描述

    X-Subject-Token

    String

    签名后的token。

  • Token格式说明

    参数

    是否必选

    类型

    描述

    methods

    Json Array

    获取token的方式。

    expires_at

    String

    token到期时间。

    issued_at

    String

    token产生时间。

    user

    Json Object

    示例:

    "user": { 
          "name": "James", 
          "id": "b95b78b67fa045b38104...", 
          "password_expires_at":"2016-11-06T15:32:17.000000",
          "domain": { 
             "name": "A-Company",
             "id": "fdec73ffea524aa1b373e40..."
           } 
        }
    • user.name:用户名称。
    • user.id:用户ID。
    • domain.name:用户所属的账号名称。
    • domain.id:用户所属的账户的ID。
    • password_expires_at:密码过期时间(UTC时间),“null”表示密码不过期。

    domain

    Json Object

    如果请求体中scope参数设置为domain,则返回该字段。

    示例:

    "domain": { 
          "name" : "A-Company"     
          "id" : "fdec73ffea524aa1b373e40..."
    • domain.name用户所属的账户名称。
    • domain.id用户所属的账户的ID。

    project

    Json Object

    如果请求体中scope参数设置为project,则返回该字段。

    示例:

    "project": { 
          "name": "Project A", 
          "id": "34c77f3eaf84c00aaf54...", 
          "domain": { 
             "name": "A-Company",
             "id": "fdec73ffea524aa1b373e40..."
           } 
       }
    • project.name:project名称。
    • project.id:project的ID。
    • domain.name:project所属的账户名称。
    • domain.id:project所属的账户的ID。

    catalog

    Json Array

    endpoints相关信息。

    示例:

    "catalog": [{
        "type": "identity",
        "id": "1331e5cff2a74d76b03da1225910e31d",
        "name": "iam",
        "endpoints": [{
            "url": "www.example.com/v3",
            "region": "*",
            "region_id": "*",
            "interface": "public",
            "id": "089d4a381d574308a703122d3ae738e9"
        }]
    }]
    • type:该接口所属的服务。
    • id:服务的id。
    • name:服务的名称。
    • endpoints:终端节点。
    • url:调用该接口的url。
    • region:服务的所属区域。
    • region_id:服务的所属区域id。
    • interface:接口状态,public表示为公开。
    • id:接口的id。

    roles

    Json Object

    Token的权限信息。

    示例:

    "roles" : [{ 
         "name" : "role1", 
         "id" : "roleid1" 
         }, { 
         "name" : "role2", 
         "id" : "roleid2" 
         } 
       ] 
  • 响应样例
    样例中domain、user和role的关系为:domain为华为云账号,账号是资源归属、资源使用计费的主体,对其所拥有的资源及云服务具有完全的访问权限,可以创建用户和用户组、分配用户权限等。user为账号在IAM中创建的用户,是账号中的子用户,权限由账号分配。如果是账号本身获取token,则domain和user信息一致。role为获取的token具备的权限。
    Response Header中存储信息为:
    X-Subject-Token:MIIDkgYJKoZIhvcNAQcCoIIDgzCCA38CAQExDTALBglghkgBZQMEAgEwgXXXXX...
    
    Response Body中存储信息为: 
    {
      "token" : {
        "methods" : ["password"],
        "expires_at" : "2015-11-09T01:42:57.527363Z",
        "issued_at" : "2015-11-09T00:42:57.527404Z",
        "user" : {
          "domain" : {
          "id" : "default",
          "name" : "exampledomain"
          },
          "id" : "ee4dfb6e5540447cb37419051XXX..",
          "name" : "exampleuser",
          "password_expires_at":"2016-11-06T15:32:17.000000",
        },
        "domain" : {
           "name" : "exampledomain",
           "id" : "default"
        },
        "catalog": [{
            "type": "identity",
            "id": "1331e5cff2a74d76b03da12259XXXX...",
            "name": "iam",
            "endpoints": [{
                "url": "www.example.com/v3",
                "region": "*",
                "region_id": "*",
               "interface": "public",
                 "id": "089d4a381d574308a703122d3aXXXX..."
           }]
        }], 
        "roles" : [{
           "name" : "role1",
           "id" : "roleid1"
           }, {
           "name" : "role2",
           "id" : "roleid2"
           }
      ]
      }
    }

状态码

状态码

说明

201

请求成功。

400

请求错误。

401

认证失败。

403

鉴权失败。

404

找不到资源。

500

内部服务错误。可能是格式错误。

503

服务不可用。

如果您喜欢这篇文档,您还可以:

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区