更新时间:2024-04-15 GMT+08:00

获取用户Token

功能介绍

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

Token的有效期为24小时,建议进行缓存,避免频繁调用。使用Token前请确保Token离过期有足够的时间,防止调用API的过程中Token过期导致调用API失败。重新获取Token,不影响已有Token有效性。如果在Token有效期内进行如下操作,当前Token将立即失效,请重新获取。
  • 账号或IAM用户修改密码、访问密钥,该账号或IAM用户Token将立即失效。
  • 删除/停用IAM用户,该IAM用户Token将立即失效。
  • IAM用户权限发生变化,该IAM用户Token将立即失效。如IAM用户加入或移出用户组、用户所在用户组权限变更等。

URI

POST /v3/auth/tokens

请求

  • Request Header参数说明

    参数

    是否必选

    类型

    说明

    Content-Type

    String

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

  • Request Body参数说明

    参数

    是否必选

    类型

    说明

    identity

    Json Object

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

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

    methods

    String Array

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

    password

    Json Object

    认证信息,示例:

    "password": {
            "user": {
              "name": "user A",
              "password": "**********",
              "domain": {
                "name": "domain A"
    • user.name用户名称,根据获取token的主体填写,可以在我的凭证中获取。
    • password用户的登录密码。
    • domain.name用户所属的账号名称,可以在我的凭证中获取。

    totp

    Json Object

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

    示例:

    "totp": {
            "user": {
              "id": "b95b78b67fa045b38104c12fb...",
              "passcode": "******"
    • user.id:用户ID,可以在我的凭证中获取。
    • passcode:虚拟MFA验证码,在MFA应用程序中获取动态验证码。

    scope

    Json Object

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

    • 示例1:取值为project时,表示获取的Token可以作用于项目级服务,仅能访问指定project下的资源,如ECS服务。project支持id和name,二选一即可。
      "scope": {
            "project": {
            "id": "0b95b78b67fa045b38104c12fb..."
            }
          }
    • 示例2:取值为domain时,表示获取的Token可以作用于全局服务,全局服务不区分项目或区域,如OBS服务。domain支持id和name,二选一即可。
      "scope": {
            "domain": {
            "name": " domain A"
            }
          }
  • 请求样例

    获取用户名为“user A”,登录密码为“**********”,所属账号名为“domain A”,作用范围为“domain”的token。

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

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

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

响应

  • Response Header参数说明

    参数

    是否必选

    类型

    描述

    X-Subject-Token

    String

    获取到的token。

  • Token格式说明

    参数

    是否必选

    类型

    描述

    methods

    Json Array

    获取token的方式。

    expires_at

    String

    token到期时间。

    issued_at

    String

    token产生时间。

    mfa_authn_at

    String

    MFA认证的时间。用户开启了虚拟MFA设备的登录保护功能时,显示此字段。

    user

    Json Object

    示例:

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

    domain

    Json Object

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

    示例:

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

    project

    Json Object

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

    示例:

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

    catalog

    Json Array

    endpoints相关信息。

    示例:

    "catalog": [{
        "type": "identity",
        "id": "1331e5cff2a74d76b03da1225910e...",
        "name": "iam",
        "endpoints": [{
            "url": "https://sample.domain.com/v3",
            "region": "*",
            "region_id": "*",
            "interface": "public",
            "id": "089d4a381d574308a703122d3ae73..."
        }]
    }]
    • 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" 
         } 
       ] 
  • 响应样例
    获取用户名为“user A”,登录密码为“**********”,所属账号名为“domain A”,作用范围为“domain”的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" : "ded485def148s4e7d2se41d5se...",
          "name" : "domain A"
          },
          "id" : "ee4dfb6e5540447cb37419051...",
          "name" : "user A",
          "password_expires_at":"2016-11-06T15:32:17.000000",
        },
        "domain" : {
           "name" : "domain A",
           "id" : "dod4ed5e8d4e8d2e8e8d5d2d..."
        },
        "catalog": [{
            "type": "identity",
            "id": "1331e5cff2a74d76b03da12259...",
            "name": "iam",
            "endpoints": [{
                "url": "https://sample.domain.com/v3",
                "region": "*",
                "region_id": "*",
               "interface": "public",
                 "id": "089d4a381d574308a703122d3a..."
           }]
        }], 
        "roles" : [{
           "name" : "role1",
           "id" : "roleid1"
           }, {
           "name" : "role2",
           "id" : "roleid2"
           }
      ]
      }
    }

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

    Response Header中存储信息为:
    X-Subject-Token:MIIDkgYJKoZIhvcNAQcCoIIDgzCCA38CAQExDTALBglghkgBZQMEAgEwgXXXXX...
    
    Response Body中存储信息为: 
    {
      "token": {
        "expires_at": "2020-09-05T06:50:44.390000Z",
        "mfa_authn_at": "2020-09-04T06:50:44.390000Z",
        "issued_at": "2020-09-04T06:50:44.390000Z",
         "methods": [
          "password",
          "totp"
        ],
        "catalog": [
          {
            "endpoints": [
              {
                "id": "33e1cbdd86d34e89a63cf8ad16a5f...",
                "interface": "public",
                "region": "*",
                "region_id": "*",
                "url": "https://sample.domain.com/v3.0"
              }
            ],
            "id": "100a6a3477f1495286579b819d399...",
            "name": "iam",
            "type": "iam"
          },
          ],
        "domain": {
          "id": "e6505630658e49649784759cdf251...",
          "name": "domain A"
        },
        "roles": [
         {
         "name" : "role1", 
         "id" : "roleid1" 
          },{
         "name" : "role1", 
         "id" : "roleid1" 
     
    }
        ],
           "user": {
          "domain": {
            "id": "e6505630658e49649784759cdf251...",
            "name": "domain A"
          },
          "id": "092ac6365a0025b11f76c01e90100...",
          "name": "user A",
          "password_expires_at": ""
        }
      }
    }

状态码

状态码

说明

201

请求成功。

400

请求错误。

401

认证失败。

403

鉴权失败。

404

找不到资源。

500

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

503

服务不可用。