使用场景
当需要通过 HTTP 请求与外部 API 集成时,API 接口可能是需要动态 token 来鉴权的。
如何获取并解析出动态 token,并将 token 用于正式的 API 请求中呢?
本文主要基于该场景进行解决方案的介绍
前提假设与背景
- 动态 token 是通过特定的 http 请求去获取的,下文以打通飞书开放平台的 OpenAPI 为例进行示例
备注:为了与飞书有更好的集成体验,在 HTTP 请求连接器中,已经封装了「飞书集成」的鉴权方式,用户仅需要选择需要使用的「飞书集成」即可。
飞书开发平台仅是作为参考案例,供第三方集成时参考,整体的配置流程是类似的。
- 假设现在的集成场景是:希望使用飞书自建应用的身份来调用 API 获取机器人所在的群列表
- 飞书开放平台服务端 API 的调用流程如下图所示:
250px|700px|reset
为了提升 API 调用的安全性,飞书开放平台设计了访问凭证(access_token)机制,调用 API 获取应用资源时,需要通过 access_token 对调用者身份进行鉴权,即告知飞书当前是谁、以什么身份获取什么租户的数据。访问凭证是接入飞书开放平台的钥匙,将应用获得的所有数据访问和接口调用权限绑定在一起,允许应用对资源进行读写操作。
如何获取自建应用的 tenant_access_token ?
如何将获取到的 token 作为真实 API 请求时的鉴权信息传入呢?
让我们来一起看下面的解决方案
解决方案
Step 1. 获取 token 的接口定义
需要了解预期要集成的平台所定义的获取 token 的接口,如:
根据飞书开放平台的获取 tenant_access_token 的接口定义(https://open.feishu.cn/document/server-docs/authentication-management/access-token/tenant_access_token_internal)
Step 2. 使用「HTTP 请求」连接器去获取 token
添加 http 请求连接器
250px|700px|reset
按照「Step 1」中 获取 token 的接口定义 来配置连接器的请求内容,包括 连接的鉴权方式、请求 URL、请求方法、请求头、请求参数及请求体等
250px|700px|reset
250px|700px|reset
按照「Step 1」 中的响应体去配置连接器的输出。
- 编辑输出 schema 的入口
250px|700px|reset
- 可以通过响应体的示例来生成 schema
250px|700px|reset
- 生成当前节点的输出 schema(用户下游消费)
250px|700px|reset
Step 3. 配置真正要请求的 API
使用「Step 2」 中获取到的 token 去配置真正要请求的 API
- 准备工作:将「获取 token」节点输出的 token 取出后,封装为后续 API 需要的格式。
例如:获取机器人所在的群列表 API 需要的鉴权格式为
250px|700px|reset
可以使用公式节点来拼接为「Bearer ${token}」格式
250px|700px|reset
- 接下来就可以配置真正用于请求 API 的连接器了
- 再添加一个「HTTP 请求」连接器,可以将公式处理后的 token 作为 http 请求的请求头
250px|700px|reset
- 然后完善待请求 API 的查询参数、请求体等参数,就配置完成了
250px|700px|reset
- 整体「获取 token 到引用 token 去发 http 请求」的流程如下:
250px|700px|reset
- 实际运行时就会先请求获取 token,再通过一个 HTTP 连接器去引用获取到的 token ,去发起真正的业务请求去获取数据。
进阶使用
- 使用需求:
不希望每次执行流程时都去获取一次 token。
因为一般动态 token 都有一个有效期,有效期内 token 不变
- 解决方案:
可以在获取到 token 后,将 token 记录到对象的某个字段中,然后再次触发流程的时候可以通过分支判断 token 是否已经过期。
如果未过期,就可以跳过获取 token 的节点直接发起 HTTP 请求 API 即可。