= Wstęp = jPALIO zostało zintegrowane z WebServices przy użyciu biblioteki [http://cxf.apache.org Apache CXF] = Konfiguracja = Za integrację jPALIO z WebServices odpowiedzialny jest serwlet palio.webservices.WebServicesServlet. Należy dodać do pliku web.xml dodatkowe wpisy dotyczące tego serwletu. Każda instancja jPALIO może mieć zdefiniową dowolną liczbę, niezależnych usług. Usługi są definiowane w pliku konfiguracyjnym instancji. Najprostsza konfiguracja WebServices: * '''webServices/service/@class''' :Pełna nazwa klasy implementującej usługę Obsługiwane parametry: * enableMTOM - Włącza MTOM (Message Transmission Optimization Mechanism). MTOM umożliwia bardziej wydajne przesyłanie danych binarnych w żądaniach i odpowiedziach SOAP. Pełna konfiguracja usługi: = Implementacja usługi = W pierwszej kolejności należy stworzyć interfejs usługi. Zadaniem tego intefejsu jest opisanie usługi (nazwa usługi, które metody metody mają zostać udostępnione, nazwy argumentów itd.). Opisywanie usługi wykonuje się za pomocą adnotacji. Pełny opis adnotacji znajduje się [https://jax-ws.dev.java.net/jax-ws-ea3/docs/annotations.html tutaj] Przykładowy interfejs usługi: Kolejnym krokiem jest stworzenie klasy implementującej interfejs usługi. Nazwę tej klasy należy podać w konfiguracji usługi. Przykładowa implementacja interfejsu usługi: Zarówno interfejs jak i klasa go implementująca może być zdefiniowany w obiektach jPALIO typu Groovy lub JAVA. Ważne jest to, że modyfikacja tych obiektów nie wymaga restartu jPALIO. W przypadku modyfikacji tych obiektów, jPALIO automatycznie przeładowuje usługi. Poprawność konfiguracji usługi można sprawdzić poprzez uruchomienie strony o podanym adresie: '''http://[host]:[port]/palio/webservices''' WSDL dla danej usługi generowany jest automatycznie. Dostępny jest pod adresem: '''http://[host]:[port]/palio/webservices/[nazwa instancji]/[nazwa usługi]?wsdl''' = Bezpieczeństwo = == Sprawdzanie znacznika czasu wiadomości == Szczegółowe opisy parametrów: *[http://ws.apache.org/wss4j/apidocs/org/apache/ws/security/handler/WSHandlerConstants.html#TTL_TIMESTAMP timeToLive] == Autoryzacja typu użytkownik/hasło == Przy autoryzacji użytkownik/hasło wykorzystywane są mechanizmy bezpieczeńśtwa jPALIO. Użytkownicy usługi to użytkownicy systemu (P_USERS). Dla danej usługi można przpisać przywileje, dla których ma być dostępna. == Szyfrowanie == serviceSecurity.properties
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin org.apache.ws.security.crypto.merlin.keystore.type=jks org.apache.ws.security.crypto.merlin.keystore.password=sspass org.apache.ws.security.crypto.merlin.file=/home/tests/security/serviceKeystore.jksSzczegółowe opisy parametrów: *[http://ws.apache.org/wss4j/apidocs/org/apache/ws/security/handler/WSHandlerConstants.html#ENCRYPTION_PARTS encryptionParts] == Podpisywanie == serviceSecurity.properties
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin org.apache.ws.security.crypto.merlin.keystore.type=jks org.apache.ws.security.crypto.merlin.keystore.password=sspass org.apache.ws.security.crypto.merlin.file=/home/tests/security/serviceKeystore.jksSzczegółowe opisy parametrów: *[http://ws.apache.org/wss4j/apidocs/org/apache/ws/security/handler/WSHandlerConstants.html#SIGNATURE_PARTS signatureParts] == Łączenie mechanizmów bezpieczeństwa == W bardzo prosty sposób można połączyć mechanizmy bezpieczeństwa. Poniżej przedstawiona została konfiguracja realizująca deszyfrowanie, sprawdzanie podpisu oraz sprawdzanie znacznika czasu żądania oraz szyfrowanie, podpisywanie i umieszczanie znacznika czasu w odpowiedzi. == Generowanie testowych kluczy == Generowanie kluczy usługi i klienta:
keytool -genkey -alias servicekey -keyalg RSA -sigalg SHA1withRSA -keypass skpass -storepass sspass -keystore serviceKeystore.jks -dname "cn=localhost" keytool -genkey -alias clientkey -keyalg RSA -sigalg SHA1withRSA -keypass ckpass -storepass cspass -keystore clientKeystore.jks -dname "cn=clientuser"Dodanie klucza publicznego klienta do kluczy zaufanych usługi:
keytool -export -rfc -keystore clientKeystore.jks -storepass cspass -alias ClientKey -file Client.cer keytool -import -trustcacerts -keystore serviceKeystore.jks -storepass sspass -alias ClientKey -file Client.cer -nopromptDodanie klucza publicznego usługi do kluczy zaufanych klienta:
keytool -export -rfc -keystore serviceKeystore.jks -storepass sspass -alias ServiceKey -file Service.cer keytool -import -trustcacerts -keystore clientKeystore.jks -storepass cspass -alias ServiceKey -file Service.cer -noprompt