Frage

Ich bin vor einem Problem hier, mit Httplistener.

Wenn eine Anfrage von der Form

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

gemacht wird, wie kann ich den Benutzer und Passwort? HttpWebRequest eine Credentials Eigenschaft hat, aber HttpListenerRequest hat es nicht, und ich habe nicht den Benutzernamen in irgendeiner Eigenschaft es finden.

Danke für die Hilfe.

War es hilfreich?

Lösung

Was Sie versuchen zu tun passieren Anmeldeinformationen über HTTP Basic Auth, ich bin nicht sicher, ob der Benutzername: Passwort Syntax in Httplistener unterstützt wird, aber wenn es ist, werden Sie müssen angeben, dass Sie grundlegende auth akzeptieren zuerst.

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

Wenn Sie eine Anfrage erhalten, können Sie dann extrahieren Sie den Benutzernamen und das Passwort mit:

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

Hier ist eine vollständige Erklärung aller unterstützten authenitcation Methoden, die kann mit Httplistener verwendet werden.

Andere Tipps

Holen Sie sich die Authorization-Header. Es ist Format ist wie folgt

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

Beispiel:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Der Benutzername und das Passwort ist Kolon-getrennt (in diesem Beispiel Aladdin:open sesame), dann B64-codiert werden.

Sie müssen zuerst die Standardauthentifizierung aktivieren:

listener.AuthenticationSchemes = AuthenticationSchemes.Basic;

Dann in Ihrer Methode Process Sie können Benutzernamen und ein Passwort erhalten:

if (context.User.Identity.IsAuthenticated)
{
    var identity = (HttpListenerBasicIdentity)context.User.Identity;
    Console.WriteLine(identity.Name);
    Console.WriteLine(identity.Password);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top