PHP Web service 2 - Az őrület folytatódik: autentikáció

Az előző epizódban láthattuk, hogy egészen egyszerűen és olvashatóan össze lehet rakni egy web szolgáltatást PHP-val, de azzal az volt a gond, hogy bárki használhatta a service-t, nem volt korlátozva az elérhetősége.

Éppen ezért megnézzük, mit lehet tenni az ellen, hogy illetéktelen lepjék el a webszerverünket, alkalmazásunkat.

Azért, hogy elsőre ne bonyolítsuk a dolgokat, nézzük meg a legegyszerűbbet: Basic Authentication Scheme

[ íme egy ismertető ]

Most, hogy már mindent tudunk (kérés --> hát te ki vagy --> én vagyok!), lássuk, mit tudunk kihozni, hogy egyszerű legyen használnunk:

<?php

/* namespace játék */

class SvcController extends WebService {

public static function __static() {
typeof(__CLASS__)->Attributes()->MethodAttributes()->Add("Method1", new Operation(typeof(new InPut()), "method1 leírása"))->Add("VoidMethod", new Operation());
}

protected function _authenticateBy() {
return new BasicServiceAuthenticator();
}

protected function _onAuthenticating(AuthenticationRequest $authRequest) {
$authRequest->SetAuthenticated($authRequest->Password() == "password");
}

public function Method1(InPut $in) {
/* ... */
return $out;
}

public function VoidMethod() {
/* ... */
}

}

A service kódja megegyezik az első részben látottal, illetve majdnem, belekerült 2 plusz metódus:

protected function _authenticateBy() {
return new BasicServiceAuthenticator();
}

protected function _onAuthenticating(AuthenticationRequest $authRequest) {
$authRequest->SetAuthenticated($authRequest->Password() == "password");
}

_authenticateBy()
- visszaed egy IServiceAthenticator-t implementáló típusú objektumot
- ami képes arra, hogy építsen számunkra egy AuthenticationRequest instance-t az elérhető adatokból
- és képes intézkedni abban az esetben, amikor ismeretlen számunkra a kliens (a példában szerepló basic megoldás összesen 2 header-t küld ki ekkor)

_onAuthenticating()
- akkor hívódik meg, mikor autentikációs feladatunk akad, mérsékelten izgalmas a dolog, jelenleg a következő adatokat kaphatjuk megy egy AuthenticationRequest instance-ban: name, password, sessionId, other data (array())
- bármilyen logikát implementálhatunk itt, a lényeg a SetAuthenticated() meghívása true/false paraméterrel, a példában csak a jelszónak kell helyesnek lennie

Azt hiszem, ha valakinek így kellene egy service-t írnia, nem sok gondja lenne. Következőkben majd megpróbálom meghegeszteni a digest típusút is, illetve, ami gondot okoz, ha a SOAP üzenetben van valami, amire szükség van, azt hogyan tudom kinyerni, és felhasználni autentikációkor.

Hirdetés

3 pénzügyi döntés, amit minden kisvállalkozónak érdemes átgondolnia az év végéig

PR Ahogy az év vége közeledik, itt az ideje, hogy egy pillanatra megálljunk és áttekintsük vállalkozásunk pénzügyi helyzetét. Ne hagyjuk, hogy az év utolsó hónapjai elússzanak a sürgető feladatok és elfeledett határidők között!

Tovább a fórumba.