HttpListener: come arrivare utente http e la password?
-
18-09-2019 - |
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.
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);
}