Ověření webové služby RESTfulAuthenticate a RESTful Web Service

Protokol 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 jenom pro klienty, 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.HTTP supports the use of several authentication mechanisms to control access to resources. Basic authentication provides access to resources to only those clients that have the correct credentials. This article demonstrates how to use basic authentication to protect access to RESTful web service resources.

Poznámka

V systému iOS 9 a novějších vynutila služba Transport Security Security (ATS) zabezpečená připojení mezi internetovými prostředky (například back-end serverem aplikace) a aplikací, což zabrání nechtěnému zpřístupnění citlivých informací.In iOS 9 and greater, App Transport Security (ATS) enforces secure connections between internet resources (such as the app's back-end server) and the app, thereby preventing accidental disclosure of sensitive information. Vzhledem k tomu, že služba ATS je ve výchozím nastavení povolená v aplikacích vytvořených pro iOS 9, budou se všechna připojení vztahovat na požadavky na zabezpečení ATS.Since ATS is enabled by default in apps built for iOS 9, all connections will be subject to ATS security requirements. Pokud připojení tyto požadavky nesplňují, dojde k jejich selhání s výjimkou.If connections do not meet these requirements, they will fail with an exception. ATS se může stát, že není možné používat HTTPS protokol a zabezpečenou komunikaci pro internetové prostředky.ATS can be opted out of if it is not possible to use the HTTPS protocol and secure communication for internet resources. Toho je možné dosáhnout aktualizací souboru info. plist aplikace.This can be achieved by updating the app's Info.plist file. Další informace najdete v tématu zabezpečení přenosu aplikací.For more information see App Transport Security.

Ověřování uživatelů přes protokol HTTPAuthenticating Users over HTTP

Základní ověřování je nejjednodušším mechanismem ověřování, který podporuje protokol HTTP, a zahrnuje klienta odesílající uživatelské jméno a heslo jako nešifrovaný text v kódování Base64.Basic authentication is the simplest authentication mechanism supported by HTTP, and involves the client sending the username and password as unencrypted base64 encoded text. Funguje takto:It works as follows:

  • 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 byl odepřen) a nastaví hlavičku odpovědi WWW-Authenticate, jak je znázorněno na následujícím obrázku:If a web service receives a request for a protected resource, it rejects the request with an HTTP status code 401 (access denied) and sets the WWW-Authenticate response header, as shown in the following diagram:

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

  • Pokud webová služba obdrží požadavek na chráněný prostředek se Authorization správně nastavenou hlavičkou, Webová služba odpoví stavovým kódem HTTP 200, což indikuje, že požadavek byl úspěšný a že požadované informace jsou v odpovědi.If a web service receives a request for a protected resource, with the Authorization header correctly set, the web service responds with an HTTP status code 200, which indicates that the request succeeded and that the requested information is in the response. Tento scénář je zobrazený v následujícím diagramu:This scenario is shown in the following diagram:

Základní ověřování bylo úspěšné.

Poznámka

Základní ověřování by se mělo používat jenom přes připojení HTTPS.Basic authentication should only be used over an HTTPS connection. Při použití přes připojení HTTP Authorization může být záhlaví snadno Dekódovatelné, pokud je přenos HTTP zachycen útočníkem.When used over an HTTP connection, the Authorization header can easily be decoded if the HTTP traffic is captured by an attacker.

Zadání základního ověřování na webovém požadavkuSpecifying Basic Authentication in a Web Request

Základní ověřování se určuje takto:Use of basic authentication is specified as follows:

  1. Řetězec "Basic" se přidá do Authorization hlavičky žádosti.The string "Basic " is added to the Authorization header of the request.
  2. Uživatelské jméno a heslo jsou zkombinovány do řetězce ve formátu "uživatelské jméno: heslo", což je kódování Base64 a přidáno do Authorization hlavičky žádosti.The username and password are combined into a string with the format "username:password", which is then base64 encoded and added to the Authorization header of the request.

Proto s uživatelským jménem "XamarinUser" a heslem "XamarinPassword" se záhlaví bude:Therefore, with a username of 'XamarinUser' and a password of 'XamarinPassword', the header becomes:

Authorization: Basic WGFtYXJpblVzZXI6WGFtYXJpblBhc3N3b3Jk

HttpClientTřída může nastavit Authorization hodnotu záhlaví HttpClient.DefaultRequestHeaders.Authorization Vlastnosti.The HttpClient class can set the Authorization header value on the HttpClient.DefaultRequestHeaders.Authorization property. Vzhledem k tomu, že HttpClient instance existuje v rámci více požadavků, je Authorization nutné hlavičku nastavit pouze jednou, nikoli při vytváření všech požadavků, jak je znázorněno v následujícím příkladu kódu:Because the HttpClient instance exists across multiple requests, the Authorization header needs only to be set once, rather than when making every request, as shown in the following code example:

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 potom v rámci operace webové služby provede žádost, je žádost podepsaná Authorization hlavičkou, která označuje, jestli má uživatel oprávnění k vyvolání operace.Then when a request is made to a web service operation the request is signed with the Authorization header, indicating whether or not the user has permission to invoke the operation.

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.While this code stores credentials as constants, they should not be stored in an insecure format in a published application.

Zpracovává se strana serveru s hlavičkou autorizace.Processing the Authorization Header Server Side

Služba REST by měla každou akci napředt pomocí [BasicAuthentication] atributu.The REST service should decorate each action with the [BasicAuthentication] attribute. Tento atribut slouží k analýze Authorization hlavičky a určení, zda jsou pověření kódovaná pomocí Base64 platná, porovnáním s hodnotami uloženými v Web.config. I když je tento přístup vhodný pro ukázkovou službu, vyžaduje rozšíření pro veřejnou webovou službu.This attribute is used to parse the Authorization header and determine if the base64 encoded credentials are valid by comparing them against values stored in Web.config. While this approach is suitable for a sample service, it requires extending for a public-facing web service.

V modulu Basic Authentication, který používá služba IIS, se uživatelům ověřují podle svých přihlašovacích údajů pro Windows.In the basic authentication module used by IIS, users are authenticated against their Windows credentials. Proto musí mít uživatelé účty v doméně serveru.Therefore, users must have accounts on the server's domain. Model základního ověřování však lze nakonfigurovat tak, aby povoloval vlastní ověřování, kde jsou uživatelské účty ověřovány proti externímu zdroji, jako je například databáze.However, the Basic authentication model can be configured to allow custom authentication, where user accounts are authenticated against an external source, such as a database. Další informace najdete v tématu základní ověřování ve webovém rozhraní API ASP.NET na webu ASP.NET.For more information see Basic Authentication in ASP.NET Web API on the ASP.NET website.

Poznámka

Základní ověřování není navržené pro správu odhlašování. Proto standardní základní ověření přístupu k odhlášení je ukončení relace.Basic authentication was not designed to manage logging out. Therefore, the standard basic authentication approach for logging out is to end the session.