Volání operací rozhraní REST API s využitím ověřování pomocí sdíleného klíče

Tento článek ukazuje, jak volat operaci rozhraní REST API služby Azure Storage vytvořením autorizovaného požadavku REST pomocí jazyka C#. Jakmile se naučíte volat operaci rest API pro službu Blob Storage, můžete použít podobný postup pro jakoukoli jinou operaci REST služby Azure Storage.

Předpoklady

Ukázková aplikace uvádí kontejnery objektů blob pro účet úložiště. K vyzkoušení kódu v tomto článku potřebujete následující položky:

  • Nainstalujte Sadu Visual Studio a zahrňte úlohu vývoje pro Azure. Tento příklad byl sestaven pomocí sady Visual Studio 2019. Pokud používáte jinou verzi, můžou se pokyny mírně lišit.

  • Předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

  • Účet úložiště pro obecné účely. Pokud ještě nemáte účet úložiště, přečtěte si téma Vytvoření účtu úložiště.

  • Příklad v tomto článku ukazuje, jak vypsat kontejnery v účtu úložiště. Pokud chcete zobrazit výstup, přidejte do účtu úložiště několik kontejnerů objektů blob, než začnete.

Stažení ukázkové aplikace

Ukázková aplikace je konzolová aplikace napsaná v jazyce C#.

Pomocí gitu stáhněte kopii aplikace do svého vývojového prostředí.

git clone https://github.com/Azure-Samples/storage-dotnet-rest-api-with-auth.git

Tento příkaz naklonuje úložiště do vaší místní složky gitu. Pokud chcete otevřít řešení sady Visual Studio, přejděte do složky storage-dotnet-rest-api-with-auth a otevřete StorageRestApiAuth.sln.

Informace o rest

Representational State Transfer (REST) je architektura, která umožňuje interakci se službou přes internetový protokol, například HTTP/HTTPS. REST je nezávislý na softwaru spuštěném na serveru nebo klientovi. Rozhraní REST API je možné volat z libovolné platformy, která podporuje protokol HTTP/HTTPS. Můžete napsat aplikaci, která běží na Macu, Windows, Linuxu, telefonu nebo tabletu s Androidem, i Telefon, iPodu nebo webu a používat stejné rozhraní REST API pro všechny tyto platformy.

Volání rozhraní REST API se skládá z požadavku provedeného klientem a odpovědi vrácené službou. V požadavku odešlete adresu URL s informacemi o tom, kterou operaci chcete volat, prostředek, na který se má jednat, na libovolné parametry dotazu a hlavičky a v závislosti na volané operaci, datové části dat. Odpověď ze služby zahrnuje stavový kód, sadu hlaviček odpovědí a v závislosti na volané operaci, datové části dat.

Informace o ukázkové aplikaci

Ukázková aplikace zobrazí seznam kontejnerů v účtu úložiště. Jakmile pochopíte, jak informace v dokumentaci k rozhraní REST API korelují s vaším skutečným kódem, dají se snadněji zjistit další volání REST.

Pokud se podíváte na rozhraní REST API služby Blob Service, uvidíte všechny operace, které můžete provádět v úložišti objektů blob. Klientské knihovny úložiště jsou obálky kolem rozhraní REST API, což usnadňuje přístup k prostředkům úložiště bez přímého použití rozhraní REST API. Někdy ale můžete chtít místo klientské knihovny úložiště použít rozhraní REST API.

Operace výpisu kontejnerů

Tento článek se zaměřuje na operaci Výpis kontejnerů . Následující informace vám pomůžou porozumět některým polím v požadavku a odpovědi.

Metoda požadavku: GET. Tento příkaz je metoda HTTP, kterou zadáte jako vlastnost objektu požadavku. Mezi další hodnoty tohoto příkazu patří HEAD, PUT a DELETE v závislosti na rozhraní API, které voláte.

Identifikátor URI požadavku: https://myaccount.blob.core.windows.net/?comp=list. Identifikátor URI požadavku se vytvoří z koncového bodu https://myaccount.blob.core.windows.net účtu úložiště objektů blob a řetězce /?comp=listprostředku .

