Ověření webové služby RESTful

HTTP podporuje použití několika ověřovacích mechanismů pro řízení přístupu k prostředkům. Základní ověřování poskytuje přístup k prostředkům pouze klientům, kteří mají správné přihlašovací údaje. Tento článek ukazuje, jak pomocí základního ověřování chránit přístup k prostředkům webové služby RESTful.

Poznámka

V iOSu 9 a vyšším vynucuje Zabezpečení přenosu aplikací (ATS) zabezpečená připojení mezi internetovými prostředky (například back-end serverem aplikace) a aplikací, což brání náhodnému zpřístupnění citlivých informací. Vzhledem k tomu, že je ATS v aplikacích sestavených pro iOS 9 ve výchozím nastavení povolený, budou všechna připojení podléhat požadavkům na zabezpečení ATS. Pokud připojení tyto požadavky nesplňuje, dojde k selhání s výjimkou. Pokud není možné používat protokol a zabezpečenou komunikaci pro internetové prostředky, může se služba ATS HTTPS odhlásit. Toho lze dosáhnout aktualizací souboru Info.plist aplikace. Další informace najdete v tématu App Transport Security.

Ověřování uživatelů přes HTTP

Základní ověřování je nejjednodušší ověřovací mechanismus podporovaný protokolem HTTP a zahrnuje odesílání uživatelského jména a hesla klientem jako nešifrovaný text s kódováním Base64. Funguje takto:

  • Pokud webová služba obdrží požadavek na chráněný prostředek, odmítne ji se stavový kódem HTTP 401 (přístup odepřen) a nastaví hlavičku odpovědi WWW-Authenticate, jak je znázorněno na následujícím diagramu:

Selhání základního ověřování

  • Pokud webová služba obdrží požadavek na chráněný prostředek se správně nastavenou hlavičkou, webová služba odpoví stavový kód HTTP 200, který označuje, že požadavek byl úspěšný a že v odpovědi jsou požadované Authorization informace. Tento scénář je znázorněn v následujícím diagramu:

Úspěšné základní ověřování

Poznámka

Základní ověřování by se mělo používat jenom přes připojení HTTPS. Při použití přes připojení HTTP je možné hlavičku snadno dekódovat, pokud útočník Authorization zachytá provoz HTTP.

Zadání základního ověřování ve webovém požadavku

Použití základního ověřování se zadá takto:

  1. Řetězec Basic se přidá do Authorization hlavičky požadavku.
  2. Uživatelské jméno a heslo se zkombinují do řetězce ve formátu "uživatelské_jméno:heslo", který se pak zakóduje do kódování Base64 a přidá se Authorization do hlavičky požadavku.

Proto se pomocí uživatelského jména XamarinUser a hesla XamarinPassword stane hlavička:

Authorization: Basic WGFtYXJpblVzZXI6WGFtYXJpblBhc3N3b3Jk

Třída HttpClient může nastavit hodnotu Authorization hlavičky u vlastnosti HttpClient.DefaultRequestHeaders.Authorization . Vzhledem k tomu, že instance existuje napříč více požadavky, je nutné hlavičku nastavit pouze jednou, nikoli při provádění každého požadavku, jak je znázorněno v HttpClientAuthorization následujícím příkladu kódu:

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);
  }
  ...
}

Když se pak na operaci webové služby vyžádá požadavek, podepíše se hlavičkou , která označuje, jestli má uživatel oprávnění Authorization k vyvolání operace.

Důležité

I když tento kód ukládá přihlašovací údaje jako konstanty, neměly by být uložené v nezabezpečeném formátu v publikované aplikaci.

Zpracování autorizační hlavičky na straně serveru

Služba REST by měla každou akci dekorovat [BasicAuthentication] atributem . Tento atribut se používá k parsování hlavičky a určení, jestli jsou přihlašovací údaje zakódované v kódování Base64 platné, porovnáním s hodnotami uloženými AuthorizationAuthorization. I když je tento přístup vhodný pro ukázkovou službu, vyžaduje rozšíření pro veřejně přístupnou webovou službu.

V modulu základního ověřování používaném službou IIS se uživatelé ověřují pomocí svých Windows přihlašovacích údajů. Proto uživatelé musí mít účty v doméně serveru. Model základního ověřování se ale může nakonfigurovat tak, aby povoloval vlastní ověřování, kdy se uživatelské účty ověřují vůči externímu zdroji, jako je například databáze. Další informace najdete v tématu Základní ověřování ASP.NET webovém rozhraní API na ASP.NET webu.

Poznámka

Základní ověřování nebylo navrženo ke správě odhlášení. Standardním přístupem k základnímu ověřování pro odhlášení je proto ukončení relace.