2009-07-18 37 views

Respuesta

21

Lo que intenta hacer es pasar credenciales a través de la autenticación básica HTTP, no estoy seguro de si la sintaxis de nombre de usuario: contraseña es compatible con HttpListener, pero si es así, deberá especificar que acepta las funciones básicas. auth primero.

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

Una vez que reciba una solicitud, a continuación, puede extraer el nombre de usuario y una contraseña con:

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

Here's a full explanation de todos los métodos authenitcation compatibles que se pueden utilizar con HttpListener.

+0

Lo sentimos, dije "No estoy si el nombre de usuario: la sintaxis de la contraseña es compatible con HttpListener ", pero, por supuesto, es el cliente el que la convertirá en un encabezado" WWW-Authenticate: basic ", por lo que solo importa si el cliente lo admite. Creo que el soporte para esto se ha eliminado de IE recientemente. –

4

Obtenga el encabezado Authorization. Es formato es el siguiente

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

Ejemplo:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

El nombre de usuario y la contraseña está separado por dos puntos (en este ejemplo, Aladdin:open sesame), entonces codificado-B64.

2

Es necesario activar primero la autenticación básica:

listener.AuthenticationSchemes = AuthenticationSchemes.Basic; 

Luego, en el método ProcessRequest podría obtener nombre de usuario y contraseña:

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