Использование службы REST с базовой аутентификацией от MULE

Я использую HTTP-компонент mule для подключения к REST API, который имеет базовую аутентификацию с USERNAME и PASSWORD. Я использовал вкладку «Настройки HTTP» компонента HTTP, чтобы предоставить данные аутентификации, имя пользователя и пароль. но я думаю, что это не работает. Я делаю что-то не так? есть ли лучший способ вызвать службу REST, которая имеет обычную аутентификацию.


person Naveen Rayappa    schedule 24.12.2014    source источник


Ответы (3)


Вы должны установить значение базовой аутентификации в качестве свойства заголовка для исходящего сообщения Mule, когда вы используете службу REST через конечную точку исходящего трафика Mule HTTP.

<flow name="consume_rest">
    .............
    ..........
    <set-property propertyName="Authorization" value="Basic Authorization String combination of Username and password" />
    <http:outbound-endpoint exchange-pattern="request-response" method="POST" responseTimeout="20000"
        host="localhost" path="rest.path" port="Port number" />
    .............
    .............
</flow>

Надеюсь это поможет.

person user1760178    schedule 24.12.2014

Ниже приведен пример службы REST с базовой аутентификацией:

  <mule-ss:security-manager>
        <mule-ss:delegate-security-provider name="memory-provider" delegate-ref="authenticationManager" />
    </mule-ss:security-manager>
    <spring:beans>
        <ss:authentication-manager alias="authenticationManager">
            <ss:authentication-provider>
                <ss:user-service id="userService">
                    <ss:user name="your username" password="your password" authorities="ROLE_ADMIN" />
                     <ss:user name="your username2" password="your password2" authorities="ROLE_USER" />
                </ss:user-service>
            </ss:authentication-provider>
        </ss:authentication-manager>    
    </spring:beans>

    <flow name="MainService" doc:name="MainService">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" doc:name="HTTP">
           <mule-ss:http-security-filter realm="realm" />
           <mule-ss:authorization-filter requiredAuthorities="ROLE_ADMIN"/>  <!-- Restrict a particular group of users -->
        </http:inbound-endpoint>
        <jersey:resources doc:name="REST">
        <component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl"/>
        </jersey:resources>
    </flow>

А для подключения существующей внешней службы REST из Mule используйте: - http://username:password@host/yourpath в исходящей конечной точке http

person Anirban Sen Chowdhary    schedule 24.12.2014
comment
Спасибо за повтор. - person Naveen Rayappa; 24.12.2014
comment
я сделал то же самое, что вы упомянули во фрагменте, и я использую тот же формат URL-адреса для использования службы от любого клиента, включая HTTP-мул. Однако я хотел бы использовать существующий HTTP-компонент MULE и параметр базовой аутентификации на вкладке «Дополнительно», чтобы в самом компоненте были указаны имя пользователя и пароль, и я буду использовать обычный URL-адрес, который не будет содержать данные аутентификации. - person Naveen Rayappa; 24.12.2014
comment
Это просто... В исходящей конечной точке http на вкладке "Настройки HTTP" вы найдете параметр имени пользователя и пароля... поэтому на вкладке "Дополнительно" вы просто указываете URL-адрес в разделе адреса, а затем на вкладке "Настройки HTTP" ставите имя пользователя и пароль... Итак, наконец, ваш xml будет выглядеть так: - <https:outbound-endpoint address="you url" user="youruser" password="your password" exchange-pattern="request-response" method="" и да, проверьте метод в исходящей конечной точке. Выберите GET или POST в соответствии с вашей службой REST. - person Anirban Sen Chowdhary; 24.12.2014
comment
Mule прекрасно работает с URL-адресом username:password@host/yourpath, который содержит учетные данные для аутентификации . Однако я пытался так же, как вы упомянули выше. Я имею в виду установку имени пользователя и пароля в соединителе Mule, но он выдает следующую ошибку. Зарегистрированная проверка подлинности установлена ​​​​на org.mule.module.spring.security.filters.http.HttpBasicAuthenticationFilter но в сеансе не было контекста безопасности. Аутентификация запрещена на URL-адресе конечной точки Тип полезной нагрузки сообщения: String - person Naveen Rayappa; 24.12.2014
comment
Это странно... Это должно быть что-то вроде: - <http:outbound-endpoint exchange-pattern="request-response" host="localhost" user="your username" password="your password" port="your port" path="yourpath" doc:name="HTTP" method="Your method"/> .. Пожалуйста, проверьте метод... по умолчанию исходящий метод Http - POST.. Проверьте с помощью службы REST.. укажите метод, который ваш веб-служба использует POST/GET/PUT и т. д. лучше обновить свой вопрос с помощью XML-файла Mule. нам будет легко обнаружить проблему... - person Anirban Sen Chowdhary; 24.12.2014
comment
Хорошо .. Попробуйте следующее .. это сработает .. поместите хост , порт и путь вместо адреса следующим образом: - <http:outbound-endpoint exchange-pattern="request-response" host="localhost" user="username" password="password" port="Your Port" path="your path" doc:name="HTTP" method="GET"/> ... Таким образом, вы можете поместить имя пользователя и пароль в конечную точку httpoutbound - person Anirban Sen Chowdhary; 29.12.2014

Исходящий HTTP с базовой аутентификацией

Спасибо всем за ответ!! Имя пользователя и пароль на соединителе нужны, если вы хотите защитить входящую конечную точку с помощью базовой проверки подлинности HTTP.

При вызове внешних служб, защищенных базовой аутентификацией, вы должны использовать метод uri

person Naveen Rayappa    schedule 29.12.2014