Parametry identifikátoru URI: Při volání ListContainers můžete použít další parametry dotazu. Několik těchto parametrů je časový limit volání (v sekundách) a předpona, která se používá k filtrování.

Dalším užitečným parametrem je maxresults: pokud je k dispozici více kontejnerů, než je tato hodnota, text odpovědi bude obsahovat prvek NextMarker , který označuje další kontejner, který se má vrátit k dalšímu požadavku. Pokud chcete tuto funkci použít, zadáte hodnotu NextMarker jako parametr značky v identifikátoru URI při provedení dalšího požadavku. Při použití této funkce je podobné stránkování výsledků.

Pokud chcete použít další parametry, připojte je k řetězci prostředku s hodnotou, například v tomto příkladu:

/?comp=list&timeout=60&maxresults=100

Hlavičky požadavku: V této části jsou uvedeny povinné a volitelné hlavičky požadavku. Jsou požadovány tři hlavičky: autorizační hlavička x-ms-date (obsahuje čas UTC pro požadavek) a x-ms-version (určuje verzi rozhraní REST API, která se má použít). Zahrnutí x-ms-client-request-id do hlaviček je volitelné. Hodnotu tohoto pole můžete nastavit na cokoli a při povolení protokolování se zapíše do protokolů analýzy úložiště.

Text požadavku: Pro ListContainers neexistuje žádný text požadavku. Text požadavku se používá pro všechny operace PUT při nahrávání objektů blob, včetně SetContainerAccessPolicy. Text požadavku umožňuje odeslat v seznamu XML uložených zásad přístupu, které se mají použít. Uložené zásady přístupu jsou popsány v článku Použití sdílených přístupových podpisů (SAS).

Stavový kód odpovědi: Informuje o všech stavových kódech, které potřebujete znát. V tomto příkladu je stavový kód HTTP 200 v pořádku. Úplný seznam stavových kódů HTTP najdete v tématu Definice stavového kódu. Informace o kódech chyb specifických pro rozhraní REST API služby Storage najdete v běžných kódech chyb rozhraní REST API.

Hlavičky odpovědi: Patří sem typ obsahu; x-ms-request-id, což je ID požadavku, které jste předali; x-ms-version, která označuje použitou verzi služby Blob Service a datum, které je ve standardu UTC, a udává čas provedení požadavku.

Text odpovědi: Toto pole je struktura XML poskytující požadovaná data. V tomto příkladu je odpovědí seznam kontejnerů a jejich vlastností.

Vytvoření požadavku REST

Pro zabezpečení při spouštění v produkčním prostředí vždy používejte protokol HTTPS místo HTTP. Pro účely tohoto cvičení používáme protokol HTTP, abyste mohli zobrazit data požadavků a odpovědí. Pokud chcete zobrazit informace o požadavku a odpovědi ve skutečných voláních REST, můžete si stáhnout Fiddler nebo podobnou aplikaci. V řešení sady Visual Studio je název a klíč účtu úložiště pevně zakódované ve třídě. Metoda ListContainersAsyncREST předá název účtu úložiště a klíč účtu úložiště metodám, které se používají k vytvoření různých součástí požadavku REST. V reálné aplikaci by se název a klíč účtu úložiště nacházet v konfiguračním souboru, proměnných prostředí nebo se načetl ze služby Azure Key Vault.

V našem ukázkovém projektu je kód pro vytvoření autorizační hlavičky v samostatné třídě. Myšlenka spočívá v tom, že byste mohli vzít celou třídu a přidat ji do vlastního řešení a použít ji tak, jak je. Autorizační kód hlavičky funguje pro většinu volání rozhraní REST API do služby Azure Storage.

Chcete-li sestavit požadavek, což je HttpRequestMessage objekt, přejděte na ListContainersAsyncREST v Program.cs. Postup sestavení žádosti:

  • Vytvořte identifikátor URI, který se použije pro volání služby.
  • Vytvořte objekt HttpRequestMessage a nastavte datovou část. Datová část má hodnotu null pro ListContainersAsyncREST, protože nepředáváme nic.
  • Přidejte hlavičky požadavku pro x-ms-date a x-ms-version.
  • Získejte autorizační hlavičku a přidejte ji.

