A hitelesítés (felhasználói autentikáció) lényege, hogy minden
beérkező SOAP lekérésről megállapítjuk, hogy melyik felhasználóhoz tartozik.
Erre azért van szükség, mert nem szeretnénk, hogy bárki hozzáférjen mások adataihoz.

Lássunk három megvalósítási módot.

1. Message-level security

A legegyszerűbb megvalósítás, ha minden SOAP üzenet tartalmazni fogja a jelszót ill. felhasználónevet.
Például:

Input fields for GetSellerPayments call request
Argument Type Meaning
apiKey string
password string
entriesPerPage int

Ennek a megoldásnak a legnagyobb előnye az egyszerű megvalósítás.
Másik előnye, hogy ez a megvalósítás állapotmentes, azaz követi a
"statelessness SOA principless"-t.

Building stateless services encourage loose coupling, reusability, and composability. [1]

Hátrányai közé sorolnám, hogy a felhasználót azonosító adatok titkosítás nélkül továbbítódnak minden egyes SOAP lekéréssel (amennyiben nem használunk SSL-t).
További hátránya, hogy az összes függvény argumentumlistája a fehasználónév/jelszó párossal kezdődik,
csak utánuk jönnek a hívásra specifikus argumentumok (call-specific fields). Ez sokaknak nem túl elegáns megoldásnak tűnhet.

2. SOAP fejléc

A felhasználót azonosító adatokat (felhasználónév,jelszó) megadhatjuk a SOAP üzenet Header elemében is.

A SOAP üzenet fő elemei

Az előnye az, hogy a webszolgáltatást igénybe vévő klienseknek
nem kell a tagfüggvények meghívásakor megadni a felhasználót azonosító adatokat,
így csak a tagfüggvényekre specifikus adatokat kell megadni. A PHP SOAP kiterjesztése lehetővé
teszi azt is, hogy a kliensnek csak egyszer kelljen beállítani a SOAP fejléc tartalmát,
az összes további SOAP-lekérésbe automatikusan beilleszti a megadott fejlécet (példakód).
További előnye, hogy ez a megoldás is állapotmentes, azaz követi a
"statelessness SOA principless"-t.

Kisebb hátránya, hogy a klienseknek bonyolultabb a dolguk, mert nem biztos,
hogy mindenki tudja, hogyan kell SOAP fejlécet beállítani.

3. SOAP fejléc + munkamenet kezelése

Az előbb ismertetett megoldások mindegyike állapotmentes volt, és a kiszolgáló
minden egyes SOAP lekéréskor hitelesítést végzett.
Most csak egyszer végzünk hitelesítést (login metódus), majd minden további kérelem
egy egyedi munkamenet (session) azonosítót fog tartalmazni a SOAP Header elemben (SOAP fejléc). A
munkamenet azonosítót (sessionId) a webszolgáltatás Login metódusa adja vissza a kliensnek.

Ennek a módszernek két előnye is van.

  • Biztonságosabb megoldásnak mondható, hiszen
    a titkos jelszót a kliens csak egyetlen SOAP lekérés alkalmából küldi el. Ezt akár
    SSL kapcsolaton is küldheti, a többi lekérést pedig titkosítatlan HTTP-n
    (persze csak akkor, ha a biztonság kérdése nem létfontosságú és fontosabb a teljesítmény).
  • Léteznek olyan adatok (például a bevásárlókocsi tartalma), amelyeket meg kell
    őrizni a kérelmek között. Használhatjuk például a PHP beépített munkamenet támogatását, azaz session változókat.

[1] Yuli Vasiliev, SOA and WS-BPEL

Leave a Reply