WSO2 Sequence: захват заголовков входящего запроса - PullRequest
0 голосов
/ 09 января 2020

Я пишу последовательность передачи для APIM v 2.6. Суть в том, чтобы извлечь Authorization заголовки для дальнейшей обработки. Основываясь на этой документации , я подумал о следующем:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="ExtractAuthorization2EndPoint" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <property expression="get-property('axis2', 'TRANSPORT_HEADERS')" name="basic_auth" scope="axis2"/>
    <log level="full">
        <property expression="get-property('basic_auth')" name="captured_headers"/>
    </log>
</sequence>

Проблема

Читая логи, я получаю captured_headers = null

TID: [-1234] [] [2020-01-09 13:46:44,178]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  To: /somewhere, MessageID: urn:uuid:e9fc50db-5a7b-41d1-9613-80b215633bcd, Direction: request, captured_headers = null, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body/></soapenv:Envelope> {org.apache.synapse.mediators.builtin.LogMediator}

Как мне перехватить заголовки (точнее, Authorization) входящего запроса?

Различные другие попытки

  • get-property('transport','Authorization')
  • $trp:Authorization

1 Ответ

2 голосов
/ 10 января 2020

Заголовок авторизации используется в API Manager только для внутренней авторизации, и этот заголовок обычно удаляется из исходящего запроса (из gw APIM в бэкэнд) перед его отправкой в ​​бэкэнд. Это происходит на уровне APIAuthenticationHandler. И пользовательский в последовательности, которую вы подключили к API, будет выполнен после APIAuthenticationHandler. Вы можете обратиться к диаграмме потока сообщений в [1] для лучшего понимания.

Теперь давайте посмотрим, как этот APIAuthenticationHandler применяется по умолчанию в файле синапса API. (Вы можете найти это в папке / repository / deployments / server / synapse-configs / api)

<handler class="org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler">
      <property name="RemoveOAuthHeadersFromOutMessage" value="true"/>
      <property name="APILevelPolicy" value=""/>
      <property name="APISecurity" value="oauth2"/>
</handler>

Вы можете изменить описанный выше обработчик, как показано ниже, и принудительно оставить заголовок Oauth в исходящем сообщении.

<property name="RemoveOAuthHeadersFromOutMessage" value="false"/>

После изменения синапса API вы можете увидеть в консоли журнал, как показано ниже.

INFO - APIDeployer API: admin--PizzaShackAPI:v1.0.0 has been updated from the file: /wso2am-2.6.0/repository/deployment/server/synapse-configs/default/api/admin--PizzaShackAPI_v1.0.0.xml

Теперь попробуйте вызвать API. Вы должны быть в состоянии зарегистрировать заголовок авторизации.

[1]. https://docs.wso2.com/display/AM210/Message+Flow+in+the+API+Manager+Gateway

...