Některé základní informace, které potřebujete:

  • Pro ListContainers je metodaGET. Tato hodnota se nastaví při vytváření instance požadavku.
  • Prostředek je část dotazu identifikátoru URI, která označuje, které rozhraní API se volá, takže hodnota je /?comp=list. Jak jsme si poznamenali dříve, prostředek je na stránce referenční dokumentace, která zobrazuje informace o rozhraní ListContainers API.
  • Identifikátor URI se vytvoří vytvořením koncového bodu služby Blob pro tento účet úložiště a zřetězením prostředku. Hodnota identifikátoru URI požadavku končí na http://contosorest.blob.core.windows.net/?comp=listhodnotu .
  • Pro ListContainers má requestBody hodnotu null a neexistují žádné další hlavičky.

Různá rozhraní API můžou mít jiné parametry, které se mají předat, například ifMatch. Příklad, kde můžete použít ifMatch je při volání PutBlob. V takovém případě nastavíte ifMatch na eTag a aktualizuje se pouze v případě, že eTag, který zadáte, odpovídá aktuální eTag objektu blob. Pokud někdo jiný aktualizoval objekt blob od načtení značky eTag, jeho změna se nepřepíše.

Nejprve nastavte a urirequestPayload.

// Construct the URI. It will look like this:
//   https://myaccount.blob.core.windows.net/resource
String uri = string.Format("http://{0}.blob.core.windows.net?comp=list", storageAccountName);

// Provide the appropriate payload, in this case null.
//   we're not passing anything in.
Byte[] requestPayload = null;

Dále vytvořte instanci požadavku, nastavte metodu na GET identifikátor URI a zadejte URI.

// Instantiate the request message with a null payload.
using (var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, uri)
{ Content = (requestPayload == null) ? null : new ByteArrayContent(requestPayload) })
{

Přidejte hlavičky požadavku pro x-ms-date a x-ms-version. Toto místo v kódu je také místo, kde přidáte další hlavičky požadavku vyžadované pro volání. V tomto příkladu nejsou k dispozici žádná další záhlaví. Příkladem rozhraní API, které předává další hlavičky, je operace Nastavit seznam ACL kontejneru. Toto volání rozhraní API přidá hlavičku s názvem x-ms-blob-public-access a hodnotu úrovně přístupu.

// Add the request headers for x-ms-date and x-ms-version.
DateTime now = DateTime.UtcNow;
httpRequestMessage.Headers.Add("x-ms-date", now.ToString("R", CultureInfo.InvariantCulture));
httpRequestMessage.Headers.Add("x-ms-version", "2017-07-29");
// If you need any additional headers, add them here before creating
//   the authorization header.

Zavolejte metodu, která vytvoří autorizační hlavičku a přidá ji do hlaviček požadavku. Autorizační hlavička se vytvoří později v článku. Název metody je GetAuthorizationHeader, který můžete vidět v tomto fragmentu kódu:

// Get the authorization header and add it.
httpRequestMessage.Headers.Authorization = AzureStorageAuthenticationHelper.GetAuthorizationHeader(
    storageAccountName, storageAccountKey, now, httpRequestMessage);

V tomto okamžiku httpRequestMessage obsahuje požadavek REST úplný s autorizačními hlavičkami.

Odeslání požadavku

Teď, když jste vytvořili požadavek, můžete volat metodu SendAsync, která ji odešle do Azure Storage. Zkontrolujte, jestli je hodnota stavového kódu odpovědi 200, což znamená, že operace proběhla úspěšně. V dalším kroku parsujte odpověď. V tomto případě získáte seznam kontejnerů XML. Pojďme se podívat na kód pro volání metody GetRESTRequest pro vytvoření požadavku, spuštění požadavku a následné prozkoumání odpovědi na seznam kontejnerů.

    // Send the request.
    using (HttpResponseMessage httpResponseMessage =
      await new HttpClient().SendAsync(httpRequestMessage, cancellationToken))
    {
        // If successful (status code = 200),
        //   parse the XML response for the container names.
        if (httpResponseMessage.StatusCode == HttpStatusCode.OK)
        {
            String xmlString = await httpResponseMessage.Content.ReadAsStringAsync();
            XElement x = XElement.Parse(xmlString);
            foreach (XElement container in x.Element("Containers").Elements("Container"))
            {
                Console.WriteLine("Container name = {0}", container.Element("Name").Value);
            }
        }
    }
}

