Exportar (0) Imprimir
Expandir todo

Autenticar el acceso a la cuenta de almacenamiento de Windows Azure

Actualizado: febrero de 2014

Todas las solicitudes que realice a los servicios de almacenamiento de Windows Azure deben estar autenticadas aunque se trate de una solicitud anónima para un recurso de contenedor o sus blobs. Las bibliotecas administradas de Windows Azure simplifican este proceso de autenticación automáticamente. Hay dos maneras de autenticar una solicitud en los servicios de almacenamiento:

  • Mediante el uso de los esquemas de autenticación Shared Key o Shared Key Lite para los recursos de los servicios Blob, Cola y Tabla. Estos esquemas de autenticación utilizan un HMAC calculado con el algoritmo SHA-256 y codificado como Base64. El HMAC se genera a partir de un conjunto de campos relativos a la solicitud. Para obtener detalles sobre el protocolo, vea Autenticación para los servicios de almacenamiento de Windows Azure.

  • Mediante la creación de una firma de acceso compartido. Una firma de acceso compartido incorpora las credenciales necesarias para la autenticación en el URI de forma segura, junto con la dirección del recurso al que se obtiene acceso. Dado que la firma de acceso compartido incluye todos los datos necesarios para la autenticación en el URI, se puede usar para conceder acceso controlado a un recurso en el servicio Blob, Cola o Tabla y se puede distribuir independientemente del código. Para obtener detalles sobre el protocolo, vea Delegar el acceso con una firma de acceso compartido (API de REST).

Como se ha indicado anteriormente, puede especificar que un contenedor sea público, en cuyo caso todas las operaciones de lectura en el contenedor y cualquiera de sus blobs estarán disponibles para el acceso anónimo. No es necesario autenticar las solicitudes anónimas, por lo que un usuario puede realizar la operación sin proporcionar las credenciales de la cuenta. Vea Acceso restringido a contenedores y blobs para obtener detalles sobre cómo administrar el acceso a los contenedores y a los blobs.

La biblioteca administrada de Windows Azure .NET proporciona algunas clases de clave para autenticar el acceso a la cuenta de almacenamiento:

  • La clase CloudStorageAccount representa la cuenta de almacenamiento de Windows Azure.

  • La clase StorageCredentials almacena dos tipos de credenciales diferentes que se pueden utilizar para autenticar una solicitud: un nombre y una clave de acceso para una cuenta de almacenamiento, que se pueden utilizar para autenticar solicitudes a través de los esquemas de autenticación Shared Key y Shared Key Lite o de una firma de acceso compartido.

  • Las clases CloudBlobClient, CloudQueueClient y CloudTableClient proporcionan un punto de entrada para la jerarquía de recursos para el servicio Blob, el servicio Cola y el servicio Tabla, respectivamente. Es decir, para trabajar con contenedores y blobs, habrá que crear un objeto CloudBlobClient; para trabajar con colas y mensajes, un CloudQueueClient; y para trabajar con tablas y entidades, un CloudTableClient. El objeto cliente se puede crear directamente, para lo cual hay que proporcionar el extremo del servicio y un conjunto de credenciales o puede crearse a partir de un objeto CloudStorageAccount llamando a uno de los siguientes métodos: CreateCloudBlobClient, CreateCloudQueueClient o CreateCloudTableClient. Estos métodos permiten devolver un objeto cliente para uno o más servicios desde un objeto CloudStorageAccount definido con un único conjunto de credenciales.

    Tenga en cuenta que para tener acceso a un contenedor o un blob de forma anónima, no es necesario crear CloudStorageAccount o un objeto cliente. No se necesita autenticación para el acceso anónimo, con lo cual puede tener acceso al recurso directamente. Solo se admiten ciertas operaciones de lectura (mediante HTTP GET) con acceso anónimo.

Puede utilizar la propiedad CloudStorageAccount.DevelopmentStorageAccount para devolver un objeto CloudStorageAccount que haga referencia a una cuenta conocida del emulador de almacenamiento.

Esta propiedad resulta de utilidad cuando se escribe código que solamente utilizará el emulador de almacenamiento, pero si quiere que el código señale a una cuenta de almacenamiento de Windows Azure cuando haya terminado las pruebas con el emulador de almacenamiento, puede utilizar una cadena de conexión. Puede modificar rápidamente la cadena de conexión para alternar entre cuentas de almacenamiento sin modificar el código; vea Configurar las cadenas de conexión de Windows Azure para obtener más información.

La manera más sencilla para obtener acceso a una cuenta de almacenamiento de Windows Azure desde el código es crear un nuevo objeto CloudStorageAccount, para lo cual hay que facilitar el nombre y clave de acceso para la cuenta de almacenamiento en forma de objeto StorageCredentials e indicar si el acceso a la cuenta será mediante HTTP o HTTPS. Las solicitudes realizadas a través de este objeto CloudStorageAccount o de alguno de sus objetos derivados utilizarán estas credenciales para la autenticación.

Este objeto CloudStorageAccount utiliza los extremos predeterminados para los servicios de almacenamiento. Los extremos predeterminados del servicio son myaccount.blob.core.windows.net, myaccount.queue.core.windows.net y myaccount.table.core.windows.net, donde myaccount es el nombre de la cuenta de almacenamiento.

El ejemplo de código siguiente muestra cómo crear un objeto CloudStorageAccount nuevo mediante una referencia al nombre y clave de acceso de la cuenta. A continuación, se crea un objeto CloudBlobClient nuevo, seguido de un nuevo contenedor:


// Account name and key.  Modify for your account.
string accountName = "myaccount";
string accountKey = "SzlFqgzqhfdk594cFoveYqCyvl8v9EESAnOLcTCeBIo31p46rJJRZx/5vU/oY3ZsK/VdFNaVpm6G8YSD2K48Nw==";

//Get a reference to the storage account, with authentication credentials
StorageCredentials credentials = new StorageCredentials(accountName, accountKey);
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);

//Create a new client object.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve a reference to a container. 
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");

// Create the container if it does not already exist.
container.CreateIfNotExists();

// Output container URI to debug window.
System.Diagnostics.Debug.WriteLine(container.Uri);

También puede tener acceso a una cuenta de almacenamiento explícitamente especificando los extremos del servicio. Este enfoque es útil en dos situaciones:

  • Cuando tiene acceso a una cuenta de almacenamiento mediante una firma de acceso compartido.

  • Si ha configurado un dominio personalizado para su cuenta de almacenamiento y desea usar esos extremos personalizados para tener acceso a la cuenta. Observe que los extremos predeterminados siguen estando disponibles además de los extremos personalizados.

Una firma de acceso compartido es una forma de proporcionar acceso controlado a los recursos de la cuenta de almacenamiento para otros clientes. La firma de acceso compartido incorpora información sobre el recurso al que se va a tener acceso, los permisos que se van a conceder, el intervalo para el que el recurso está disponible y la directiva de acceso del contenedor, en su caso. A efectos de autenticación, esta información se encapsula en un cadena para firmar que está codificada como UTF-8 y, después, se genera una firma con el algoritmo HMAC-SHA256. La firma forma parte de un token que los clientes pueden usar para tener acceso al recurso. Por ejemplo, un cliente puede utilizar una firma de acceso compartido para crear o eliminar un blob en la cuenta de almacenamiento, operaciones a las que no se tendría acceso si el contenedor estuviera marcado como público solamente. Para obtener más información sobre las firmas de acceso compartido, vea Delegar el acceso con una firma de acceso compartido (API de REST).

Vea también

Mostrar:
© 2014 Microsoft