Error 403 al intentar OBTENER https://graph.microsoft.com/v1.0/me en Power Automate Flow

1

Estoy intentando acceder a la API de Microsoft Graph a través de Power Automate Flow.

Creé un 'Registro de aplicación' en Azure AD y configuré lo que creo que deberían ser los permisos de API requeridos para la solicitud GET que estoy intentando.

En Power Automate, estoy usando el enfoque en el que genera un token de acceso y luego lo pasa en el encabezado de las solicitudes posteriores.

Genera el token de acceso bien, pero produce un error 403 al intentar OBTENER:

 https://graph.microsoft.com/v1.0/me

He estado investigando esto durante varias horas y encontré sugerencias para ir a https://jwt.ms y pegar el token de acceso, pero cuando hago eso, no sé qué debería estar buscando.

Error al ejecutar el flujo activado manualmente:

Error de acción 'HTTP'

Privilegios insuficientes para completar la operación.

Código de estado: 403

Permisos de API en Azure AD

ingrese la descripción de la imagen aquí

Estos son los documentos que especifican qué permisos se requieren para la solicitud GET relevante, es decir:

Delegated (work or school account)  User.Read, User.ReadWrite, User.ReadBasic.All, User.Read.All, User.ReadWrite.All, Directory.Read.All, Directory.ReadWrite.All, Directory.AccessAsUser.All

Autenticación en Power Automate Flow

ingrese la descripción de la imagen aquí

Solicitud en Power Automate Flow

ingrese la descripción de la imagen aquí

Los valores de texto de las capturas de pantalla anteriores se encuentran a continuación en caso de que alguien quiera intentar replicar:

Solicitud de autenticación HTTP:

https://login.microsoftonline.com/@{variables('tenant_id')}/oauth2/token

Content-Type   application/x-www-form-urlencoded

[email protected]{variables('application_id')}&[email protected]{variables('secret_value')}&resource=https://graph.microsoft.com&grant_type=client_credentials

Solicitud HTTP GET:

URI:  https://graph.microsoft.com/v1.0/me

Authorization     Bearer @{body('Parse_JSON')?['access_token']} 

Actualizar:

No sé si esta es la respuesta correcta o no, pero creo que Power Automate podría requerir Applicationpermisos en lugar de Delegatepermisos en el área de registro de la aplicación de Azure.

La siguiente investigación me lleva a esta conclusión:

01) https://www.youtube.com/watch?v=VJWFzdy2c4E&t=242s
agrega Applicationpermisos y no Delegatepermisos

02)

You are obtaining a token via the confidential client flow, meaning you not running in the context of a user. Thus you should not be using the /me endpoint, but /users/objectID one...Or obtain a token via some of the delegate permissions flows. Source

Por lo tanto, cambié a Applicationpermisos, llamé a este punto final, y funcionó bien:

https://graph.microsoft.com/v1.0/users   

Si los Applicationpermisos son el mejor (¿o el único?) Enfoque al acceder a Microsoft Graph desde Power Automate, no lo sé (¿tal vez el método que utilicé para autenticar impuso el uso de Applicationpermisos?). Me gusta la idea de asegurarme de que el flujo solo realice acciones que el usuario que activa el flujo puede realizar, pero meh, al menos algo está funcionando al final del día.

1
  • 1
    Cuando llama al /mepunto final, solicita los detalles del usuario que inició sesión. ¿Vio la pantalla de inicio de sesión de AAD en algún momento? Si no es así, significa que no ha iniciado sesión. 3 de julio a las 14:04
2

Está utilizando el flujo de credenciales de cliente, que requiere los permisos de la aplicación, también conocidos como No hay usuario registrado . El flujo de credenciales del cliente se usa para tareas que no necesitan la interacción del usuario, como aplicaciones del lado del servidor, demonios, tareas en segundo plano como la automatización de energía.

Con el token adquirido del flujo de credenciales del cliente, no puede llamar a / me / .. porque estos puntos finales requieren un usuario conectado como @ hong-ooi ha señalado - Explica el 403 .

En su caso, deberá agregar permisos de aplicación en lugar de delegarlos y luego llamar a GET https://graph.microsoft.com/v1.0/{userId | unpn} en lugar de GET https://graph.microsoft.com/v1.0/me . Nota / me se traduce como / user / {userId | Unpn} para ti.