Pokud při volání metody SendAsync spustíte síťový sniffer, například Fiddler , zobrazí se informace o požadavku a odpovědi. Pojďme se na to podívat. Název účtu úložiště je contosorest.

Požadavek:

GET /?comp=list HTTP/1.1

Hlavičky požadavku:

x-ms-date: Thu, 16 Nov 2017 23:34:04 GMT
x-ms-version: 2014-02-14
Authorization: SharedKey contosorest:1dVlYJWWJAOSHTCPGiwdX1rOS8B4fenYP/VrU0LfzQk=
Host: contosorest.blob.core.windows.net
Connection: Keep-Alive

Stavový kód a hlavičky odpovědi vrácené po provedení:

HTTP/1.1 200 OK
Content-Type: application/xml
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 3e889876-001e-0039-6a3a-5f4396000000
x-ms-version: 2017-07-29
Date: Fri, 17 Nov 2017 00:23:42 GMT
Content-Length: 1511

Text odpovědi (XML): Pro operaci List Containers se zobrazí seznam kontejnerů a jejich vlastností.

<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults
  ServiceEndpoint="http://contosorest.blob.core.windows.net/">
  <Containers>
    <Container>
      <Name>container-1</Name>
      <Properties>
        <Last-Modified>Thu, 16 Mar 2017 22:39:48 GMT</Last-Modified>
        <Etag>"0x8D46CBD5A7C301D"</Etag>
        <LeaseStatus>unlocked</LeaseStatus>
        <LeaseState>available</LeaseState>
      </Properties>
    </Container>
    <Container>
      <Name>container-2</Name>
      <Properties>
        <Last-Modified>Thu, 16 Mar 2017 22:40:50 GMT</Last-Modified>
        <Etag>"0x8D46CBD7F49E9BD"</Etag>
        <LeaseStatus>unlocked</LeaseStatus>
        <LeaseState>available</LeaseState>
      </Properties>
    </Container>
    <Container>
      <Name>container-3</Name>
      <Properties>
        <Last-Modified>Thu, 16 Mar 2017 22:41:10 GMT</Last-Modified>
        <Etag>"0x8D46CBD8B243D68"</Etag>
        <LeaseStatus>unlocked</LeaseStatus>
        <LeaseState>available</LeaseState>
      </Properties>
    </Container>
    <Container>
      <Name>container-4</Name>
      <Properties>
        <Last-Modified>Thu, 16 Mar 2017 22:41:25 GMT</Last-Modified>
        <Etag>"0x8D46CBD93FED46F"</Etag>
        <LeaseStatus>unlocked</LeaseStatus>
        <LeaseState>available</LeaseState>
        </Properties>
      </Container>
      <Container>
        <Name>container-5</Name>
        <Properties>
          <Last-Modified>Thu, 16 Mar 2017 22:41:39 GMT</Last-Modified>
          <Etag>"0x8D46CBD9C762815"</Etag>
          <LeaseStatus>unlocked</LeaseStatus>
          <LeaseState>available</LeaseState>
        </Properties>
      </Container>
  </Containers>
  <NextMarker />
</EnumerationResults>

Teď, když rozumíte tomu, jak vytvořit žádost, volat službu a analyzovat výsledky, pojďme se podívat, jak vytvořit autorizační hlavičku.

Vytvoření autorizační hlavičky

Tip

Azure Storage podporuje integraci Microsoft Entra pro objekty blob a fronty. Microsoft Entra ID nabízí mnohem jednodušší prostředí pro autorizaci požadavku do služby Azure Storage. Další informace o použití Microsoft Entra ID k autorizaci operací REST naleznete v tématu Autorizace pomocí Microsoft Entra ID. Přehled integrace Microsoft Entra se službou Azure Storage najdete v tématu Ověřování přístupu ke službě Azure Storage pomocí MICROSOFT Entra ID.

