Oracle SOA BPEL 12c实现Basic HTTP认证凭据透传配置咨询
在SOA Composite(BPEL)中实现Basic HTTP认证凭据透传的详细步骤
我来帮你详细梳理在SOA Composite(BPEL)中实现Basic HTTP认证凭据透传的完整步骤——这个配置和OSB里用服务账号透传的逻辑确实不一样,得从几个关键环节一步步来:
1. 先确保Composite端点能接收Basic认证凭据
首先得让你的Composite对外暴露的端点能正确接收消费者的Basic认证信息:
- 打开JDeveloper,找到你的Composite项目,右键点击对外的服务绑定(比如你的
OrderProcessingService),选择Configure WS Policies - 在策略配置界面,添加
oracle/wss_http_token_service_policy策略——这个策略专门用于接收HTTP Basic认证的用户名和密码 - 保存配置,部署后消费者必须通过Basic认证才能访问这个Composite端点
2. 在BPEL流程中提取并存储认证凭据
接下来要在BPEL流程里把消费者传入的凭据抓出来,这里得用到BPEL的内置变量和XPath函数:
- 打开BPEL流程设计器,在起始的
receive活动后面,加一个Assign活动 - 在Assign活动里,创建两个字符串类型的变量,比如
var_incomingUsername和var_incomingPassword - 用XPath表达式从HTTP请求头里提取并解码凭据:
消费者传入的Authorization头格式是Basic <Base64编码的username:password>,所以我们要先截取编码部分,解码后拆分出用户名和密码。示例Assign操作的代码如下:<copy> <from expression="substring-before(oraext:base64-decode(substring-after(oraext:get-request-header('Authorization'), 'Basic ')), ':')"/> <to variable="var_incomingUsername"/> </copy> <copy> <from expression="substring-after(oraext:base64-decode(substring-after(oraext:get-request-header('Authorization'), 'Basic ')), ':')"/> <to variable="var_incomingPassword"/> </copy> - 保存Assign活动,确保变量能正确拿到凭据
3. 配置引用端点的客户端认证策略(动态透传凭据)
现在要把拿到的凭据传给引用的Web服务,得给引用端点配置客户端策略并绑定动态凭据:
- 找到Composite里的引用端点(比如你要调用的
InventoryService),右键点击选择Configure WS Policies - 添加
oracle/wss_http_token_client_policy策略——这个策略用于给目标服务发送Basic认证凭据 - 点击策略旁边的Configure按钮,进入配置界面:
- 不要选预定义的Credential Store Key(那是静态凭据),而是选择Use Credential from Message
- 然后设置Username XPath为
$var_incomingUsername,Password XPath为$var_incomingPassword,直接指向我们在BPEL里存好的变量 - 保存策略配置
4. 配置Composite和BPEL的权限,允许访问HTTP头
为了让BPEL能读取HTTP请求头里的Authorization信息,得加两个关键配置:
- 打开Composite的
composite.xml,切换到Source视图,在<composite>标签内添加:<import namespace="http://xmlns.oracle.com/bpel/extension" location="http://xmlns.oracle.com/bpel/extension"/> <property name="oracle.composite.http.auth.allow" type="xs:string" many="false">true</property> - 再打开BPEL流程的
bpel.xml文件,添加:
这两个配置是让SOA Suite允许BPEL流程访问HTTP请求头的关键<property name="bpel.config.allowHttpHeaders" type="xs:string" many="false">true</property>
5. 测试与验证
部署Composite后,用Postman或SOAP UI做测试:
- 发送带有Basic认证的请求到Composite端点
- 开启SOA Suite的
oracle.soa.bpel日志(设为FINE级别),查看BPEL流程是否正确提取了用户名和密码 - 检查目标Web服务的访问日志,确认收到的凭据和消费者传入的完全一致
常见问题排查
- 要是拿不到Authorization头:检查Composite端点的策略是否正确添加,以及上面的两个权限属性是否配置到位
- 要是目标服务收到的凭据不对:检查XPath表达式是否正确拆分了用户名和密码,或者引用端点的策略里XPath是否指向了正确的变量
- 要是出现权限错误:确认SOA Suite的权限配置里,BPEL流程有访问HTTP头的权限
内容的提问来源于stack exchange,提问作者Rajesh
相关产品推荐
相关产品推荐

