Как внешняя аутентификация обрабатывается в WSO2 APIM для внешних / сторонних API - PullRequest
1 голос
/ 02 мая 2019

Я использую WSO2 APIM (2.5.0) и IS (5.6.0).Они оба интегрированы и работают хорошо.

Теперь, если я подключу сторонний API в API Management и использую токен oauth, я смогу получить к нему доступ.Но вопрос заключается в том, как обрабатывать любые внешние или сторонние API, которые имеют свою собственную аутентификацию.

В общем, SO, используя маркер WSO2 APIM, я могу получить доступ к встроенному API для использования, но мы не сможем получитьлюбой ответ, поскольку встроенный API имеет свою собственную аутентификацию (базовую или oauth).

Как этого добиться в APIM.

Любая помощь или руководство будут полезны.

РЕДАКТИРОВАТЬ: Вот последовательность, которую я использую (спасибо Би за руководство)

<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.Я вызываю API, используя APIM URL с методом GET, передавая маркер-носитель APIM

Спасибо

1 Ответ

1 голос
/ 02 мая 2019

WSO2 APIM "из коробки" поддерживает базовую аутентификацию и дайджест-аутентификацию в качестве внутренних схем безопасности.

В дополнение к этому, используя пользовательские последовательности , вы можете передать любой токен безопасности бэкэнду.

Для бэкэндов с 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) :

Если ваш бэкэнд ожидает заголовок, отличный от заголовка «Авторизация», вы можете просто отправитьэтот заголовок вместе с вашими запросами, и он будет отправлен бэкенду.

Однако, если ваш бэкэнд также ожидает заголовок «Авторизация», он становится конфликтом, так как вы не можете использовать тот же заголовок для прохождения 2токены (1 для GW и 1 для бэкенда).Чтобы решить эту проблему, вы можете использовать пользовательский заголовок авторизации для шлюза .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...