Další informace o konceptech autorizace najdete v tématu Autorizace požadavků na Azure Storage.

Pojďme tento článek destilovat přesně tak, aby byl potřebný a zobrazil kód.

Nejprve použijte autorizaci pomocí sdíleného klíče. Formát autorizační hlavičky vypadá takto:

Authorization="SharedKey <storage account name>:<signature>"  

Pole podpisu je kód HMAC (Hash-based Message Authentication Code) vytvořený z požadavku a vypočítán pomocí algoritmu SHA256 a pak kódován pomocí kódování Base64.

Tento fragment kódu ukazuje formát řetězce podpisu sdíleného klíče:

StringToSign = VERB + "\n" +  
               Content-Encoding + "\n" +  
               Content-Language + "\n" +  
               Content-Length + "\n" +  
               Content-MD5 + "\n" +  
               Content-Type + "\n" +  
               Date + "\n" +  
               If-Modified-Since + "\n" +  
               If-Match + "\n" +  
               If-None-Match + "\n" +  
               If-Unmodified-Since + "\n" +  
               Range + "\n" +  
               CanonicalizedHeaders +  
               CanonicalizedResource;  

V případě úložiště objektů blob zadáte příkaz VERB, md5, délku obsahu, kanonické hlavičky a kanonický prostředek. V tomto příkladu můžete ostatní nechat prázdné, ale zadejte \n , že jsou prázdné.

Kanonizace je proces standardizace dat, který má více než jednu možnou reprezentaci. V tomto případě standardizujete hlavičky a prostředek. Kanonické hlavičky jsou hlavičky, které začínají na x-ms-. Kanonický prostředek je identifikátor URI prostředku, včetně názvu účtu úložiště a všech parametrů dotazu (například ?comp=list). Kanonický prostředek obsahuje také všechny další parametry dotazu, které jste mohli přidat, například timeout=60.

Začněme dvěma kanonickými poli, protože jsou potřeba k vytvoření autorizační hlavičky.

Kanonické hlavičky

Chcete-li vytvořit tuto hodnotu, načtěte hlavičky, které začínají na x-ms-, a seřaďte je a pak je naformátujte do řetězce [key:value\n] instancí, zřetězený do jednoho řetězce. V tomto příkladu vypadají kanonické hlavičky takto:

x-ms-date:Fri, 17 Nov 2017 00:44:48 GMT\nx-ms-version:2017-07-29\n

Tady je kód použitý k vytvoření tohoto výstupu:

private static string GetCanonicalizedHeaders(HttpRequestMessage httpRequestMessage)
{
    var headers = from kvp in httpRequestMessage.Headers
        where kvp.Key.StartsWith("x-ms-", StringComparison.OrdinalIgnoreCase)
        orderby kvp.Key
        select new { Key = kvp.Key.ToLowerInvariant(), kvp.Value };

    StringBuilder headersBuilder = new StringBuilder();

    foreach (var kvp in headers)
    {
        headersBuilder.Append(kvp.Key);
        char separator = ':';

        // Get the value for each header, strip out \r\n if found, then append it with the key.
        foreach (string headerValue in kvp.Value)
        {
            string trimmedValue = headerValue.TrimStart().Replace("\r\n", string.Empty);
            headersBuilder.Append(separator).Append(trimmedValue);

            // Set this to a comma; this will only be used
            // if there are multiple values for one of the headers.
            separator = ',';
        }

        headersBuilder.Append("\n");
    }

    return headersBuilder.ToString();
}

Kanonizovaný prostředek

Tato část řetězce podpisu představuje účet úložiště, na který cílí požadavek. Nezapomeňte, že identifikátor URI požadavku je http://contosorest.blob.core.windows.net/?comp=list, se skutečným názvem účtu (contosorest v tomto případě). V tomto příkladu se vrátí:

/contosorest/\ncomp:list

Pokud máte parametry dotazu, tento příklad obsahuje i tyto parametry. Tady je kód, který také zpracovává další parametry dotazu a parametry dotazu s více hodnotami. Nezapomeňte, že tento kód vytváříte tak, aby fungoval pro všechna rozhraní REST API. Chcete zahrnout všechny možnosti, i když Metoda ListContainers nepotřebuje všechny.

