En esta ocasión el Post estará orientado a las firmas de acceso compartido (SAS), estas ofrecen una manera de conceder acceso limitado y seguro a los objetos o recursos de la cuenta de almacenamiento sin compartir las claves de la cuenta.

La aplicación que contiene las claves SaS generan un token de acceso a la cuenta de Azure Storage. Dicha clave de acceso es temporal y administra los permisos de acceso a la cuenta, por lo que la aplicación nunca tendrá acceso a la cuenta de Azure Storage completa, solamente a lo que nosotros deseemos limitar:

  • El intervalo durante el que la SaS es válida, incluida la hora de inicio y la hora de caducidad.
  • Los permisos concedidos por la SaS, tales como los de escritura, lectura o eliminación, según usemos Blob, Table o File.
  • Una dirección IP opcional o un intervalo de direcciones IP de las que Azure Storage aceptará la SAS.
  • El protocolo a través del cual Azure Storage aceptará la SAS. Puede usar este parámetro opcional para restringir el acceso a los clientes mediante HTTPS.

Para poder explicar las claves SaS en esta ocasión vamos a utilizar Azure Table Storage, estas tablas funcionan de forma diferente a las tablas relacionales de las BBDD, es decir, el servicio es un almacén de datos NoSQL que acepta llamadas autenticadas desde dentro y fuera de la nube de Azure.

Los contenidos de cualquier tabla son los siguientes:

  • Tabla: una tabla es una colección de entidades. Las tablas no exigen un esquema sobre entidades, lo que significa que una única tabla puede contener entidades que dispongan de diferentes conjuntos de propiedades. Estas constan de dos campos obligatorios:
    • PartitionKey es la primera propiedad de una entidad, el sistema la utiliza para distribuir la información entre nodos.
    • RowKey es la segunda propiedad de la entidad, es el identificador único de la entidad dentro de la partición.
  • Entidad: una entidad es un conjunto de propiedades, similar a una fila de base de datos. Una entidad en Azure Storage puede tener hasta 1 MB. Una entidad en Azure Cosmos DB puede tener hasta 2 MB.
  • Propiedades: una propiedad es un par nombre-valor. Cada entidad puede incluir hasta 252 propiedades para almacenar datos. Cada entidad dispone también de tres propiedades del sistema que especifican una clave de partición, una clave de fila y una marca de tiempo. Pueden realizarse consultas en las entidades con la misma partición de manera más rápida e insertarse o actualizarse en operaciones atómicas. Una clave de fila de la entidad es el identificador exclusivo en una partición.

Una vez terminada esta pequeña explicación sobre las claves SaS pasaremos a crearnos un proyecto al que añadiremos permisos de lectura y eliminación sobre una Table Storage.

Proyecto

Antes de empezar a trabaja sobre los permisos SaS debemos tener datos sobre los que trabajar, por lo tanto, se debe crea una Table Storage en Azure. Aunque podamos crear una tabla directamente desde el Portal de Azure no podremos meter información en ella, para ello tenemos dos opciones.

  • Utilizando Microsoft Azure Storage Explorer, que es una aplicación de escritorio que permite crear tablas pudiendo ver toda su información, añadir entidades, modificarlas y eliminarlas.

4s

3s

  • El segundo método es a través de Código que consiste en migran por ejemplo un XML a Azure como Table Storage.

Migración XML

En esta ocasión se hará por el segundo método, por lo que tendremos que crear una aplicación MVC.

Una vez creada la aplicación lo primero que deberemos hacer será añadir los paquetes NuGet WindowsAzure.Storage y Microsoft.WindowsAzure.ConfigurationManager.

El siguiente paso es añadir un XML con la estructura de la tabla. La estructura del XML utilizado en este proyecto es la siguiente:

<>

<>

<>

<>

<>

<>

<>

<>

<>

Después de tenerlo listo se añade a nuestro proyecto.

10s

Para poder utilizar coches.xml se debe poner la acción de compilación en recurso incrustado, para ello seleccionamos el XML y pinchamos sobre propiedades.

11s

Para poder conectarnos con la cuenta Storage de Azure debemos añadir en Web.config, dentro de las etiquetas appSettings, nuestra clave de conexión. En caso de no tener cuenta de almacenamiento se deberá crear una.

6s

Cuando ya este creada lo único que hay que hacer es copiar la clave de acceso.

12s

13s

La key es el nombre que se usara luego para identificar la clave.

En caso de no disponer de una cuenta Azure o simplemente no querer gastar créditos, se puede utilizar Microsoft Azure Storage Emulator.

14s

En esta situación al no disponer de clave de acceso en Web.config se deberán añadir las siguientes líneas:

15s

