Exportar (0) Imprimir
Expandir Tudo

Criação e uso de uma assinatura de acesso compartilhado

Atualizado: janeiro de 2015

Uma assinatura de acesso compartilhado é um URI que concede direitos de acesso restritos a contêineres, blobs, filas e tabelas por um intervalo de tempo específico. Ao fornecer a um cliente assinatura de acesso compartilhado, você pode permitir que ele acesse recursos em sua conta de armazenamento sem compartilhar a chave da conta com ele.

noteObservação
Para uma visão geral e um tutorial em detalhe sobre as assinaturas de acesso compartilhado, consulte Assinaturas de Acesso Compartilhado.

As operações com suporte que usam assinaturas de acesso compartilhado incluem:

  • A leitura e a gravação de página ou conteúdo de blob de bloco, lista de bloqueio, propriedades e metadados

  • Exclusão, aluguel e criação de um instantâneo de um blob

  • Listagem dos blobs em um contêiner

  • Adição, remoção, atualização e exclusão de mensagens de fila (na Biblioteca de Cliente de Armazenamento 2.0 e mais recente)

  • Obtenção dos metadados da fila, incluindo a contagem de mensagens (na Biblioteca de Cliente de Armazenamento 2.0 e mais recente)

  • Consulta, adição, atualização, exclusão, além de atualização e inserção de entidades de tabela (na Biblioteca de Cliente de Armazenamento 2.0 e mais recente)

Os parâmetros de consulta do URI da assinatura de acesso compartilhado incorporam todas as informações necessárias para conceder acesso controlado a um recurso de armazenamento. Os parâmetros de consulta do URI especificam o intervalo de tempo pelo qual a assinatura de acesso compartilhado é válida, as permissões que ela concede, o recurso que deve ser disponibilizado, bem como a assinatura que os serviços de armazenamento devem usar para autenticar a solicitação.

Além disso, o URI da assinatura de acesso compartilhado pode fazer referência a uma política de acesso armazenada que fornece um nível de controle adicional sobre um conjunto de assinaturas, incluindo a capacidade de modificar ou revogar acesso ao recurso, se necessário. Para obter mais informações sobre políticas de acesso armazenado, consulte Usar uma política de acesso armazenada.

Para obter informações sobre o formato do URI de uma assinatura de acesso compartilhado, consulte Delegando acesso com uma assinatura de acesso compartilhado.

Uma assinatura de acesso compartilhado concede acesso ao recurso especificado pelas permissões concedidas do URI. Você deve sempre usar HTTPS para construir um URI de assinatura de acesso compartilhado. Usar HTTP com assinaturas de acesso compartilhado pode tornar sua conta de armazenamento vulnerável ao uso mal-intencionado.

Se uma assinatura de acesso compartilhado conceder acesso que não é destinado ao público em geral, ela deverá ser construída com o menor número possível de permissões. Além disso, uma assinatura de acesso compartilhado deve ser distribuída seguramente aos clientes por uma conexão segura, deve ser associada a uma política de acesso armazenada para fins de revogação e deve especificar o tempo de vida mais curto possível para a assinatura.

ImportantImportante
Um URI de assinatura de acesso compartilhado é associado à chave da conta para criar a assinatura e à política de acesso armazenada associada (se houver). Se nenhuma política de acesso armazenada for especificada, a única maneira de revogar uma assinatura de acesso compartilhado é alterar a chave de conta.

O exemplo de código a seguir cria uma política de acesso em um contêiner e gera uma assinatura de acesso compartilhado para o contêiner. Esta assinatura de acesso compartilhado pode ser oferecida a clientes:

// The connection string for the storage account.  Modify for your account.
string storageConnectionString =
   "DefaultEndpointsProtocol=https;" +
   "AccountName=myaccount;" +
   "AccountKey=<account-key>";

// As an alternative, you can retrieve storage account information from an app.config file. 
// This is one way to store and retrieve a connection string if you are 
// writing an application that will run locally, rather than in Windows Azure.

// string storageConnectionString = ConfigurationManager.AppSettings["StorageAccountConnectionString"];

// Create the storage account with the connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);
                                               
// Create the blob client object.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Get a reference to the container for which shared access signature will be created.
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
container.CreateIfNotExists();

// Create blob container permissions, consisting of a shared access policy 
// and a public access setting. 
BlobContainerPermissions blobPermissions = new BlobContainerPermissions();

// The shared access policy provides 
// read/write access to the container for 10 hours.
blobPermissions.SharedAccessPolicies.Add("mypolicy", new SharedAccessBlobPolicy()
{
   // To ensure SAS is valid immediately, don’t set start time.
   // This way, you can avoid failures caused by small clock differences.
   SharedAccessExpiryTime = DateTime.UtcNow.AddHours(10),
   Permissions = SharedAccessBlobPermissions.Write |
      SharedAccessBlobPermissions.Read
});

// The public access setting explicitly specifies that 
// the container is private, so that it can't be accessed anonymously.
blobPermissions.PublicAccess = BlobContainerPublicAccessType.Off;

// Set the permission policy on the container.
container.SetPermissions(blobPermissions);

// Get the shared access signature to share with users.
string sasToken =
   container.GetSharedAccessSignature(new SharedAccessBlobPolicy(), "mypolicy");

Um cliente que recebe uma assinatura de acesso compartilhado pode usá-la a partir do seu código para construir um objeto de tipo StorageCredentials. Essas credenciais podem ser usadas para construir um objeto CloudStorageAccount ou CloudBlobClient para trabalhar com o recurso, conforme mostrado neste exemplo:

Uri blobUri = new Uri("https://myaccount.blob.core.windows.net/mycontainer/myblob.txt");
            
// Create credentials with the SAS token. The SAS token was created in previous example.
StorageCredentials credentials = new StorageCredentials(sasToken);

// Create a new blob.
CloudBlockBlob blob = new CloudBlockBlob(blobUri, credentials);

// Upload the blob. 
// If the blob does not yet exist, it will be created. 
// If the blob does exist, its existing content will be overwritten.
using (var fileStream = System.IO.File.OpenRead(@"c:\Test\myblob.txt"))
{
    blob.UploadFromStream(fileStream);
}

Consulte também

Mostrar:
© 2015 Microsoft