private static string GetCanonicalizedResource(Uri address, string storageAccountName)
{
    // The absolute path will be "/" because for we're getting a list of containers.
    StringBuilder sb = new StringBuilder("/").Append(storageAccountName).Append(address.AbsolutePath);

    // Address.Query is the resource, such as "?comp=list".
    // This ends up with a NameValueCollection with 1 entry having key=comp, value=list.
    // It will have more entries if you have more query parameters.
    NameValueCollection values = HttpUtility.ParseQueryString(address.Query);

    foreach (var item in values.AllKeys.OrderBy(k => k))
    {
        sb.Append('\n').Append(item.ToLower()).Append(':').Append(values[item]);
    }

    return sb.ToString();
}

Teď, když jsou kanonické řetězce nastavené, se podíváme, jak vytvořit autorizační hlavičku samotnou. Začnete vytvořením řetězce podpisu zprávy ve formátu StringToSign dříve zobrazeného v tomto článku. Tento koncept je jednodušší vysvětlit použití komentářů v kódu, takže zde je poslední metoda, která vrátí autorizační hlavičku:

internal static AuthenticationHeaderValue GetAuthorizationHeader(
    string storageAccountName, string storageAccountKey, DateTime now,
    HttpRequestMessage httpRequestMessage, string ifMatch = "", string md5 = "")
{
    // This is the raw representation of the message signature.
    HttpMethod method = httpRequestMessage.Method;
    String MessageSignature = String.Format("{0}\n\n\n{1}\n{5}\n\n\n\n{2}\n\n\n\n{3}{4}",
                method.ToString(),
                (method == HttpMethod.Get || method == HttpMethod.Head) ? String.Empty
                  : httpRequestMessage.Content.Headers.ContentLength.ToString(),
                ifMatch,
                GetCanonicalizedHeaders(httpRequestMessage),
                GetCanonicalizedResource(httpRequestMessage.RequestUri, storageAccountName),
                md5);

    // Now turn it into a byte array.
    byte[] SignatureBytes = Encoding.UTF8.GetBytes(MessageSignature);

    // Create the HMACSHA256 version of the storage key.
    HMACSHA256 SHA256 = new HMACSHA256(Convert.FromBase64String(storageAccountKey));

    // Compute the hash of the SignatureBytes and convert it to a base64 string.
    string signature = Convert.ToBase64String(SHA256.ComputeHash(SignatureBytes));

    // This is the actual header that will be added to the list of request headers.
    AuthenticationHeaderValue authHV = new AuthenticationHeaderValue("SharedKey",
        storageAccountName + ":" + signature);
    return authHV;
}

Při spuštění tohoto kódu bude výsledný MessageSignature vypadat jako v tomto příkladu:

GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:Fri, 17 Nov 2017 01:07:37 GMT\nx-ms-version:2017-07-29\n/contosorest/\ncomp:list

Tady je konečná hodnota pro AuthorizationHeader:

SharedKey contosorest:Ms5sfwkA8nqTRw7Uury4MPHqM6Rj2nfgbYNvUKOa67w=

AuthorizationHeader je poslední hlavička umístěná v hlavičce požadavku před odesláním odpovědi.

To zahrnuje vše, co potřebujete vědět, abyste vytvořili třídu, se kterou můžete vytvořit požadavek na volání rozhraní REST API služby Storage.

Příklad: Výpis objektů blob

Pojďme se podívat, jak změnit kód tak, aby volal operaci List Blobs pro kontejner kontejner-1. Tento kód je téměř identický s kódem pro výpis kontejnerů, jedinými rozdíly jsou identifikátor URI a způsob analýzy odpovědi.

Pokud se podíváte do referenční dokumentace pro ListBlobs, zjistíte, že metoda je GET a requestURI je:

https://myaccount.blob.core.windows.net/container-1?restype=container&comp=list

V seznamu ListContainersAsyncREST změňte kód, který nastaví identifikátor URI na rozhraní API pro ListBlobs. Název kontejneru je kontejner-1.

