2024. június 21., péntek

Gyorskeresés

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

Írta: | Kulcsszavak: php . soap . web service . service . authentication

[ ÚJ BEJEGYZÉS ]

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.

Hozzászólások

(#1) Peter Kiss


Peter Kiss
senior tag

[ értesítő ]

(#2) Peter Kiss


Peter Kiss
senior tag

+ Digest autentikáció

Valahol a service kódjában ennyit kell megoldanunk:

protected function _authenticateBy() {
return new DigestServiceAuthenticator($this);
}

A DigestServiceAuthenticator 2 paramétert vár: IDigestKeyVault (GetKey($userName)), illetve a realm nyilván.

Ebben az esetben a másik autentikáció metódus üres maradhat, mert el tudja maga is dönteni, hogy mehet-e a dolog, persze felülbírálható a döntés:

protected function _onAuthenticating(AuthenticationRequest $authRequest) {

}

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.