【问题标题】:Issue with WSO2 API Manager calling existing API with authorization bearer tokenWSO2 API Manager 使用授权持有者令牌调用现有 API 的问题
【发布时间】: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 调用传递给使用授权标头的后端服务的情况下工作。

标签: wso2 authorization wso2-am bearer-token


【解决方案1】:
  1. 如果您想在 API 网关上进行授权(oauth 令牌验证)以及将自定义授权标头传递到后端,则需要遵循文档中描述的设置 [1]。

  2. 如果您想通过将授权类型 [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 来打开连线日志,检查连线日志,看看会发生什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多