Autentizace webových služeb JAX-WS na Weblogicu

V dnešním návodu se zaměřím na to, jakým způsobem zajistit autentizaci webových služeb vystavených na Weblogicu ve verzi 10.3.3, i když tento návod bude fungovat i ve verzích vyšších (a i nižších). Cílem je použít pouze standardní prostředky aplikačního serveru. A jako drobný bonus bude ukázka, jak vystavit webovou službu.

Nejprve si tedy vystavíme libovolnou webovou službu pomocí JAX-WS. Základem je do našeho mavenního projektu přidat potřebné knihovny:



   ...
    
   ...
        
            javax.xml
            jaxws-api
            2.0EA3
            provided
        
        
            com.sun.xml
            jaxws-rt
            2.0EA3
            provided
        
   ...
    
 

Jako scope těchto knihoven uvedeme, že jsou provided, což v praxi znamená, že knihovny budou použity pro kompilaci, ale nezaintegrují se do výsledného balíku. To proto, že Weblogic má tyto knihovny vlastní a naším cílem je použít právě implementaci aplikačního serveru.

Implementace webových služeb

Nyní si vytvořime a vystavíme vlastní webové služby. Služby budou definovány svým rozhraním a implementací. Rozhraní webové služby pak může vypadat třeba takto:

package eu.kratochvil.clanky.ws;

import javax.jws.*;

@WebService(targetNamespace = "http://schema.kratochvil.eu", name = "TestService")
public interface TestService {

    @WebMethod
    String sayHello(@WebParam(name = "name") String name);

}

A ještě implementace vlastní “business logiky”:

package eu.kratochvil.clanky.ws;

import javax.jws.WebService;

@WebService(endpointInterface = "eu.kratochvil.clanky.ws.TestService")
public class TestServiceImpl implements TestService {

    @Override
    public String sayHello(String name) {
        return "Hello " + name + "!";
    }
}

Z implementace je zřejmé, co naše služba dělá a není potřeba nějak složitě popisovat. Důležité jsou anotace WebService a WebMethod, které nám popisují vlastní rozhraní webové služby. Další anotace, jako je například WebParam a podobně složí k přesnému popsání a definici kontraktu webové služby a v budoucnu o tom napíšu nějaký článek. Do té doby doporučuji použít dokumentaci.

Posledním krokem je konfigurace našeho webového archívu. K tomu slouží znamý web.xml, který je klasicky umístěn v adresáři WEB-INF naší aplikace a ještě sun-jaxws.xml.

Soubor _web.xml_ bude obsahovat následující:

    
        
            com.sun.xml.ws.transport.http.servlet.WSServletContextListener
        
    
    
        jaxws
        com.sun.xml.ws.transport.http.servlet.WSServlet
    
    
        jaxws
        /testService
    

Tímto donutíme weblogic, aby vystavil servlet, který bude handlovat naše webové služby. Samozřejmě je možné použít v definici patternu znaky wildcard například takto:

    
        jaxws
        /ws/*
    

Pak budou servletem pro webové služby zpracován jakýkoliv požadavek, podle zadané masky (například /ws/users nebo /ws/loans).

Poslední konfigurační soubor, který musíme vytvořit, aby nám začaly korektně fungovat webové služby je sun-jaxws.xml, který je také umístěn v adresáři WEB-INF naší aplikace. Jeho podoba je následující:


    

Zabezpečení webové služby

Nyní se konečně dostáváme k tomu, jak zabezpečit webové služby pomocí standardních prostředků aplikačního serveru Weblogic. Nejprve se přihlásíme do konzole aplikačního serveru, kde se proklikáme na správu uživatelů přes menu pomocí položky Security Realms. Následně vybereme konkrétní realm (defaultně myrealm). Na záložce Users and Groups si založíme uživatele, kterým se chceme autentizovat pro využívání našich webových služeb.

V našem případě jsme si vytvořili uživatele test, kterého zařadíme do nějaké, námi vytvořené skupiny (například TestGroup).

Tímto máme základní konfiguraci aplikačního serveru hotovou a dalším krokem bude nastavení naší aplikace. Úplně nejjednodušší cestou je přidání následujících několika řádků do souboru web.xml:

    
        Security for WS
        
            WSPOST
            
            
            /testService
            POST
        
        
            TestGroup
        
    
    
        BASIC
        myrealm
    
    
        TestGroup
    

Zde definujeme, co chceme zabezpečit, jaká skupina uživatelů je oprávněna používat naše služby apod. Pokud náš projekt nyní zkompilujeme a nasadíme na aplikační server, měli bychom být dotázání na heslo ve chvíli, kdy se pokusíme zavolat naši webovou službu, což si můžete vyzkoušet například pomocí skvělého nástroje SoapUI.

V článku jsem záměrně nepoužíval nic jiného než jen JAX-WS, tedy žádný Spring Security ani nic podobného. Výhodou je, že se vám tímto přístupem zjednoduší deployment a hlavně získáte skvělé možnosti, jak vaší aplikaci zaintegrovat do firemní infrastruktury, bez složitého nastavování. Weblogic vám totiž nastaví admin serveru, který Vám zároveň vytvoří i nějakou roli, kterou pak následně budete ve své aplikaci využívat. No a správa uživatelů a hesel pro aplikace, které vaše služby budou využívat je také věc administrátora. Navíc lze samozřejmě aplikační server klientské aplikace nastavit tak, aby autentizaci prováděl pro aplikaci transparentně, takže odpadá složitá správa hesel na obou stranách, ale o tom zase někdy příště.

Leave a Reply

Your email address will not be published. Required fields are marked *