跳转到内容

令牌交换

在主体令牌(或被交换令牌)有效期内,可以对令牌进行交换成其他受众的令牌,类似实现用户代理,比如用户在销售系统登录后获取的用户令牌作为主体令牌,销售系统通过客户端模式获取的系统令牌作为行动者令牌(或代理者令牌),然后销售系统就可以使用令牌交换,获取请求OA系统的用户令牌,实现应用系统A代理用户访问OA系统,这种调用主体是用户,只不过是销售系统代理的。

请求方式: POST(HTTPS) Content-Type: application/x-www-form-urlencoded

请求地址: /oauth2/token

详细说明开发者可以参考The OAuth 2.1 Authorization Framework

参数必须说明
client_id企业服务平台分配的client_id
client_secret企业服务平台分配的client_secret
grant_type当前值为refresh_token
scope授权范围
subject_token主体令牌(或被交换令牌),用来申请新令牌的原始令牌,必填
subject_token_type主体令牌类型指明 subject_token 的类型,必填,默认是 JWT
actor_token行动者令牌(或代理者令牌),表示当前代表主体执行操作的客户端或服务
actor_token_type行动者令牌类型,指明 actor_token 的类型,actor_token填写时,actor_token 必填,默认是 JWT
requested_token_type请求的令牌类型,指定希望获得的新令牌类型,默认是 JWT
resource资源指示符,指定新令牌要访问的资源服务器,通常是资源服务器 URI
audience受众,指定新令牌的目标受众,通常对应 JWT 的 aud 声明
参数说明
access_token访问令牌,调用开放接口的凭证
scope授权范围
issued_token_type签收的token格式
token_typetoken类型
expires_inaccess_token有效期,单位为秒
error_description错误描述
error_code错误码
error_uri错误详细说明地址

a) 成功返回示例如下:

{
"access_token": "eyJraWQiOiJjM2Q2ZDAxYiIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJ4eTA3NjE5IiwiYXVkIjoib2EiLCJuYmYiOjE3ODc5MDAxOTMsImFjdCI6eyJpc3MiOiJodHRwczovL3Rlc3QtZXNwLnhrdy5jbiIsInN1YiI6InNhbGVzIn0sInNjb3BlIjpbIm9wZW5pZCJdLCJpc3MiOiJodHRwczovL3Rlc3QtZXNwLnhrdy5jbiIsImV4cCI6MTc4NzkwNzM5MywiaWF0IjoxNzg3OTAwMTkzLCJqdGkiOiI5NGI2ZjI2ZTg3MTM0MTU4OGNiNDQyZGYyMjY4YjU0MCJ9.GEUi428zgAKnLgd738au2OVHURBaKVg-Qx742Qg4OJ9Gv5cpTuyxH2ZzBMi1y6nIpqq52CepE2Jjhc6GrkKQzyXr95EKXy2t6v7dZx-n0knqqWB7WRp4OlvG0hGVaBNOn-8i4eFoltFzA141OWRBh_mdUmFa0QE8dXK85Se-_7hWrS0yOKuV_SqPg3jKUwFLNJXkIoF3Kt6UmO81h1_lZxTEbr_XnPkwVi1ol4tHgdAmRvlhE3gqHt0xQynv-9bow07Yz5sphgimSJT-ETG2v3GPPGeAwdpE_M8ZWzLg4AdU7DBp3dxfWTtGK_qOt29D5KhrAzkNxplea7DzwJfqRA",
"issued_token_type": "urn:ietf:params:oauth:token-type:jwt",
"scope": "openid",
"token_type": "Bearer",
"expires_in": 7199
}

b)失败返回示例如下:

{
"error_description": "client_id不正确",
"error_code": "100006",
"error_uri": "https://esp.xkw.cn/doc/error?q=error_code"
}

image-20260828150106672

令牌Payload中有act值,可以看出行动者令牌(或代理者令牌)是销售系统sales,令牌主体是用户xy07619,受众是OA系统。

接口返回access_token有效期为expires_in,单位是秒,调用方要做好token的缓存处理,例如:

缓存时间 = expires_in - 60 * 10

缓存时间只要将平台返回的expires_in减去10分钟即可。

注意:不要频繁请求获取access_token,以免被限流控制;