Power Automate: Escode palabra secreta en Graph Call con Tracked Properties

Hablemos un poco de las Tracked Properties en Power Automate y su utilidad para esconder secretos en partes clave.

Llamar APIs desde Power Automate es una de las funciones clave usada por usuarios más experimentados ya que permite aprovechar datos desde la nube y hacer cosas útiles con los mismos. Es más común de lo que parece, pues esto ayuda con la creación de procesos automatizados vinculados a Office 365, SharePoint y Azure, aplicaciones que tarde o temprano deberemos integrar a nuestro espacio de trabajo. Dentro de la comunidad de Automate existe un problema o, mejor dicho, una pregunta que va más o menos de la siguiente manera:

¿Por qué puedo ver el cliente-secreto como texto en el campo «Secret»?

A lo que esto se refiere es que si compartiéramos nuestro Flujo con otros usuarios, ellos también tendrían el cliente-secreto. Esto entonces lleva a la pregunta de por qué ese campo no es del tipo «password» para que así el valor no sea mostrado como un valor de texto. Esto significa que el secreto puede ser re-usado, lo cual representa un problema de seguridad.

Este es un punto válido, aunque estos campos no son campos de contraseña ya que son capaces de tomar datos dinámicos y expresiones, por lo cual es probable que esta sea la razón por la cual sean del modo que son. No hay forma obvia de esconder datos en Automate, pero esto no significa que no haya forma.

Tracked Properties para valores invisibles.

Lo que vamos a ver ahora es una forma para esconder valores y para este ejemplo lo vamos a usar en un Graph Call. Antes de continuar se asumirá que ya tienes una App existente en el Azure Active Directory en V1.0.

Aquí tenemos el Flujo:

Power Automate Tracked Properties 1

Como podemos ver, hay una acción Compose y su valor de entrada se encuentra en blanco, y si miramos a la petición HTTP todos los valores se encuentran con un valor. Aun no hemos hablado sobre esto, pero como podemos ver, los campos Authority, Tenant, Audience, Client ID y Secret tienen algo como sus valores.

Cuando corremos el Flujo, ocurrirá esto:

Función action en Power Automate

Para poder entender mejor lo que ocurre aquí, primero vamos a darle un vistazo a action() en la «Guía de referencia para funciones en expresiones para Azure Logic Apps y Power Automate».

Esto significa que las (un tanto) ocultas «Propiedades Rastreadas» pueden ser utilizadas y regresadas en nuestro Flujo. Este es el método: cuando damos click en los tres puntos «…» de «Compose BlankVariable» elegimos los ajustes y, cuando hacemos esto, veremos las «Propiedades Rastreadas». Usaremos la siguiente expresión con las cosas que queramos esconder:

@concat('<Your Expression or String>', action().outputs)

Mi ejemplo será con algunos de los valores Xd y Yd para seguridad de mis datos.

@concat('586XXXd6-XXXX-YYYY-XXXX-1d15a8XXX6d5', action().outputs)

Básicamente me encuentro concatenando una secuencia de texto con «action().outputs» y eso se encuentra en blanco en este momento. No hay valor en el Compose del frente y el Flujo trabaja mejor al dejarlo de esa forma cuando hay «Propiedades Rastreadas» ocupadas. Esta es parte de la magia detrás de esconder los datos.

Power Automate Tracked Properties 2

Extrayendo los valores de las propiedades.

Los valores dentro de Authority y Audience no son privados, aunque aun así prefiero cargarlos en esta forma, por lo que aquí tenemos la expresión usada en cada uno.

Authority:
@concat('https://login.microsoft.com/', action().outputs)
Audience:
@concat('https://graph.microsoft.com', action().outputs)

Llenaremos lo que queramos esconder, así una vez que corramos el Flujo con solo un botón y las acciones «Compose» por ahora (no hará falta añadir HTTP de momento), veremos la siguiente salida de «BlankVariable».

Pero entonces, ¿con qué estamos trabajando exactamente si la salida es un valor en blanco? Para responder esto consideremos cada expresión usada dentro de la acción HTTP mostrada arriba.

TenantID:
actions('Compose_BlankVariable').trackedProperties['TenantID']
ClientID:
actions('Compose_BlankVariable').trackedProperties['ClientID']
SecretID:
actions('Compose_BlankVariable').trackedProperties['SecretID']
Authority:
actions('Compose_BlankVariable').trackedProperties['Authority']
Audience:
actions('Compose_BlankVariable').trackedProperties['Audience']

Referenciar los links a la referencia WDL nos ayudará a entender el método de crear estas expresiones, pero seremos capaces de copiar y pegar lo que se encuentra arriba en este ejemplo. Como podemos ver, estoy haciendo un Microsoft Graph Call bastante simple y abajo nos muestra que regresó los datos de manera exitosa.

Si no tienes Graph para probarlo, puedes usar en su lugar una variable de tipo objeto y ver los resultados.

Power Automate Tracked Properties 3

Con esto ahora podemos hacer más y esconder muchas más Tracked Properties cuando estamos creando y planeando nuestros Flujos en Power Automate.

Cualquier duda nos leemos abajo.

Power Automate: Escode palabra secreta en Graph Call con Tracked Properties
Scroll hacia arriba