Аутентификация пользователя ASP.NET MVC из приложения WPF

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

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


person Igal Tabachnik    schedule 23.09.2010    source источник


Ответы (2)


Аутентификация с помощью форм работает в два этапа:

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

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

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

person Darin Dimitrov    schedule 23.09.2010
comment
Отлично, как раз то, что мне было нужно! Большое спасибо! - person Igal Tabachnik; 23.09.2010
comment
В образце кода предоставленной вами ссылки я получаю ошибку 500 с сервера. - person Henrique de Sousa; 11.02.2015

Этот код работал у меня, используя подход Дарина и класс 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" , "[email protected]"},
                {"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
        }
    }
person taylor michels    schedule 15.08.2013