Ověření webové služby RESTful

PROTOKOL HTTP podporuje použití několika mechanismů ověřování k ří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 novějších vynucuje služba App Transport Security (ATS) zabezpečená připojení mezi internetovými prostředky (například back-endovým serverem aplikace) a aplikací, což brání náhodnému zpřístupnění citlivých informací. Vzhledem k tomu, že služba ATS je ve výchozím nastavení povolená v aplikacích vytvořených pro iOS 9, budou všechna připojení podléhat požadavkům na zabezpečení ATS. Pokud připojení nesplňují tyto požadavky, dojde k selhání s výjimkou. ATS je možné odhlásit, pokud není možné používat HTTPS protokol a zabezpečenou komunikaci pro internetové prostředky. 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 PROTOKOL HTTP

Základní ověřování je nejjednodušší mechanismus ověřování podporovaný protokolem HTTP a zahrnuje klienta, který odesílá uživatelské jméno a heslo jako nešifrovaný text zakódovaný v base64. Funguje takto:

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

Basic Authentication Failing

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

Basic Authentication Succeeding

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 Authorization snadno dekódovat, pokud útočník zachytí provoz HTTP.

Zadání základního ověřování ve webové žádosti

Použití základního ověřování je určeno následujícím způsobem:

  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 s formátem username:password, který se pak zakóduje a přidá do Authorization hlavičky požadavku.

Proto s uživatelským jménem XamarinUser a heslem XamarinPassword se záhlaví stane:

Authorization: Basic WGFtYXJpblVzZXI6WGFtYXJpblBhc3N3b3Jk

Třída HttpClient může nastavit Authorization hodnotu záhlaví vlastnosti HttpClient.DefaultRequestHeaders.Authorization . HttpClient Vzhledem k tomu, že instance existuje ve více požadavcích, Authorization musí být hlavička nastavena pouze jednou, a ne při vytváření každého požadavku, jak je znázorněno v 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);
  }
  ...
}

Po provedení požadavku na operaci webové služby se požadavek podepíše hlavičkou Authorization , která označuje, jestli má uživatel oprávnění 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ženy v nezabezpečeném formátu v publikované aplikaci.

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

Služba REST by měla ozdobit každou akci atributem [BasicAuthentication] . Tento atribut slouží k analýze hlavičky Authorization a určení, jestli jsou přihlašovací údaje kódované v base64 platné, porovnáním hodnot uložených ve službě Web.config. I když je tento přístup vhodný pro ukázkovou službu, vyžaduje rozšíření pro veřejnou webovou službu.

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

Poznámka:

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