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

如何在WSO2 API Manager序列中获取IdP终端用户ID并设置Authorization头

方案可行性确认

你描述的需求完全可以通过WSO2 API Manager的自定义请求调解序列实现,无需额外拓展组件。

具体实现步骤

1. 前置配置

首先完成基础对接配置:

  • 将Keycloak配置为WSO2 API Manager的信任第三方IdP,确保API Manager可以正常解析、校验Keycloak签发的JWT令牌
  • 确认需要提取的终端用户ID来源:默认配置下解析后的用户ID会存储在API网关上下文属性api.ut.userId中,如果你需要从Keycloak JWT的自定义Claim(比如sub字段)提取,需要提前在API Manager的JWT Claim映射配置中放开对应字段的提取权限。

2. 编写自定义请求调解序列

你可以直接在API Manager的管理控制台新建自定义调解序列,参考示例代码如下:

<!-- 提取终端用户ID,这里以从网关上下文提取为例 -->
<property name="endUserId" expression="$ctx:api.ut.userId" scope="default" type="STRING"/>

<!-- 此处添加你需要的用户ID自定义修改逻辑,示例为给用户ID添加legacy_前缀 -->
<property name="processedUserId" expression="fn:concat('legacy_', $ctx:endUserId)" scope="default" type="STRING"/>

<!-- 适配后端Basic Auth要求,拼接用户名密码后做Base64编码 -->
<!-- 如果你后端的用户密码为固定值或可以通过其他逻辑获取,直接替换示例中的default_pass即可 -->
<property name="authRawContent" expression="fn:concat($ctx:processedUserId, ':default_pass')" scope="default" type="STRING"/>
<property name="authEncodedContent" expression="base64Encode($ctx:authRawContent)" scope="default" type="STRING"/>

<!-- 覆盖请求的Authorization传输头,原有客户端传入的JWT头会被替换 -->
<property name="Authorization" expression="fn:concat('Basic ', $ctx:authEncodedContent)" scope="transport" type="STRING"/>

如果你的后端不需要标准Basic Auth格式,直接将处理后的用户ID设置到Authorization头即可,替换最后一段配置即可。

3. 序列挂载

在发布对应遗留服务API时,将「请求调解序列」选择为你刚才创建的自定义序列,同时将API的认证方式设置为OAuth2即可。

配置完成后就可以实现你期望的完整调用流程,API Manager会自动校验JWT有效性、提取处理用户ID、替换授权头后转发到后端遗留服务。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:06:04