Home    | Software    | Articoli    | Tips'n Tricks    | Contattaci    | Supportaci  
Home arrow Articoli arrow NuSOAP, HTTP Authentication e HTTP Proxy

NuSOAP, HTTP Authentication e HTTP Proxy


NuSOAP e HTTP Authentication

Ricevo regolarmente email da amici che utilizzano nusoap, ed i maggiori dubbi riguardano l'autenticazione HTTP e HTTP Proxy. Di seguito il mio piccolo contributo in aiuto di chi necessiti informazioni al riguardo.
Se il webservice che dovete interrogare richiede autenticazione http non preoccupatevi, nusoap include il metodo che fa per voi: "setCredentials". Ecco subito un esempio del caso più semplice:

$soapclient = new soapclient("http://myserver/mysoapservice.php");
$soapclient->setCredentials("user","password");
 
 
Ho detto "caso più semplice" perchè "setCredentials" è molto più completo di così. In questo caso stiamo utilizzando una  "Basic Authentication Type" (quella che, su una pagina http, mostra una finestra di richiesta utente/password). Indichiamo il tipo di autenticazione con il terzo parametro di "setCredentials", che può essere: "basic","digest" or "certificate", ma dato che "basic" è il default, quì l'abbiamo omesso. Quando inseriamo utente e passowrd, nella forma "username:password" vengono "encodati" in base64 e inviati al server come parte degli header.
Basic Authentication Type invia dati in chiaro (base64 è solo uno schema di encoding per trasferimento di contenuti) ed è quindi insicuro. Ci sono altri due metodi di autenticazione supportati da nusoap:
  • Digest Authentication Type
  • Certificate Authentication Type

Su Wikipedia trovate la seguente definizione di Digest Access Authentication:
"...... allowing user identity to be established securely without having to send a password in plaintext over the network. Digest authentication is basically an application of MD5 cryptographic hashing with usage of nonce values to prevent cryptanalysis."
 
 
Questo tipo di autenticazione prevede una sorta di "handshake" tra server e client, per evitare che occhi "curiosi" possano entrare in possesso dei nostri dati sensibili. Istruiamo nusoap ad utilizzare la Digest Authentication passandogli "digest" come terzo parametro del metodo "setCredentials" e come quarto , un array contenente le seguenti chiavi:

  • "realm"
  • "nonce"
  • "nc"
  • "qop"

"realm" è il dominio di autenticazione,"nonce" sta per "numero usato solo una volta"  e viene generato randomicamente. Entrambi questi due valori li otteniamo dal server mediante una prima chiamata, e verrano usati per il processo di autenticazione vero e proprio. In pratica usiamo una semplice richiesta "GET" alla risorsa per la quale sia richiesta la "digest authentication" . Otterremo un 401 dal server, qualcosa del tipo:


HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm=”digestedaccess”, nonce=”Ab32Hh49iueg78bdg563jsndjk”,
opaque=”0000000000000000″, stale=false, algorithm=MD5, qop=”auth”


Ci interessano: "realm", "nonce" e "qop" (qualità di protezione). Li utilizzeremo nell'array da passare come quarto parametro a "setCredentials".  "nc" è un contatore indicante quante volte è stato usato il "nonce".
Il valore "auth" per "qop" significa "solo per autenticazione"(se fosse  "auth-int" sarebbe "per autenticazione ed integrità").
Con questi valori la chiamata sarà:

$soapclient->setCredentials("user","password","digest",
                                                 array(
                                                        "realm"  => "digestedaccess",
                                                        "nonce"  =>
”Ab32Hh49iueg78bdg563jsndjk”,
                                                        "nc"        => 0,
                                                         "qop"     => "auth"  
                                                  )
");


La "digest authentication type" è decisamente più sicura della "basic" , perchè i dati sensibili vengono combinati con dati provenienti dal server ed encodati md5. md5 è un algoritmo di "hashing" a "senso unico", rendendo difficile risalire ai dati in chiaro da quelli encodati.
 
Ancora più sicuro è il terzo metodo di autenticazione: Certificate Authentication Type.
Questo implica l'utilizzo di un certificato client ssl riconosciuto dal server. Per capirne appieno il meccanismo bisognerebbe parlare dalla "infrastruttura a chiave pubblica", il che è fuori dello scopo del presente articolo. Al riguardo potete trovare una esauriente spiegazione su Wikipedia .
Volendo usare questo metodo di autenticazione con nusoap, è necessario indicare "certificate" come terzo parametro di "setCredentials", e come quinto un array con almeno le seguenti chiavi:
  • "sslcertfile",  il file del certificato ssl(.pem)
  • "sslkeyfile",  il file della chiave ssl (.pem) del suddetto certificato
  • "passphrase", la password/passphrase per la suddetta chiave
  • "cainfofile" (opzionale), il file del certificato della Certification Authority (.pem)



NuSOAP e HTTP Proxy


Questo è qualcosa su cui ho ricevuto richieste di informazioni più volte, ed onestamente me ne stupisco dato che nusoap include un metodo semplice ed auto esplicativo al riguardo: setHTTPProxy. Ecco un semplice esempio:

$soapclient->setHTTPProxy("http://proxyhost",8080,"proxy_user","proxy_password");

Il secondo parametro è ovviamente la porta del proxy.
E' tutto.

Hasta la proxima.



 
< Prec.   Pros. >

  Articles RSS feed

Articoli pił recenti
Software pił recenti
   
designed by allmambo.com