String uri =
    string.Format("http://{0}.blob.core.windows.net/container-1?restype=container&comp=list",
      storageAccountName);

Tam, kde odpověď zpracujete, změňte kód tak, aby místo kontejnerů hledal objekty blob.

foreach (XElement container in x.Element("Blobs").Elements("Blob"))
{
    Console.WriteLine("Blob name = {0}", container.Element("Name").Value);
}

Při spuštění této ukázky se zobrazí následující výsledky:

Kanonické hlavičky:

x-ms-date:Fri, 17 Nov 2017 05:16:48 GMT\nx-ms-version:2017-07-29\n

Kanonický prostředek:

/contosorest/container-1\ncomp:list\nrestype:container

Podpis zprávy:

GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:Fri, 17 Nov 2017 05:16:48 GMT
  \nx-ms-version:2017-07-29\n/contosorest/container-1\ncomp:list\nrestype:container

Autorizační hlavička:

SharedKey contosorest:uzvWZN1WUIv2LYC6e3En10/7EIQJ5X9KtFQqrZkxi6s=

Fiddlernásledující hodnoty:

Požadavek:

GET http://contosorest.blob.core.windows.net/container-1?restype=container&comp=list HTTP/1.1

Hlavičky požadavku:

x-ms-date: Fri, 17 Nov 2017 05:16:48 GMT
x-ms-version: 2017-07-29
Authorization: SharedKey contosorest:uzvWZN1WUIv2LYC6e3En10/7EIQJ5X9KtFQqrZkxi6s=
Host: contosorest.blob.core.windows.net
Connection: Keep-Alive

Stavový kód a hlavičky odpovědi vrácené po provedení:

HTTP/1.1 200 OK
Content-Type: application/xml
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 7e9316da-001e-0037-4063-5faf9d000000
x-ms-version: 2017-07-29
Date: Fri, 17 Nov 2017 05:20:21 GMT
Content-Length: 1135

Text odpovědi (XML): Tato odpověď XML zobrazuje seznam objektů blob a jejich vlastností.

<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults
    ServiceEndpoint="http://contosorest.blob.core.windows.net/" ContainerName="container-1">
    <Blobs>
        <Blob>
            <Name>DogInCatTree.png</Name>
            <Properties><Last-Modified>Fri, 17 Nov 2017 01:41:14 GMT</Last-Modified>
            <Etag>0x8D52D5C4A4C96B0</Etag>
            <Content-Length>419416</Content-Length>
            <Content-Type>image/png</Content-Type>
            <Content-Encoding />
            <Content-Language />
            <Content-MD5 />
            <Cache-Control />
            <Content-Disposition />
            <BlobType>BlockBlob</BlobType>
            <LeaseStatus>unlocked</LeaseStatus>
            <LeaseState>available</LeaseState>
            <ServerEncrypted>true</ServerEncrypted>
            </Properties>
        </Blob>
        <Blob>
            <Name>GuyEyeingOreos.png</Name>
            <Properties>
                <Last-Modified>Fri, 17 Nov 2017 01:41:14 GMT</Last-Modified>
                <Etag>0x8D52D5C4A25A6F6</Etag>
                <Content-Length>167464</Content-Length>
                <Content-Type>image/png</Content-Type>
                <Content-Encoding />
                <Content-Language />
                <Content-MD5 />
                <Cache-Control />
                <Content-Disposition />
                <BlobType>BlockBlob</BlobType>
                <LeaseStatus>unlocked</LeaseStatus>
                <LeaseState>available</LeaseState>
                <ServerEncrypted>true</ServerEncrypted>
            </Properties>
            </Blob>
        </Blobs>
    <NextMarker />
</EnumerationResults>

Shrnutí

V tomto článku jste zjistili, jak vytvořit požadavek na rozhraní REST API služby Blob Storage. Pomocí požadavku můžete načíst seznam kontejnerů nebo seznam objektů blob v kontejneru. Zjistili jste, jak vytvořit autorizační podpis pro volání rozhraní REST API a jak ho použít v požadavku REST. Nakonec jste se dozvěděli, jak prozkoumat odpověď.

Další kroky