Una vez finalizados los primeros pasos se creará el código necesario para crear la Tabla Storage y rellenarla con los datos del XML. En primer lugar, hay que crear una clase Coches, que heredará de TableEntity, que nos permitirá utilizar Rowkey y PartitionKey.

16s

Crearemos también dentro de la carpeta Models la clase ModeloCoches, que será la encargada de crear la tabla en caso de que no exista.

17s

Para comprobar que los datos, podemos utilizar la aplicación mencionada antes Microsoft Azure Storage Explorer.

API

El siguiente paso será crearnos una API que nos dará acceso a los datos. Aquí será donde apliquemos los permisos.

Crearemos una aplicación Web vacía y de tipo Web Api. Cuando ya este creada repetimos los mismos pasos que hicimos en la parte anterior. Añadir los paquetes NuGet WindowsAzure.Storage y Microsoft.WindowsAzure.ConfigurationManager y dentro de nuestra Web.config clave de acceso.

13s

En primer lugar, nos crearemos un TokenContoller dentro de la carpeta Controllers, que contendrá un método que recibirá la marca de coche para hacer la búsqueda, a este método le ponemos una ruta personalizada y le indicamos que será de tipo GET.

18s

Por último, creamos la clase ModeloToken que será donde recuperemos la tabla y donde demos los permisos para la recuperación de datos y su eliminación.

19s

Al ejecutar la Api no obtendremos los coches sino un token que será el que recuperemos en el cliente para dar permisos de acceso a nuestra cuenta de almacenamiento (Azure Table Storage).

20s

Cliente

La tercera parte de este proyecto es el cliente, el encargado de consumir los datos de Table Storage. Para ello crearemos MVC, cuyos primeros pasos serán los mismos de la primera y segunda parte, a excepción de añadir dentro del Web.config la clave de acceso, ya que estamos recibiendo el token que es el que nos va a dar permisos para acceder. Por tanto, solo añadimos los paquetes NuGet WindowsAzure.Storage y Microsoft.WindowsAzure.ConfigurationManager.

Para poder leer en nuestra aplicación los datos vamos a necesitar una clase Coches que herede de TableEntity.

21s

En este caso no utilizamos las palabras RowKey o Partitionkey, sin embargo, si no hacemos que la clase Coches herede de TableEntity no podremos ejecutar ninguna operación sobre la tabla dándonos lugar a un error de conversión.

22s

Para poder recuperar el Token de la API deberemos crearnos una clase ModeloCoches e implementar un método que lo recupere a través de la URL.

24s

El siguiente método es el que recuperará la tabla, para lo cual necesitaremos la uri de nuestra cuenta de almacenamiento, la cual se encuentra seleccionando los servicios de Tablas y en Punto de conexión de servicio Tabla secundario.

7s

Después en nuestro método recuperamos nuestras credenciales con el token. Con las credenciales y la uri podremos obtener el cliente para poder recuperar la tabla.

Haremos que este método recupere el token del anterior y así poderlo ver de forma clara y para realizar las operaciones simplemente tendremos que llamar a este método.

25s

A continuación, pasaremos a los métodos de acción (buscar por marca y eliminar coche).

Para poder recuperar los coches por marcas deberemos crearnos un método que devuelva una lista de coches y que reciba del controlador la marca del coche a buscar.

26s

El siguiente método será para eliminar un coche y recibiremos la marca y el id del coche (RowKey) para poder eliminar por este, ya que tal como lo tengo en la tabla el id no se repite. En caso de que si se pudiese repetir deberíamos usar como id el conjunto de PartitionKey y RowKey.

27s

Ahora hay que crear un controlador para poder utilizar los métodos anteriores, llamado CochesContoller, en este controlador vamos a necesitar un Index que tendrá una vista y un Delete sin vista.

En Index vamos a recuperar la marca escrita a buscar por el usuario y comprobar si la lista devuelta por el método BuscarMarca está vacía o no.

28s

Para crear la vista simplemente pinchamos con el clic derecho sobre Index y le damos a agregar vista.

29s

De la vista eliminamos lo que es innecesario.

30s
31s

Por último, añadimos el ActionResult de Delete que al no tener vista debe redireccionar a Index, pasándole la marca del coche que se ha eliminado y poder volver a mostrar la lista sin el coche eliminado.

32s

En caso de hacer otra acción en nuestro Cliente que no tenga permisos en la API nos dará el siguiente error.

5s

Una vez terminado todo solo queda ejecutar la API y luego el Cliente

33s

Autor: Mohamed Oulghazi

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin

Centro: Tajamar

Año académico: 2017-2018

GuitHub: https://github.com/Mohamed94/PermisosSaSTable

Linkedin: https://www.linkedin.com/in/mohamed-oulghazi/

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.