Power Bi REST API: error de autorización 401 al usar el secreto de la aplicación

Un usuario Pregunto ✅

triple efecto

Tengo una aplicación de consola que usa la API REST para obtener un conjunto de datos (y luego agregarle filas). Esto funciona cuando proporciono mis propias credenciales de usuario / contraseña.

Ahora he registrado la aplicación como una aplicación web / API para usar una clave / secreto de aplicación en su lugar. Puedo obtener un token, pero cuando hago la misma llamada REST obtengo 401 No autorizado.

Le he dado a la aplicación los siguientes permisos de aplicación en el servicio Power BI (¿es necesario?):

Leer y escribir todo el contenido en inquilino

Ver todo el contenido del inquilino

Estos permisos han sido otorgados por un administrador de Azure.

Además de los permisos delegados que funcionaban con la autenticación de usuarios:

Leer y escribir todos los conjuntos de datos

Ver todos los conjuntos de datos

He decodificado los dos tokens.

El token para la autenticación de la clave de la aplicación contiene esto:

«roles»: [
«Tenant.ReadWrite.All»,
«Tenant.Read.All»
],

mientras que el token para la autenticación basada en el usuario contiene esto:

«scp»: «Conjunto de datos.ReadWrite.All Workspace.ReadWrite.All»,

Qué me estoy perdiendo..?

En respuesta a triple efecto

Hola @tripleacoder,

Hasta donde yo sé, los permisos de Power BI se basan todos en los usuarios. Por tanto, una aplicación no puede actuar como usuario. Consulte desarrollador / power-bi-permissions donde todas las descripciones tienen «usuario».

Con respecto a «Tenant.ReadWrite.All», la documentación anterior también tiene una descripción. En realidad, estos permisos solo pueden recuperar los perfiles en lugar de los datos. Consulte admin / reports_getreportsasadmin.

Una prueba simple que podemos ver es que incluso un administrador no puede acceder a todos los espacios de trabajo de la aplicación. Los datos son el activo precioso de una empresa. Creo que esto es razonable.

Atentamente,
Valle

ironmanwk

Mi compañero de equipo ha estado intentando que la API REST también funcione, pero también encuentra el mismo mensaje de error 401. ¿Sigue siendo un problema en curso o hay una solución que podemos aplicar?

ChrisPr

¿Por qué el código de muestra para el escenario de ‘la aplicación posee datos’ incrustados de power bi usa la ruta de las credenciales del cliente cuando no es compatible?

RashmiRaut

Hola a todos,

También estoy obteniendo el mismo error al acceder a las API de descanso de Power BI. Puedo generar token pero no seguir adelante. ¿Puede pegar su código, que se ejecutó con éxito sin incluir todos los ID de tennat, el nombre de usuario y la contraseña?

Gracias y Saludos


@tripleacoder escribió:

Tengo una aplicación de consola que usa la API REST para obtener un conjunto de datos (y luego agregarle filas). Esto funciona cuando proporciono mis propias credenciales de usuario / contraseña.

Ahora he registrado la aplicación como una aplicación web / API para usar una clave / secreto de aplicación en su lugar. Puedo obtener un token, pero cuando hago la misma llamada REST obtengo 401 No autorizado.

Le he dado a la aplicación los siguientes permisos de aplicación en el servicio Power BI (¿es necesario?):

Leer y escribir todo el contenido en inquilino

Ver todo el contenido del inquilino

Estos permisos han sido otorgados por un administrador de Azure.

Además de los permisos delegados que funcionaban con la autenticación de usuarios:

Leer y escribir todos los conjuntos de datos

Ver todos los conjuntos de datos

He decodificado los dos tokens.

El token para la autenticación de la clave de la aplicación contiene esto:

«roles»: [
«Tenant.ReadWrite.All»,
«Tenant.Read.All»
],

mientras que el token para la autenticación basada en el usuario contiene esto:

«scp»: «Conjunto de datos.ReadWrite.All Workspace.ReadWrite.All»,

Qué me estoy perdiendo..?



@tripleacoder escribió:

Tengo una aplicación de consola que usa la API REST para obtener un conjunto de datos (y luego agregarle filas). Esto funciona cuando proporciono mis propias credenciales de usuario / contraseña.

