WSO2 API Manager 使用授权持有者令牌调用现有 API 的问题
Posted
技术标签:
【中文标题】WSO2 API Manager 使用授权持有者令牌调用现有 API 的问题【英文标题】:Issue with WSO2 API Manager calling existing API with authorization bearer token 【发布时间】:2016-06-17 20:07:00 【问题描述】:我们正在尝试使用 API Manager (1.10) 调用已使用授权标头令牌的现有 API (POST)。我做了几件事,包括根据一篇题为“Pass a Custom Authorization Token to the Backend”的文章使用调解,但这似乎不起作用。
我终于尝试将“Auth Type”设置为“None”,根据文档,这应该只是将 API 调用直接传递给后端(包括授权标头)。这也不起作用。该调用到达后端服务,但似乎丢失了 Authorization 标头,因此它引发 400 错误(当我省略标头并直接使用 SoapUI 调用后端 api 时,我得到相同的错误)。
任何帮助将不胜感激!
【问题讨论】:
您能分享您的 API 配置,并尝试使用 TCPMON 捕获消息吗? 不确定如何共享 API 配置。它是rest,2个formdata参数,后端使用的header授权,authtype为None。以下是 TCPMON 的结果: 6d "error":"server_error","error_description":"处理您的请求时出错。请重试。" 0 BTW - 这个错误来自后端服务,所以看起来请求正在到达它但缺少授权标头。 您在关注Pass a Custom Authorization Token to the Backend 文档时遇到了什么问题? 显然是用户错误 :-) 以前我在 Soap UI 中将自定义字段作为表单数据发送,而不是在我在 API 管理器中定义的标题中发送。一旦我把它放在标题中,它就起作用了。所以我有办法让它工作。但是,我仍然希望它在我可以将 API 调用传递给使用授权标头的后端服务的情况下工作。 【参考方案1】:如果您想在 API 网关上进行授权(oauth 令牌验证)以及将自定义授权标头传递到后端,则需要遵循文档中描述的设置 [1]。
如果您想通过将授权类型 [2] 设置为“无”来禁用 API 网关级别的授权,并希望通过 API 网关将授权标头(自定义)从客户端传递到后端,您需要执行以下步骤。
默认情况下,API 网关将丢弃“Authorization”标头而不将其发送到后端[3]。要通过 API 网关将 Authorization 标头发送到后端,请取消注释以下属性并将其值设置为“false”在 <wso2am-home>/repository/conf/api-manager.xml
和
<RemoveOAuthHeadersFromOutMessage>false</RemoveOAuthHeadersFromOutMessage>
[1]https://docs.wso2.com/display/AM1100/Pass+a+Custom+Authorization+Token+to+the+Backend [2]https://docs.wso2.com/display/AM1100/Key+Concepts#KeyConcepts-HTTPmethods [3]https://docs.wso2.com/display/AM1100/FAQ#FAQ-HowcanIremovetheauthenticationheadersfromthemessagegoingoutoftheAPIGatewaytothebackend
【讨论】:
【参考方案2】:如果您按照说明here 操作,它应该可以工作。
我已经为几个项目实施了这个,我可以证明它确实有效。
您可以通过配置 log4j.properties 来打开连线日志,检查连线日志,看看会发生什么。
【讨论】:
以上是关于WSO2 API Manager 使用授权持有者令牌调用现有 API 的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 WSO2 Identity Server 和 WSO2 API Manager 保护后端
WSO2 API Manager 拒绝设置不安全的标头“Cookie”
WSO2 Identity Server 和 WSO2 API Manager 集成 - java.rmi.server.ExportException:端口已在使用:9999;
WSO2 Identity Server 和 WSO2 API Manager 集成 - 错误:传输错误 202:绑定失败:地址已在使用中