Domanda

Sono di fronte a un problema qui, con HttpListener.

Quando una richiesta della forma

http://user:password@example.com/

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

Grazie per l'aiuto.

È stato utile?

Soluzione

Che cosa si sta cercando di fare è passare le credenziali tramite autenticazione base di HTTP, non sono sicuro se il nome utente: Password sintassi è supportata in HttpListener, ma se lo è, è necessario specificare che si accetta autenticazione di base prima.

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

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

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

Ecco una spiegazione completa di tutti i metodi authenitcation supportati può essere utilizzato con HttpListener.

Altri suggerimenti

Prendi 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-codificati.

È necessario attivare prima l'autenticazione di base:

listener.AuthenticationSchemes = AuthenticationSchemes.Basic;

Poi, nel tuo metodo di 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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top