Ahora he registrado la aplicación como una aplicación web / API para usar una clave / secreto de aplicación en su lugar. Puedo obtener un token, pero cuando hago la misma llamada REST obtengo 401 No autorizado.

Le he dado a la aplicación los siguientes permisos de aplicación en el servicio Power BI (¿es necesario?):

Leer y escribir todo el contenido en inquilino

Ver todo el contenido del inquilino

Estos permisos han sido otorgados por un administrador de Azure.

Además de los permisos delegados que funcionaban con la autenticación de usuarios:

Leer y escribir todos los conjuntos de datos

Ver todos los conjuntos de datos

He decodificado los dos tokens.

El token para la autenticación de la clave de la aplicación contiene esto:

«roles»: [
«Tenant.ReadWrite.All»,
«Tenant.Read.All»
],

mientras que el token para la autenticación basada en el usuario contiene esto:

«scp»: «Conjunto de datos.ReadWrite.All Workspace.ReadWrite.All»,

Qué me estoy perdiendo..?


Hola @tripleacoder,

¿Podría marcar las respuestas adecuadas como soluciones?

Atentamente,

Valle

Hola @tripleacoder,

Parece que solo necesitas un token de acceso. Consulte desarrollador / embed-sample-for-customers.

Atentamente,
Valle

triple efecto

En respuesta a v-jiascu-msft


@ v-jiascu-msft escribió:

Parece que solo necesitas un token de acceso. Consulte desarrollador / incrustación-muestra-para-clientes.


Ese enlace habla sobre el uso de una cuenta de usuario especial (nombre de usuario + contraseña) para la aplicación, no un secreto de la aplicación / principal de servicio, que es lo que estoy tratando de hacer.

Sin embargo, me han dicho en otro lugar que los roles no son necesarios para autorizar a los directores de servicio. Solo se necesitan «permisos de la aplicación».

En respuesta a triple efecto

Hola @tripleacoder,

Tus requisitos son bastante claros ahora. Le gustaría usar el secreto de la aplicación (también conocido como secreto del cliente) en lugar de la autenticación de la contraseña del usuario. Me temo que esto no funciona en Power BI. La razón es simple. Incluso el administrador global no puede acceder al contenido de otros. ¿Cómo puede una aplicación acceder a todo?

Atentamente,
Valle

triple efecto

En respuesta a v-jiascu-msft


@ v-jiascu-msft escribió:

Tus requisitos son bastante claros ahora. Le gustaría usar el secreto de la aplicación (también conocido como secreto del cliente) en lugar de la autenticación de la contraseña del usuario. Me temo que esto no funciona en Power BI. La razón es simple. Incluso el administrador global no puede acceder al contenido de otros. ¿Cómo puede una aplicación acceder a todo?


Gracias. Esta muestra de MS publica datos en una API web personalizada utilizando el mismo método (pero con un rol personalizado):

https://azure.microsoft.com/en-us/resources/samples/active-directory-dotnet-daemon/

¿Puede explicar un poco más por qué eso no funciona con la API REST de Power BI? Quizás también con un enlace a alguna documentación …

La aplicación tiene el permiso (= función) «Tenant.ReadWrite.All «que supuse era para este propósito.

En respuesta a triple efecto

Hola @tripleacoder,

Hasta donde yo sé, los permisos de Power BI se basan todos en los usuarios. Por tanto, una aplicación no puede actuar como usuario. Consulte desarrollador / power-bi-permissions donde todas las descripciones tienen «usuario».

Con respecto a «Tenant.ReadWrite.All», la documentación anterior también tiene una descripción. En realidad, estos permisos solo pueden recuperar los perfiles en lugar de los datos. Consulte admin / reports_getreportsasadmin.

Una prueba simple que podemos ver es que incluso un administrador no puede acceder a todos los espacios de trabajo de la aplicación. Los datos son el activo precioso de una empresa. Creo que esto es razonable.

Atentamente,
Valle

lisdexia

En respuesta a v-jiascu-msft

Todo esto está bien excepto por una cosa: tienes que inferir el estado «solo aplicaciones de usuario» de los flujos de datos de Power BI.

Algo explícito en este sentido me habría ahorrado la mayor parte de una semana persiguiéndome.

Boylec

En respuesta a v-jiascu-msft

Esto no tiene ningún sentido.

