2017-05-27 25 views
5

Mam starszą aplikację ASP.NET, w której użytkownicy logują się za pośrednictwem formularza, który jest przetwarzany po stronie serwera. Jeśli wprowadzona nazwa użytkownika i hasło pasują do poświadczeń w bazie danych, ustawiam niektóre wartości w sesjach (np. Bieżący identyfikator użytkownika) i później wykonam Response.Redirect. Tworzę także HttpCookie dla funkcji "automatycznie ponownie wyświetlaj mi informacje przy następnej wizycie".Połączyć uwierzytelnianie po stronie serwera i po stronie klienta z WebAPI

Obecnie dodajemy również obsługę WebApi do tej aplikacji internetowej. Udało mi się zaimplementować uwierzytelnianie tokena, które pozwala mi zalogować się po stronie klienta.

Jak mogę połączyć oba podejścia uwierzytelniające? Chcę, aby użytkownik raz wprowadził swoje poświadczenia, uwierzytelnił się po stronie serwera i po stronie klienta przekierował użytkowników na inną stronę po uwierzytelnieniu.

+2

Czy możesz rozwinąć to, co chcesz osiągnąć? Którą metodę uwierzytelniania użyłaby użytkownik do jednorazowego uwierzytelnienia i jak jest to związane z inną metodą? Czy chcesz, aby twój użytkownik uwierzytelniał się za pomocą formularzy, a następnie mógł korzystać z interfejsu internetowego opartego na tokenie? (Również jak działa plik cookie do automatycznego ponownego logowania?) To brzmi jak podatność na atak, ale oczywiście nie znam szczegółów.) –

+0

Zobacz https://stackoverflow.com/questions/549/the-definitive-guide- uwierzytelnianie witryny na podstawie formularza? rq = 1 – s3raph86

Odpowiedz

0

Poniższy kod stworzy cookie do przechowywania zalogowanego użytkownika.

// login etc 
     if (chkRemember.Checked) 
     { 
      // calculate the total number of minutes in 20 days to use as the time out. 
      int timeout = (int)TimeSpan.FromDays(30).TotalMinutes; 

      // create an authentication ticket 
      FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(txtUserName.Text, true, timeout); 

      // Encrypt the ticket 
      string encrptedTicked = FormsAuthentication.Encrypt(ticket); 

      // create the cookie for the ticket, and put the ticket inside 
      HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrptedTicked); 

      // give cookie and ticket same expiration 
      cookie.Expires = ticket.Expiration; 

      // Attach cookie to current response. it will now to the client and then back to the webserver with every request 
      HttpContext.Current.Response.Cookies.Set(cookie); 

      // send the user to the originally requested page. 
      string requestedPage = FormsAuthentication.GetRedirectUrl(txtUserName.Text, false); 
      Response.Redirect(requestedPage, true); 
     } 
     else 
     { 
      // login without saving cookie to client 
      FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, false); 
     } 
Powiązane problemy