Udostępnij za pośrednictwem


Uwierzytelnianie usługi internetowej RESTful

Protokół HTTP obsługuje korzystanie z kilku mechanizmów uwierzytelniania w celu kontrolowania dostępu do zasobów. Uwierzytelnianie podstawowe zapewnia dostęp do zasobów tylko tym klientom, którzy mają poprawne poświadczenia. W tym artykule pokazano, jak używać uwierzytelniania podstawowego do ochrony dostępu do zasobów usługi internetowej RESTful.

Uwaga

W systemie iOS 9 lub nowszym usługa App Transport Security (ATS) wymusza bezpieczne połączenia między zasobami internetowymi (takimi jak serwer zaplecza aplikacji) i aplikacją, co uniemożliwia przypadkowe ujawnienie poufnych informacji. Ponieważ usługa ATS jest domyślnie włączona w aplikacjach utworzonych dla systemu iOS 9, wszystkie połączenia będą objęte wymaganiami dotyczącymi zabezpieczeń usługi ATS. Jeśli połączenia nie spełniają tych wymagań, zakończy się niepowodzeniem z wyjątkiem. Usługę ATS można zrezygnować, jeśli nie można używać HTTPS protokołu i bezpiecznej komunikacji dla zasobów internetowych. Można to osiągnąć, aktualizując plik Info.plist aplikacji. Aby uzyskać więcej informacji, zobacz App Transport Security.

Uwierzytelnianie użytkowników za pośrednictwem protokołu HTTP

Uwierzytelnianie podstawowe to najprostszy mechanizm uwierzytelniania obsługiwany przez protokół HTTP i obejmuje klienta wysyłającego nazwę użytkownika i hasło jako niezaszyfrowany tekst zakodowany w formacie base64. Działa w następujący sposób:

  • Jeśli usługa internetowa odbiera żądanie dla chronionego zasobu, odrzuca żądanie z kodem stanu HTTP 401 (odmowa dostępu) i ustawia nagłówek odpowiedzi WWW-Authenticate, jak pokazano na poniższym diagramie:

Basic Authentication Failing

  • Jeśli usługa sieci Web odbiera żądanie dla chronionego zasobu, z Authorization nagłówkiem poprawnie ustawionym, usługa internetowa odpowiada kodem stanu HTTP 200, który wskazuje, że żądanie zakończyło się pomyślnie i że żądane informacje są w odpowiedzi. Ten scenariusz przedstawiono na poniższym diagramie:

Basic Authentication Succeeding

Uwaga

Uwierzytelnianie podstawowe powinno być używane tylko za pośrednictwem połączenia HTTPS. W przypadku użycia za pośrednictwem połączenia HTTP nagłówek można łatwo zdekodować, Authorization jeśli ruch HTTP jest przechwytywany przez osobę atakującą.

Określanie uwierzytelniania podstawowego w żądaniu internetowym

Użycie uwierzytelniania podstawowego jest określone w następujący sposób:

  1. Ciąg "Basic" jest dodawany do Authorization nagłówka żądania.
  2. Nazwa użytkownika i hasło są łączone w ciąg z formatem "username:password", który jest następnie zakodowany w formacie base64 i dodany do Authorization nagłówka żądania.

W związku z tym z nazwą użytkownika "XamarinUser" i hasłem "XamarinPassword" nagłówek staje się:

Authorization: Basic WGFtYXJpblVzZXI6WGFtYXJpblBhc3N3b3Jk

Klasa HttpClient może ustawić wartość nagłówka Authorization we HttpClient.DefaultRequestHeaders.Authorization właściwości . HttpClient Ponieważ wystąpienie istnieje w wielu żądaniach, Authorization nagłówek musi być ustawiony tylko raz, a nie podczas wykonywania każdego żądania, jak pokazano w poniższym przykładzie kodu:

public class RestService : IRestService
{
  HttpClient _client;
  ...

  public RestService ()
  {
    var authData = string.Format ("{0}:{1}", Constants.Username, Constants.Password);
    var authHeaderValue = Convert.ToBase64String (Encoding.UTF8.GetBytes (authData));

    _client = new HttpClient ();
    _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue ("Basic", authHeaderValue);
  }
  ...
}

Następnie po wysłaniu żądania do operacji usługi internetowej żądanie jest podpisane z nagłówkiem Authorization , wskazując, czy użytkownik ma uprawnienia do wywołania operacji.

Ważne

Chociaż ten kod przechowuje poświadczenia jako stałe, nie powinny być przechowywane w niezabezpieczonym formacie w opublikowanej aplikacji.

Przetwarzanie po stronie serwera nagłówka autoryzacji

Usługa REST powinna dekorować każdą akcję za pomocą atrybutu [BasicAuthentication] . Ten atrybut służy do analizowania nagłówka Authorization i określania, czy poświadczenia zakodowane w formacie base64 są prawidłowe, porównując je z wartościami przechowywanymi w pliku Web.config. Chociaż takie podejście jest odpowiednie dla przykładowej usługi, wymaga rozszerzenia dla publicznej usługi internetowej.

W podstawowym module uwierzytelniania używanym przez usługi IIS użytkownicy są uwierzytelniani względem poświadczeń systemu Windows. W związku z tym użytkownicy muszą mieć konta w domenie serwera. Jednak model uwierzytelniania podstawowego można skonfigurować tak, aby zezwalał na uwierzytelnianie niestandardowe, w którym konta użytkowników są uwierzytelniane względem zewnętrznego źródła, takiego jak baza danych. Aby uzyskać więcej informacji, zobacz Podstawowe uwierzytelnianie w interfejsie API sieci Web ASP.NET w witrynie internetowej ASP.NET.

Uwaga

Uwierzytelnianie podstawowe nie zostało zaprojektowane do zarządzania wylogowywaniem. W związku z tym standardowe podejście do uwierzytelniania podstawowego na potrzeby wylogowywania polega na zakończeniu sesji.