Power BI publicó toda esta documentación diciendo que los consumidores pueden usar las entidades de servicio para incrustar informes, pero no podemos usar las entidades de servicio para enumerar los informes en un espacio de trabajo del que la entidad de servicio es miembro administrador?

triple efecto

Encontré este enlace:

https: //docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-porta …

Habla sobre la asignación de roles a la aplicación.

Ahora le he otorgado a mi aplicación el rol de Colaborador, pero solo en un grupo de recursos.

No ha ayudado. Creo que el servicio Poer BI reside en el nivel de suscripción … eso significa que necesitaré la ayuda de un administrador global nuevamente.

sjc4062

En respuesta a triple efecto

Tuve un problema similar en el que podía usar mis propias credenciales pero no la cuenta de servicio y el problema era que la cuenta de servicio no tenía una licencia power bi pro. No estoy seguro de si es el mismo problema, pero valdría la pena analizarlo.

triple efecto

En respuesta a sjc4062


@ sjc4062 escribió:

Tuve un problema similar en el que podía usar mis propias credenciales pero no la cuenta de servicio y el problema era que la cuenta de servicio no tenía una licencia power bi pro. No estoy seguro de si es el mismo problema, pero valdría la pena analizarlo.


Podría ser eso. Pero cuando voy a asignar licencias y busco el principal de servicio, no aparece en los resultados. No estoy seguro de si se está filtrando porque solo los usuarios y grupos son válidos, o si es porque no soy un administrador global de Azure.

zoloturu

@tripleacoder,

¿Podría intentar mencionar un nivel de acceso en la solicitud de API?

https://docs.microsoft.com/en-us/rest/api/power-bi/embedtoken/reports_generatetoken#tokenaccesslevel

Saludos,
Ruslan
————————————————– —————–
¿Respondí tu pregunta? ¡Marque mi publicación como una solución!

triple efecto

En respuesta a zoloturu


¿Podría intentar mencionar un nivel de acceso en la solicitud de API?

https://docs.microsoft.com/en-us/rest/api/power-bi/embedtoken/reports_generatetoken#tokenaccesslevel


No estoy seguro de lo que quieres decir. El enlace va a «Nivel de acceso requerido para la generación de EmbedToken «, pero no estoy usando la API de Embed Token.

Obtengo el token usando este código:

const string authorityUri = "https://login.microsoftonline.com/" + tenantId;

AuthenticationContext authContext = new AuthenticationContext(authorityUri);

        
AuthenticationResult result = null;
         
result = await authContext.AcquireTokenAsync(resourceUri, clientCredential);

Anónimo

En respuesta a triple efecto

@ v-jiascu-msft

¿Puede cualquier usuario de power bi pro registrar una aplicación para power bi en el siguiente enlace? Tengo un usuario que es power bi admin y no puede registrar una aplicación. Lanza algún error relacionado con el acceso al registrarse a través de este dev.powerbi.com/apps.

https://docs.microsoft.com/en-us/power-bi/developer/register-app

Puedes ayudar

Anónimo

En respuesta a Anónimo

La mayoría de las organizaciones tienen los registros de aplicaciones bloqueados bastante estrictamente. No estoy familiarizado con esa herramienta para el registro de aplicaciones, pero no creo que esté destinada a ser una solución para las restricciones de seguridad corporativas, y esperaría que falle para la mayoría de los usuarios dentro de la mayoría de los inquilinos de Azure.

Anónimo

En respuesta a Anónimo

HOLA

Recibo el mismo error No se pudo cargar el recurso: el servidor respondió con un estado de 401 cuando intento abrir la URL del panel en una nueva pestaña https://app.powerbi.com/dashboardEmbed?dashboardId=100114d8-9c7c-4ae1-b1d5 -291603b4f22c & config = eyJjb …

Funciona bien en la aplicación de panel de muestra localhost (C # visual studio 2017)

También recibo este error en la consola para https://api.powerbi.com/powerbi/metadata/refreshusermetadata

Cuando abro este enlace, muestra un mensaje. Vea la captura de pantalla a continuación :

service.png

La URL del panel también debería funcionar en una nueva pestaña porque quiero usar este enlace en otro sitio web

Por favor, ayúdenme, estoy tratando de encontrar una solución para esto ahora durante dos días.

Gracias por adelantado.

Deja un comentario

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