c# - HttpListener: ¿cómo obtener el usuario y la contraseña http?
user passwords (3)
Estoy enfrentando un problema aquí, con HttpListener.
Cuando una solicitud de la forma
http://user:[email protected]/
está hecho, ¿cómo puedo obtener el usuario y la contraseña? HttpWebRequest tiene una propiedad Credentials, pero HttpListenerRequest no la tiene, y no encontré el nombre de usuario en ninguna propiedad de la misma.
Gracias por la ayuda.
Lo que intenta hacer es pasar las credenciales a través de HTTP auth auth, no estoy seguro si la sintaxis del nombre de usuario: contraseña es compatible con HttpListener, pero si es así, deberá especificar que primero acepta la autenticación básica.
HttpListener listener = new HttpListener();
listener.Prefixes.Add(uriPrefix);
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
listener.Start();
Una vez que reciba una solicitud, puede extraer el nombre de usuario y la contraseña con:
HttpListenerBasicIdentity identity = (HttpListenerBasicIdentity)context.User.Identity;
Console.WriteLine(identity.Name);
Console.WriteLine(identity.Password);
Aquí hay una explicación completa de todos los métodos de authentitcation compatibles que se pueden usar con HttpListener.
Obtenga el encabezado Authorization
. Su formato es el siguiente
Authorization: <Type> <Base64-encoded-Username/Password-Pair>
Ejemplo:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
El nombre de usuario y la contraseña están separados por dos puntos (en este ejemplo, Aladdin:open sesame
) y luego codificados por B64.
Primero debe habilitar la Autenticación básica:
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
Luego, en su método ProcessRequest puede obtener el nombre de usuario y la contraseña:
if (context.User.Identity.IsAuthenticated)
{
var identity = (HttpListenerBasicIdentity)context.User.Identity;
Console.WriteLine(identity.Name);
Console.WriteLine(identity.Password);
}