You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过WSO2 API-Manager实现Token从API-1到后端API的传递

WSO2 API Manager实现多后端API令牌无缝传递方案

我现在用WSO2 API Manager对接后端API,其中/api/GetToken负责颁发access token,/api/sendSMS以及其他类似API必须携带这个有效令牌才能调用。目标是实现令牌的无缝传递,已经尝试过在请求头添加自定义sequence策略,下面给具体可行的实现步骤:

1. 编写令牌获取+缓存的自定义中介序列

先创建一个中介序列(Mediation Sequence),核心是避免每次调用都去请求/api/GetToken,逻辑如下:

  • 检查缓存里是否有可用令牌
  • 有令牌就直接将其添加到请求头(格式如Authorization: Bearer <token>)
  • 无令牌则调用/api/GetToken获取令牌,存入缓存(过期时间和后端令牌有效期对齐)后再添加到请求头

示例序列代码(WSO2中介语言):

<sequence xmlns="http://ws.apache.org/ns/synapse" name="TokenRetrievalSequence">
    <!-- 读取缓存中的令牌 -->
    <property name="cachedToken" expression="get-property('registry', 'conf:/tokens/currentToken')"/>
    <filter source="$ctx:cachedToken" regex="\S+">
        <then>
            <!-- 缓存存在有效令牌,直接写入请求头 -->
            <header name="Authorization" expression="fn:concat('Bearer ', $ctx:cachedToken)"/>
        </then>
        <else>
            <!-- 调用GetToken接口获取新令牌 -->
            <call>
                <endpoint>
                    <http method="POST" uri-template="https://你的后端域名/api/GetToken">
                        <!-- 配置GetToken所需的请求参数/头 -->
                        <header name="Content-Type" value="application/x-www-form-urlencoded"/>
                        <payloadFactory media-type="form">
                            <format>client_id=你的客户端ID&amp;client_secret=你的客户端密钥&amp;grant_type=client_credentials</format>
                            <args/>
                        </payloadFactory>
                    </http>
                </endpoint>
            </call>
            <!-- 从返回结果提取access_token -->
            <property name="accessToken" expression="json-eval($.access_token)"/>
            <!-- 将令牌存入缓存,设置过期时间(示例为3600秒) -->
            <registry resource="conf:/tokens/currentToken" action="update">
                <parameter name="value" expression="$ctx:accessToken"/>
                <parameter name="expiry" value="3600"/>
            </registry>
            <!-- 将令牌写入请求头 -->
            <header name="Authorization" expression="fn:concat('Bearer ', $ctx:accessToken)"/>
        </else>
    </filter>
</sequence>

2. 将序列绑定到需要令牌的API(如sendSMS)

  • 登录WSO2 API Manager的Publisher控制台
  • 打开/api/sendSMS的API编辑页面
  • 切换到Message Mediation标签页
  • 在In Flow中添加刚才创建的TokenRetrievalSequence作为入站中介序列
  • 保存并发布API

3. 验证令牌传递逻辑

  • 调用通过WSO2发布的sendSMS API
  • 查看后端/api/sendSMS的请求日志,确认Authorization头已携带有效令牌
  • 检查缓存机制:首次调用会触发GetToken请求,后续调用直接使用缓存令牌,无需重复请求

注意事项

  • 确保/api/GetToken的调用参数(client_id、client_secret等)配置正确,且具备足够权限获取令牌
  • 缓存过期时间要与后端返回的expires_in字段匹配,避免使用过期令牌
  • 若需令牌自动刷新,可在序列中添加令牌过期检查逻辑,触发刷新流程

内容的提问来源于stack exchange,提问作者Bas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:31:12