2009-07-18 27 views
9

Mam do czynienia z problemem tutaj, z HttpListener.HttpListener: jak uzyskać http użytkownika i hasło?

Gdy żądanie formularza

http://user:[email protected]/ 

wykonany jest, w jaki sposób mogę uzyskać użytkownika i hasło? HttpWebRequest ma właściwość Credentials, ale HttpListenerRequest jej nie ma i nie znalazłem nazwy użytkownika w żadnej jej właściwości.

Dzięki za pomoc.

Odpowiedz

21

To, co próbujesz zrobić, to przekazywać dane uwierzytelniające za pośrednictwem podstawowego uwierzytelniania HTTP, nie jestem pewien, czy składnia nazwa użytkownika: hasło jest obsługiwana w HttpListener, ale jeśli tak, musisz określić, że akceptujesz podstawowe auth pierwszy.

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

Po otrzymaniu wniosku, można następnie wyodrębnić nazwę użytkownika i hasło:

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

Here's a full explanation wszystkich obsługiwanych metod authenitcation, które mogą być używane z HttpListener.

+0

Niestety, powiedziałem: „Nie jestem, czy nazwa użytkownika: Składnia haseł jest obsługiwana w HttpListener ", ale oczywiście jest to klient, który przekształci to w nagłówek" WWW-Authenticate: basic ", więc ma to znaczenie tylko wtedy, gdy klient go obsługuje. Wierzę, że wsparcie dla niego zostało niedawno usunięte z IE. –

4

Uzyskaj nagłówek Authorization. Jest to format następująco

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

przykład:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

Nazwa użytkownika i hasło są oddzielone okrężnicy (w tym przykładzie, Aladdin:open sesame), a następnie B64 kodowane.

2

trzeba najpierw włączyć uwierzytelnianie podstawowe:

listener.AuthenticationSchemes = AuthenticationSchemes.Basic; 

Następnie w metodzie ProcessRequest można uzyskać nazwę użytkownika i hasło:

if (context.User.Identity.IsAuthenticated) 
{ 
    var identity = (HttpListenerBasicIdentity)context.User.Identity; 
    Console.WriteLine(identity.Name); 
    Console.WriteLine(identity.Password); 
} 
Powiązane problemy