文档首页> 统一身份认证服务 IAM> API参考> API> 联邦身份认证管理> Token> 获取联邦认证token(OpenID Connect ID token方式)
更新时间:2023-07-18 GMT+08:00

获取联邦认证token(OpenID Connect ID token方式)

功能介绍

该接口可以用于通过OpenID Connect ID token方式获取联邦认证token。

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

URI

POST /v3.0/OS-AUTH/id-token/tokens

请求参数

表1 请求Header参数

参数

是否必选

参数类型

描述

X-Idp-Id

String

身份提供商ID。

表2 请求Body参数

参数

是否必选

参数类型

描述

auth

object

请求auth参数详情。

表3 GetIdTokenAuthParams

参数

是否必选

参数类型

描述

id_token

object

请求id token参数详情。

scope

object

请求scope参数详情,限制获取token的权限范围。不传此字段,获取unscoped toke。

表4 GetIdTokenIdTokenBody

参数

是否必选

参数类型

描述

id

String

id_token的值。id_token由企业IdP构建,携带联邦用户身份信息。请参考企业IdP文档了解获取id_token的方法。

表5 GetIdTokenIdScopeBody

参数

是否必选

参数类型

描述

domain

object

domain scope详情,与project二选一。

project

object

project scope详情,与domain二选一。

表6 GetIdTokenScopeDomainOrProjectBody

参数

是否必选

参数类型

描述

id

String

domain id 或者 project id,与name字段至少存在一个。

name

String

domain name 或者 project name,与id字段至少存在一个。

响应参数

状态码为 201 时:

表7 响应Header参数

参数

参数类型

描述

X-Subject-Token

String

签名后的Token。

表8 响应Body参数

参数

参数类型

描述

token

object

获取的token详情。

表9 ScopedTokenInfo

参数

参数类型

描述

expires_at

String

过期时间。

说明:

UTC时间,格式为 YYYY-MM-DDTHH:mm:ss.ssssssZ,日期和时间戳格式参照 ISO-8601,如:2023-06-28T08:56:33.710000Z。

methods

Array of strings

获取token的方式,联邦用户默认为mapped。

issued_at

String

生成时间。

说明:

UTC时间,格式为 YYYY-MM-DDTHH:mm:ss.ssssssZ,日期和时间戳格式参照 ISO-8601,如:2023-06-28T08:56:33.710000Z。

user

object

用户详情。

domain

object

租户详情。

project

object

项目详情。

roles

Array of objects

角色/策略详情。

catalog

Array of objects

catalog详情。

表10 FederationUserBody

参数

参数类型

描述

OS-FEDERATION

object

联邦用户user详情。

domain

object

租户详情。

id

String

用户id。

name

String

用户名。

表11 OSFederationInfo

参数

参数类型

描述

identity_provider

object

身份提供商详情。

protocol

object

协议详情。

groups

Array of objects

用户组详情。

表12 IdpIdInfo

参数

参数类型

描述

id

String

身份提供商id。

表13 ProtocolIdInfo

参数

参数类型

描述

id

String

协议id。

表14 token.user.OS-FEDERATION.groups

参数

参数类型

描述

id

String

用户组id。

name

String

用户组名。

表15 token.user.domain

参数

参数类型

描述

id

String

租户id。

name

String

租户名。

表16 DomainInfo

参数

参数类型

描述

id

String

租户id。

name

String

租户名。

表17 ProjectInfo

参数

参数类型

描述

domain

object

租户详情。

id

String

项目id。

name

String

项目名。

表18 token.project.domain

参数

参数类型

描述

id

String

租户id。

name

String

租户名。

表19 roles

参数

参数类型

描述

id

String

权限id。

name

String

权限名。

表20 CatalogInfo

参数

参数类型

描述

id

String

终端节点ID。

interface

String

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

region

String

终端节点所属区域。

region_id

String

终端节点所属区域ID。

url

String

终端节点的URL。

请求示例

  • 获取联邦认证project scoped token
    POST /v3.0/OS-AUTH/id-token/tokens
      
     { 
       "auth" : { 
         "id_token" : { 
           "id" : "eyJhbGciOiJSU..." 
         }, 
         "scope" : { 
           "project" : { 
             "id" : "46419baef4324...", 
             "name" : "ap-southeast-1" 
           } 
         } 
       } 
     }
  • 获取联邦认证domain scoped token
    POST /v3.0/OS-AUTH/id-token/tokens
     
      
     { 
       "auth" : { 
         "id_token" : { 
           "id" : "eyJhbGciOiJSU..." 
         }, 
         "scope" : { 
           "domain" : { 
             "id" : "063bb260a480...", 
             "name" : "IAMDomain" 
           } 
         } 
       } 
     }
  • 获取unscoped token
    POST /v3.0/OS-AUTH/id-token/tokens
     
      
     { 
       "auth" : { 
         "id_token" : { 
           "id" : "eyJhbGciOiJSU..." 
         } 
       } 
     }

响应示例

状态码为 201 时:

创建成功。

{ 
  "token" : { 
    "expires_at" : "2018-03-13T03:00:01.168000Z", 
    "methods" : [ "mapped" ], 
    "issued_at" : "2018-03-12T03:00:01.168000Z", 
    "user" : { 
      "OS-FEDERATION" : { 
        "identity_provider" : { 
          "id" : "idptest" 
        }, 
        "protocol" : { 
          "id" : "oidc" 
        }, 
        "groups" : [ { 
          "name" : "admin", 
          "id" : "45a8c8f..." 
        } ] 
      }, 
      "domain" : { 
        "id" : "063bb260a480...", 
        "name" : "IAMDomain" 
      }, 
      "name" : "FederationUser", 
      "id" : "suvmgvUZc4PaCOEc..." 
    } 
  } 
}

状态码为 400 时:

参数无效。

{ 
  "error_msg" : "Request body is invalid.", 
  "error_code" : "IAM.0011" 
}

状态码为 401 时:

认证失败。

{ 
  "error_msg" : "The request you have made requires authentication.", 
  "error_code" : "IAM.0001" 
}

状态码为 403 时:

没有操作权限。

{ 
  "error_msg" : "Policy doesn't allow %(actions)s to be performed.", 
  "error_code" : "IAM.0003" 
}

状态码为 404 时:

未找到相应的资源。

{ 
  "error_msg" : "Could not find %(target)s: %(target_id)s.", 
  "error_code" : "IAM.0004" 
}

状态码为 500 时:

系统内部异常。

{ 
  "error_msg" : "An unexpected error prevented the server from fulfilling your request.", 
  "error_code" : "IAM.0006" 
}

状态码

状态码

描述

201

创建成功。

400

参数无效。

401

认证失败。

403

没有操作权限。

404

未找到相应的资源。

500

系统内部异常。

错误码

请参见错误码