我正在使用WSO2 APIM(2.5.0)和IS(5.6.0)。它们都集成并且运行良好。
现在,如果我使用API管理中的第三方API并使用oauth令牌,则可以访问它。但是问题是如何处理具有自己身份验证的任何外部或第三方API。
基本上,使用WSO2 APIM令牌,我可以访问要使用的内置API,但由于内置API具有自己的身份验证(基本或oauth),我们将无法获得任何响应。
如何在APIM中实现这一目标。
任何帮助或指导都会有所帮助。
编辑: 这是我正在使用的序列(感谢Bee的指导)
<sequence xmlns="http://ws.apache.org/ns/synapse" name="backend-token-sequence">
<property name="inputmessage" expression="get-property('registry', 'gov:/Login/msg/inputmessage.json')" scope="default" type="STRING"/>
<script language="js">
var payload = mc.getProperty("inputmessage");
mc.setPayloadJSON(payload)
</script>
<header name="Content-Type" scope="transport" value="application/json"/>
<property name="messageType" value="application/json" scope="axis2" type="STRING" description="messageType"/>
<property name="temp" expression="$axis2:REST_URL_POSTFIX"/>
<property name="REST_URL_POSTFIX" action="remove" scope="axis2"/>
<property name="DISABLE_CHUNKING" value="true" scope="axis2" type="STRING"/>
<call blocking="true">
<endpoint>
<http uri-template="https://xx.com/auth/login" method="POST" />
</endpoint>
</call>
<property name="x-access-token" scope="transport" expression="json-eval($.token)"/>
<property name="REST_URL_POSTFIX" scope="axis2" expression="$ctx:temp"/>
</sequence>
这是用于API之一的流入顺序。 我正在使用APIM URL和GET方法调用API,并传递APIM承载令牌
谢谢
答案 0 :(得分:1)
开箱即用的WSO2 APIM支持basic auth和digest auth作为后端安全模式。
除此之外,您可以使用custom sequences将任何类型的安全令牌传递给后端。
对于使用OAuth的后端,您有2个选项。
(1)也在API请求中发送后端令牌(入站到APIM),然后将其转发到后端。
(2)使用自定义序列来调用外部令牌API,并为后端获取一个新令牌,然后将其转发到后端。
<property name="temp" expression="$axis2:REST_URL_POSTFIX"/>
<property name="REST_URL_POSTFIX" action="remove" scope="axis2"/>
<call blocking="true">
<endpoint>
<http uri-template="https://external_idp.com/token" method="GET" />
</endpoint>
</call>
<property name="BackendAuthHeader" scope="transport" expression="json-eval($.tokenresponse.token)"/>
<property name="REST_URL_POSTFIX" scope="axis2" expression="$ctx:temp"/>
由于简单,我建议(1)。
编辑:有关选项(1)的更多信息:
如果您的后端需要一个标头,而不是“授权”标头,则只需将标头与您的请求一起发送,该标头就会发送到后端。
但是,如果您的后端也希望使用“ Authorization”标头,则将导致冲突,因为您不能使用同一标头来传递2个令牌(1个代表GW,1个代表后端)。要解决该问题,您可以使用custom authorization header for gateway功能。