HttpListener: cómo obtener usuario y contraseña http?
-
18-09-2019 - |
Pregunta
estoy frente a un problema aquí, con HttpListener.
Cuando una petición de la forma
http://user:password@example.com/
está hecho, ¿cómo puedo conseguir que el usuario y la contraseña? HttpWebRequest tiene una propiedad de Credenciales, pero HttpListenerRequest no lo tiene, y no he encontrado el nombre de usuario en cualquier propiedad de la misma.
Gracias por la ayuda.
Solución
Lo que estamos tratando de hacer es pasar las credenciales de autenticación básica a través de HTTP, no estoy seguro de si el nombre de usuario: contraseña sintaxis es compatible con HttpListener, pero si lo es, tendrá que especificar que acepte autenticación básica 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);
He aquí una explicación completa de todos los métodos admitidos que authenitcation se puede utilizar con HttpListener.
Otros consejos
Obtener la cabecera 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 B64-codificado.
Es necesario activar primero la autenticación básica:
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
A continuación, en su 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);
}