2

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

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

ответ

5

Проверка подлинности форм работает в два этапа:

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

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

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

+0

Отлично, мне нужно было! Большое спасибо! –

+0

В примере кода, который вы указали, я получаю сообщение Error 500 с сервера. –

1

Этот код работал для меня, используя подход Дарина и класс 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 
     } 
    }