веб-сервис, использующий безопасность UserNameToken

Я пытаюсь решить проблему, с которой мы столкнулись, используя Glassfish V2 для публикации простого веб-сервиса с использованием простого UserNameToken из соображений безопасности. Поскольку для архивирования мы использовали Netbeans 6.5, мы изучили это руководство< /а>.

Поэтому были выполнены следующие шаги: В нашей среде разработки мы установили Sun Java(TM) System Access Manager и можем администрировать его через консоль администратора, а также через среду IDE Netbeans. Все хорошо. Пример из учебника работал идеально, поэтому мы подумали, что можем двигаться дальше.

После изменения параметров безопасности для нашего веб-сервиса мы опубликовали его в нашей тестовой среде без установки Netbeans.

После этого были проделаны следующие шаги:

  1. развертывание службы
  2. настроить область в Access Manager для IP-адреса
  3. настроить ожидаемого пользователя для доступа к веб-службе.

Когда наш партнер теперь получает доступ к веб-службе, доступ к фактическому коду веб-службы не осуществляется, и мы всегда обнаруживаем в журнале сервера, что заголовок безопасности не был понят.

Это сообщение, которое мы получаем на сервере:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-10034404">
<wsu:Created>2009-01-19T16:33:38.537Z</wsu:Created>
<wsu:Expires>2009-01-19T16:34:08.537Z</wsu:Expires></wsu:Timestamp><wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-10034094">
<wsse:Username>myUser</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPasswd</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
<wsa:MessageID soapenv:mustUnderstand="0">uuid:ecc3b150-e646-11dd-96e5-9f80a576275b</wsa:MessageID>
<wsa:To soapenv:mustUnderstand="0">http://62.154.241.166:8080/HTNGService/WebServiceForTrustService</wsa:To>
<wsa:Action soapenv:mustUnderstand="0">http://webservice.trustinternational.com/ws/services/Htng2ReservationService</wsa:Action>
<wsa:From xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing" soapenv:mustUnderstand="0">
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address></wsa:From>
</soapenv:Header>
<soapenv:Body>
...
</soapenv:Body></soapenv:Envelope>

наш wsit.xml выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<definitions
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="WebServiceForTrustService" targetNamespace="http://wstrust/" xmlns:tns="http://wstrust/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp1="http://www.w3.org/ns/ws-policy" xmlns:fi="http://java.sun.com/xml/ns/wsit/2006/09/policy/fastinfoset/service" xmlns:tcp="http://java.sun.com/xml/ns/wsit/2006/09/policy/soaptcp/service"
>

<message name="otaHotelResNotif"/>
<message name="otaHotelResNotifResponse"/>
<portType name="WebServiceForTrust">
<operation name="otaHotelResNotif">
<input message="tns:otaHotelResNotif"/>
<output message="tns:otaHotelResNotifResponse"/>
</operation>
</portType>
<binding name="WebServiceForTrustPortBinding" type="tns:WebServiceForTrust">
<wsp:PolicyReference URI="#WebServiceForTrustPortBindingPolicy"/>
<operation name="otaHotelResNotif">
<input/>
<output/>
</operation>
</binding>
<service name="WebServiceForTrustService">
<port name="WebServiceForTrustPort" binding="tns:WebServiceForTrustPortBinding"/>
</service>
<wsp:Policy wsu:Id="WebServiceForTrustPortBindingPolicy">
<wsp:ExactlyOne>
<wsp:All/>
</wsp:ExactlyOne>
</wsp:Policy>
</definitions>

Кто-нибудь знает, какой конфигурации может не хватать здесь?

Мы также поняли, что в среде IDE после включения безопасности (AM security) был создан файл в разделе файлы конфигурации/amserver с именем amconfig.xml.

Этот файл мы не можем найти на веб-сервере после развертывания службы, ни в *.war, ни в addons/amserver или что-то в этом роде.

Внутренне файл выглядит так:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:AMConfig xmlns:ns2="http://identity.netbeans.org/access_manager_config_1_0">
<ProviderConfig type="WSP" name="WebServiceForTrustService">
<SecurityMechanism uri="urn:sun:wss:security:null:UserNameToken-Plain"/>
</ProviderConfig>
</ns2:AMConfig>

поскольку информация уже находится в sun-web.xml, который опубликован на сервере, я думаю, что это не должно быть проблемой, но может быть полезно для вас.


person Community    schedule 20.01.2009    source источник


Ответы (1)


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

Пример учебника был перестроен и развернут на тестовом сервере. Клиентское и серверное тестовое приложение. Оба работают нормально при локальном запуске на тестовом сервере.

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

Поэтому я предполагаю, что это как-то связано с настройками Access Manager, но не знаю, с какой именно.

Я надеюсь, что это поможет кому-нибудь помочь мне. Спасибо!

person Community    schedule 21.01.2009