Посредничество сообщений WSO2APIM — вызов API заблокирован

Я пытаюсь протестировать политики XACML, определенные в WSO2 IS, через WSO2 API Manager, как описано в следующей ссылке.

https://docs.wso2.com/display/AM210/Enabling+Role-Based+Access+Control+Using+XACML

Политика проверяется, и я вижу решение «Разрешить» в журналах, но диспетчер API не возвращает никакого ответа, вызов блокируется, а время ожидания запроса истекает через некоторое время.

    DEBUG - EntitlementMediator Entitlement Decision is : Permit
    DEBUG - EntitlementMediator User is authorized to perform the action
    DEBUG - EntitlementMediator OnAccept sequence is not defined.
    INFO - SourceHandler Writer null when calling informWriterError
    WARN - SourceHandler Connection time out after request is read: http-incoming-19 Socket Timeout : 60000 Remote Address : /0:0:0:0:0:0:0:1:63398
    WARN - TimeoutHandler Expiring message ID : urn:uuid:045f7259-cc8b-46a7-b9a2-832429163531; dropping message after GLOBAL_TIMEOUT of : 120 seconds for Endpoint 

Вставка файла политики передачи сообщений

            <sequence xmlns="http://ws.apache.org/ns/synapse"  name="EM">     <entitlementService xmlns="http://ws.apache.org/ns/synapse" remoteServiceUrl="https://localhost:9443/services" remoteServiceUserName="admin" remoteServicePassword="admin" callbackClass="org.wso2.sample.handlers.entitlement.APIEntitlementCallbackHandler">
                                            <onReject>
                                                            <makefault version="soap12">
                                                                            <code xmlns:soap12Env="http://www.w3.org/2003/05/soap-envelope"
                                                                                            value="soap12Env:Receiver"/>
                                                                            <reason value="UNAUTHORIZED"/>
                                                                            <node/>
                                                                            <role/>
                                                                            <detail>XACML Authorization Failed</detail>
                                                            </makefault>
                                                            <respond/>
                                            </onReject>
                                            <onAccept>
                                            <log level="trace" xmlns="http://ws.apache.org/ns/synapse"/>
                                                            <send>
                                                                            <endpoint>
                                                                                            <address uri="http://localhost:8080"/>
                                                                            </endpoint>
                                                            </send>
                                            </onAccept>
                                            <obligations/>
                                            <advice/>
                            </entitlementService>
            </sequence>

Если я просто использую ответ в OnAccept вместо отправки, вызов возвращается немедленно, но мой внутренний API не вызывается.

Я что-то упустил здесь?

Спасибо, Альби Моркен.


person Albie Morken    schedule 19.10.2017    source источник
comment
Можете ли вы поделиться своим файлом синапса для этого API?   -  person Abimaran Kugathasan    schedule 20.10.2017
comment
Обновлен файл политики передачи сообщений.   -  person Albie Morken    schedule 20.10.2017
comment
решил обойти WSO2 API Manager, так как он не работал должным образом   -  person Albie Morken    schedule 26.10.2017


Ответы (1)


Это выглядит так

  1. это не проблема с XACML, а скорее с менеджером API
  2. вы не определили счастливый путь, когда PDP отвечает Permit. Это видно из DEBUG - EntitlementMediator OnAccept sequence is not defined.

Попробуйте определить этот путь

person David Brossard    schedule 19.10.2017
comment
Это не сработало! Я добавил последовательность OnAccept, но вызов все равно зависает! ‹onAccept› ‹log level=full xmlns=ws.apache.org/ns/synapse › ‹send› ‹endpoint› ‹address uri=localhost:8080› ‹/endpoint› ‹/send› ‹ответить /› ‹/onAccept› Я просто получаю сообщение об ошибке тайм-аута Идентификатор сообщения с истекающим сроком действия: urn:uuid:448797c5-1c5e-41cf-aa59-1b8d31ee1067; удаление сообщения после GLOBAL_TIMEOUT из: 120 секунд для AnonymousEndpoint, URI Не уверен, что происходит - person Albie Morken; 20.10.2017