2009-07-18 17 views
9

Qui sto affrontando un problema, con HttpListener.HttpListener: come ottenere http utente e password?

Quando viene effettuata una richiesta del modulo

http://user:[email protected]/ 

, come posso ottenere l'utente e la password? HttpWebRequest ha una proprietà Credentials, ma HttpListenerRequest non ce l'ha, e non ho trovato il nome utente in alcuna proprietà di esso.

Grazie per l'aiuto.

risposta

21

Quello che stai tentando di fare è passare le credenziali tramite autenticazione di base HTTP, non sono sicuro se il nome utente: la sintassi della password sia supportata in HttpListener, ma se lo è, devi specificare che accetti base prima autenticazione.

HttpListener listener = new HttpListener(); 
listener.Prefixes.Add(uriPrefix); 
listener.AuthenticationSchemes = AuthenticationSchemes.Basic; 
listener.Start(); 

Una volta che si riceve una richiesta, è possibile quindi estrarre l'username e password con:

HttpListenerBasicIdentity identity = (HttpListenerBasicIdentity)context.User.Identity; 
Console.WriteLine(identity.Name); 
Console.WriteLine(identity.Password); 

Here's a full explanation di tutti i metodi authenitcation supportati che possono essere utilizzati con HttpListener.

+0

dispiace, ho detto "Io non sono se il nome utente: la sintassi della password è supportata in HttpListener ", ma ovviamente è il client che lo convertirà in un'intestazione" WWW-Authenticate: basic ", quindi importa solo se il client lo supporta. Credo che il supporto sia stato abbandonato da IE di recente. –

4

Ottieni l'intestazione Authorization. E 'formato è il seguente

Authorization: <Type> <Base64-encoded-Username/Password-Pair> 

Esempio:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

Il nome utente e la password è del colon-separati (in questo esempio, Aladdin:open sesame), poi B64-codificato.

2

È necessario attivare prima l'autenticazione di base:

listener.AuthenticationSchemes = AuthenticationSchemes.Basic; 

Poi nel metodo ProcessRequest si potrebbe ottenere username e password:

if (context.User.Identity.IsAuthenticated) 
{ 
    var identity = (HttpListenerBasicIdentity)context.User.Identity; 
    Console.WriteLine(identity.Name); 
    Console.WriteLine(identity.Password); 
} 
Problemi correlati