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

WSO2中API请求Header配置及应用用户名获取咨询

问题场景

我已经在WSO2 Studio Integrator中创建了如下API:

curl --location --request POST 'http://localhost:8290/internal/send-messages' 
--header 'accept: text/plain' 
--header 'Content-Type: application/json' 
--data-raw '{
"bankName": "heere",
"uniqueIdentifier": "445334564"
}'

现在需要将该API接收的请求转发至端点,同时要在转发的请求Header中添加两个参数:

  • MasterName: TOMSON(固定静态值,不随用户变化)
  • clientName: TOM(需根据API Manager(已启用OAuth2认证)提供的应用用户名动态变化)

现咨询:

  1. 如何在请求转发至端点时为API添加静态Header(如MasterName)?
  2. 如何获取应用的用户名?

解决方案

1. 添加静态请求Header(MasterName)

直接在WSO2 Studio Integrator的API流中使用Header Mediator即可实现:

  • 打开你的API项目,进入对应的Sequence(通常是inSequence)
  • 拖拽Header mediator到流中,配置参数:
    • Header Name:填入MasterName
    • Header Value:填入固定值TOMSON
    • Action:选择SET(如果存在同名Header则覆盖,无则新增)

也可以手动在Sequence的XML中添加代码:

<header name="MasterName" scope="transport" value="TOMSON"/>

注:scope="transport"表示操作传输层Header,确保转发到端点时该Header能被正常携带。

2. 获取OAuth2认证的应用用户名并设置clientName Header

API Manager启用OAuth2认证后,认证通过的应用用户信息会被传入Integrator的消息上下文,按以下步骤操作:

步骤1:提取应用用户名

使用Property Mediator从消息上下文提取用户名,OAuth2认证后,用户名通常存储在oauth2-username或api.ut.userName属性中(根据API Manager版本和配置调整),示例代码:

<property name="clientUserName" expression="$ctx:oauth2-username" scope="default"/>

如果是基于应用的认证,也可以尝试提取应用名称:

<property name="clientUserName" expression="$ctx:api.ut.application.name" scope="default"/>

步骤2:设置动态clientName Header

用Header Mediator将提取到的用户名设置为clientName Header:

<header name="clientName" scope="transport" expression="$ctx:clientUserName"/>

完整inSequence示例片段

<sequence name="inSequence" xmlns="http://ws.apache.org/ns/synapse">
    <!-- 添加静态Header -->
    <header name="MasterName" scope="transport" value="TOMSON"/>
    <!-- 提取应用用户名 -->
    <property name="clientUserName" expression="$ctx:oauth2-username" scope="default"/>
    <!-- 设置动态clientName Header -->
    <header name="clientName" scope="transport" expression="$ctx:clientUserName"/>
    <!-- 转发请求到目标端点 -->
    <send>
        <endpoint key="your_target_endpoint"/>
    </send>
</sequence>

提示:如果不确定具体属性名,可以添加Log Mediator打印所有上下文属性,定位包含用户名的字段:

<log level="full"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:25:21