Guardar Secretos en Business Central: IsolatedStorage - Business Central

Breaking

martes, 28 de noviembre de 2023

Guardar Secretos en Business Central: IsolatedStorage

 Desarrollo

Isolated Storage

A veces, necesitamos almacenar información en Business Central que no esté accesible desde otras aplicaciones, por ejemplo password, urls, API Keys,...


En versiones on-Premise, para almacenar esa información, tenemos disponible la tabla de sistema Isolated Storage.  Una tabla que mantiene la información segura, sin posibilidad de leerla desde otra aplicación que no sea la nuestra.  


Aunque si queremos usar esa tabla en versiones online, no nos deja puesto que tiene ámbito de OnPrem.

En versión SaaS, gestionamos la información mediante el tipo de datos IsolatedStorage.

Tipo de datos IsolatedStorage

Se almacenan pares de key-value.

Los valores key son de tipo texto y los Value se almacenan en Blob


Métodos del tipo de datos IsolatedStorage


El tipo de datos Isolated Storage tiene los siguientes métodos:


Contains:  Permite preguntar sin disponemos en una clave (key) indicada.

Delete: Permite borrar una clave indicada.

Get: Obtiene el valor asociado a una clave indicada almacenada en Isolated Storage.  

Set:  Permite guardar una clave - valor en Isolated Storage

SetEncrypted:  Igual que el set, pero guarda el value encriptado (limita la longitud del valor a 215 caracteres de texto plano.  El método Get desencripta automáticamente el valor.  

En el caso de Business Central online, la encriptación está siempre habilitada.


En todos los métodos, disponemos del parámetro opcional DataScope que puede ser uno de los siguientes:

Module:   Indica que el registro sólo está accesible dentro de la misma extensión.

Company:  Indica que el registro sólo está accesible dentro de la misma empresa

User:  Indica que el registro sólo está accesible para un usuario en una extensión.

CompanyAndUser:  Indica que el registro está accesible para un usuario y una empresa.


Ejemplo de uso

Imagina que tienes que usar una API-KEY y un endPoint para acceder a tu Azure Open AI.  Tendremos que introducir dichos valores, pero no queremos que se almacenen en una tabla y que luego pudiesen ser obtenidos desde otra aplicación para acceder a nuestro Azure.

Utilizaríamos una codeunit para gestionar los valores:




¿Que ocurre si intentamos leer la información desde otra extensión?  El sistema nos mostrará un error de que no encuentra la key-value.  


¿Y si creamos una dependencia?  Podríamos acceder a los métodos creados en mi codeunit y obtener los valores. 😒


Por tanto, no estaríamos ocultando nuestros datos perdiendo la seguridad.

Para solucionar este problemilla, lo que haremos será marcar la codeunit que contiene los métodos de acceso a Isolate Storage como interna.


De esa forma, otras extensiones no pueden acceder a los métodos de la codeunit.👍



Documentación

Puedes acceder a la documentación oficial de Isolate Storage desde aquí:

Microsoft Learn Propiedad Access


Espero que Isolate Storage te pueda ayudar a mantener tus "secretos" a salvo en Business Central.

Aquí tienes el video por si te ayuda a verlo funcionar:


Si te ha parecido interesante, puedes invitarme a un café 😇

Gracias

No hay comentarios: