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.

¿Fue útil?

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top