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:
- 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:
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:
- Ciąg "Basic" jest dodawany do
Authorization
nagłówka żądania. - 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.