HttpListener: comment obtenir l'utilisateur http et mot de passe?
-
18-09-2019 - |
Question
Je suis face à un problème ici, avec HttpListener.
Lorsqu'une demande de la forme
http://user:password@example.com/
est fait, comment puis-je l'utilisateur et mot de passe? HttpWebRequest a une propriété de vérification des pouvoirs, mais HttpListenerRequest ne l'a pas, et je ne trouve pas le nom d'utilisateur dans une propriété de celui-ci.
Merci pour l'aide.
La solution
Qu'est-ce que vous essayez de faire est de passer des informations d'identification via HTTP auth de base, je ne sais pas si le nom d'utilisateur: la syntaxe de mot de passe est pris en charge HttpListener, mais si elle est, vous devrez indiquer que vous acceptez auth de base premier.
HttpListener listener = new HttpListener();
listener.Prefixes.Add(uriPrefix);
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
listener.Start();
Une fois que vous recevez une demande, vous pouvez extraire le nom d'utilisateur et mot de passe:
HttpListenerBasicIdentity identity = (HttpListenerBasicIdentity)context.User.Identity;
Console.WriteLine(identity.Name);
Console.WriteLine(identity.Password);
Voici une explication complète de toutes les méthodes de authenitcation pris en charge peut être utilisé avec HttpListener.
Autres conseils
Obtenir l'en-tête de Authorization
. Son format est le suivant
Authorization: <Type> <Base64-encoded-Username/Password-Pair>
Exemple:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Le nom d'utilisateur et mot de passe sont séparés par deux-points (dans cet exemple, Aladdin:open sesame
), puis B64-codé.
Vous devez d'abord activer l'authentification de base:
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
Ensuite, dans votre méthode de ProcessRequest vous pouvez obtenir le nom d'utilisateur et mot de passe:
if (context.User.Identity.IsAuthenticated)
{
var identity = (HttpListenerBasicIdentity)context.User.Identity;
Console.WriteLine(identity.Name);
Console.WriteLine(identity.Password);
}