Question

Comment puis-je authentifier un utilisateur (avec nom d'utilisateur et mot de passe) d'une application ASP.NET MVC? Je suis en train de le faire en utilisant WebClient, en passant NetworkCredentials, l'affichage de la requête à l'application ASP.NET MVC de mon client WPF. Comment gérer cette demande sur le serveur? Comment puis-je obtenir le nom d'utilisateur et mot de passe passé?

J'utilise l'authentification des formulaires dans l'application ASP.NET MVC (la valeur par défaut qui est créé avec un nouveau projet).

Était-ce utile?

La solution

Authentification Forms fonctionne en deux étapes:

  1. L'utilisateur accède à la page d'utilisateur et entre son nom d'utilisateur et mot de passe et les envoie au serveur
  2. Le serveur vérifie eux et si elles sont correctes, il émet un cookie d'authentification qui est envoyé au client. Le client stocke ce cookie et qu'il envoie le long de chaque requêtes suivantes au serveur.

Donc, pour y parvenir dans une application WPF vous devez d'abord obtenir un cookie d'authentification. Alors d'abord envoyer une requête POST à ??la page de connexion avec le nom d'utilisateur et mot de passe et lire le cookie retourné (Pour cela, vous devez définir la propriété CookieContainer sur le HttpWebRequest pour qu'il soit en mesure d'attraper le cookie). Une fois que vous avez le cookie vous réutiliser le contenant des cookies dans les appels suivants vers des pages authentifiées.

Vous pouvez checkout

Autres conseils

Ce code a fonctionné pour moi, en utilisant l'approche de Darin et la classe WebClientEx de leur lien. Ma forme WPF doit authentifier à l'application MVC et stocker le nom et la valeur du cookie d'authentification retourné dans les propriétés statiques cookieName et cookievalue. La fonction CreateUser () est alors en mesure d'accéder à une action sécurisée dans l'application MVC.

    //************************************************
    //************************************************
    private void Authenticate(object sender, RoutedEventArgs e)
    {
        using (var client = new WebClientEx())
        {
            var values = new NameValueCollection
            {
                { "UserName", "xxx" },
                { "Password", "yyy" },
            };

            var byteResponse = client.UploadValues("http://localhost/MyMvcApp/Account/Login", values);
            var responseString = Encoding.ASCII.GetString(byteResponse); //debugging

            CookieCollection authCookie = client.CookieContainer.GetCookies(new Uri("http://localhost/"));
            if (authCookie.Count > 0)
            {
                CookieName = authCookie[0].Name;
                CookieValue = authCookie[0].Value;
            }
        }
    }

    //************************************************
    //************************************************
    private void CreateUser(object sender, RoutedEventArgs e)
    {
        using (var client = new WebClientEx())
        {
            var user = new NameValueCollection
            {
                {"FirstName" , "Xavier"},
                {"LastName" , "McLann"},
                {"EmailAddress" , "xavier@aol.com"},
                {"Phone" , "234445585"}
            };

            if (!String.IsNullOrEmpty(CookieName) && !String.IsNullOrEmpty(CookieValue))
                client.CookieContainer.Add(new Cookie(CookieName, CookieValue,"/","localhost"));

            var byteResponse = client.UploadValues("http://localhost/MyMvcApp/Home/Create", user);
            var responseString = Encoding.ASCII.GetString(byteResponse); //debugging
        }
    }
scroll top