Аутентификация пользователя ASP.NET MVC из приложения WPF - PullRequest
2 голосов
/ 23 сентября 2010

Как я могу аутентифицировать пользователя (с помощью имени пользователя и пароля) приложения ASP.NET MVC?Я пытаюсь сделать это, используя WebClient, передав NetworkCredentials, отправив запрос в приложение ASP.NET MVC из моего клиента WPF.Как мне обработать этот запрос на сервере?Как получить переданные имя пользователя и пароль?

Я использую аутентификацию форм в приложении ASP.NET MVC (по умолчанию, которое создается с новым проектом).

Ответы [ 2 ]

5 голосов
/ 23 сентября 2010

Проверка подлинности с помощью форм выполняется в два этапа:

  1. Пользователь заходит на страницу входа в систему, вводит свое имя пользователя и пароль и отправляет их на сервер
  2. Сервер проверяет их, и если они верны, он отправляет куки-файл аутентификации, который отправляется клиенту. Клиент сохраняет этот файл cookie и отправляет его вместе с каждым последующим запросом на сервер.

Таким образом, для достижения этого в приложении WPF вам необходимо сначала получить файл cookie для аутентификации. Поэтому сначала отправьте запрос POST на страницу входа в систему вместе с именем пользователя и паролем и прочитайте возвращенный файл cookie (для этого необходимо установить свойство CookieContainer в запросе HttpWebRequest, чтобы он мог перехватить файл cookie). Получив cookie, вы повторно используете контейнер cookie в последующих вызовах к аутентифицированным страницам.

Вы можете оформить этот пример кода , чтобы помочь вам (просто замените адреса и имена параметров).

1 голос
/ 16 августа 2013

Этот код работал для меня, используя подход Дарина и класс WebClientEx из их ссылки. Моя форма WPF должна пройти аутентификацию в приложении MVC и сохранить возвращенное имя и значение cookie для аутентификации в статических свойствах CookieName и CookieValue. Затем функция CreateUser () может получить доступ к защищенному действию в приложении 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
        }
    }
...