更新时间:2024-07-25 GMT+08:00

获取委托Token

功能介绍

该接口用来获取委托Token,例如:A账号与B账号创建了委托关系,A账号为委托方,B账号为被委托方,则B账号可以通过该接口获取委托Token。B账号仅能使用该Token管理A账号的委托资源,不能管理自己账号中的资源,如果B账号需要管理自己账号中的资源,需要通过获取用户Token获取自己的Token。

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

URI

POST /v3/auth/tokens

请求

  • Request Header参数说明

    参数

    是否必选

    类型

    说明

    Content-Type

    String

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

    X-Auth-Token

    String

    被委托方用户B具有Agent Operator权限的token。

  • Request Body参数说明

    参数

    是否为必选

    类型

    说明

    identity

    Json Object

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

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

    methods

    String Array

    token的获取方式,该字段内容为“assume_role”

    domain_name或domain_id

    String

    委托方用户A的账号名称或者ID,domain_name和domain_id二选一。

    xrole_name

    String

    委托方用户A创建的委托的名称。

    scope

    Json Object

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

    • 示例1:取值为project时,表示获取的token仅能访问指定project下的资源,project支持id和name,二选一即可。
      "scope": {
            "project": {
            "id": "0b95b78b67fa045b38104c12fb..."
            }
          }
    • 示例2:取值为domain时,表示获取的Token可以访问委托方账号中授权的所有资源,domain支持id和name,二选一即可。
      "scope": {
            "domain": {
            "id": "6b8eb224c76842e3ac2..."
            }
          }
  • 请求样例
    获取委托方账号名为“domain A”,委托名称为“agencytest”的委托token。
    {
        "auth":{
            "identity":{
                "methods":[
                    "assume_role"
                ],
                "assume_role":{
                    "domain_name":"domain A",
                    "xrole_name":"agencytest"
                    }
            },
            "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产生时间。

    user

    Json Object

    委托方用户的详细信息,示例:

    "user": { 
          "name": "user A", 
          "id": "userid", 
          "password_expires_at":"2016-11-06T15:32:17.000000",
          "domain": { 
             "name": "domain A",
             "id": "domainid"
           } 
        }
    • 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" : "domainid"
    }
    • domain.name委托方用户的所属账户的名称。
    • domain.id委托方用户的所属账户的ID。

    project

    Json Object

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

    示例:

    "project": { 
          "name": "projectname", 
          "id": "projectid"
    }
    • project.name:project名称。
    • project.id:project的ID。

    catalog

    Json Array

    endpoints相关信息。

    示例:

    "catalog": [{
        "type": "identity",
        "id": "1331e5cff2a74d76b03da1225910e31d",
        "name": "iam",
        "endpoints": [{
            "url": "https://sample.domain.com/v3",
            "region": "*",
            "region_id": "*",
            "interface": "public",
            "id": "089d4a381d574308a703122d3ae738e9"
        }]
    }]

    roles

    Json Object

    Token的权限信息。

    示例:

    "roles" : [{ 
         "name" : "role1", 
         "id" : "roleid1" 
         }, { 
         "name" : "role2", 
         "id" : "roleid2" 
         } 
       ] 

    assumed_by

    Json Object

    被委托方用户的详细信息。

    示例:

    "assumed_by": {
          "user": {
            "domain": {
              "name": "domain B",
              "id": "bfdd55e02a014894b5a2693f31..."
            },
            "name": "user B",
            "id": "ff5ea657f1dd45c4b8f398cab..."
          }
        }
    • domain.name:被委托方用户的所属账户的名称。
    • user.name:被委托方用户的用户名称。
  • 响应样例
    Response Header中存储信息为:
    X-Subject-Token:MIIDkgYJKoZIhvcNAQcCoIIDgzCCA38CAQExDTALBglghkgBZQMEAgEwgXXXXX...
    
    X-Frame-Options: SAMEORIGIN
    
    Response Body中存储信息为:
    {
      "token": {
        "methods": [
          "assume_role"
        ],
        "issued_at": "2017-05-18T11:44:05.232000Z",
        "expires_at": "2017-05-19T11:44:05.232000Z",
        "user": {
          "id": "93e12ecdad6f4abd84968741da...",
          "name": "user A/agencytest",
          "password_expires_at":"2016-11-06T15:32:17.000000",
          "domain": {
            "id": "ce925c42c25943bebba10ea64a...",
            "name": "domain A"
          }
        },
        "domain": {
          "id": "ce925c42c25943bebba10ea64a...",
          "name": "domain A"
        },
        "roles": [
          {
            "id": "c11c61319f08404eaf94f8030b9...",
            "name": "role1"
          },
          {
            "id": "d52dde35ijg62fex2ijhdc785sc3...",
            "name": "role2"
          },
          {
            "id": "d862dwd32dwhu854rdcs447ed1d7..."
            "name": "op_gated_tasssg6"
          }
        ],
        "assumed_by": {
          "user": {
            "domain": {
              "name": "domain B",
              "id": "c1a78a82d81c4a19b03bfe82d3ad..."
            },
            "id": "cdeb158dda854cc3bab77d8926ff...",
            "name": "User B"
          }
        }
      }
    }

状态码

状态码

说明

201

请求成功。

400

请求错误。

401

认证失败。

403

鉴权失败。

404

找不到资源。

500

内部服务错误。

503

服务不可用。