ricus_zero
Hola a todos
Estoy utilizando la autenticación de solo aplicación (la aplicación posee el método de datos), ya configuré un nuevo grupo y creé un principio de servicio, así como habilité la opción «Permitir que el principio de servicio use aplicaciones de Power BI» en Power BI, donde también agregué el grupo.
He seguido algunos videos en línea y, según tengo entendido, este principio de servicio ahora debería poder realizar llamadas relacionadas con el usuario. La idea es obtener paneles e informes incorporados utilizando el principio de aplicación / servicio que se creó y al que se le dio acceso.
Mi pregunta es ¿cómo realizo la solicitud de token de Oauth con el ID de la aplicación y el secreto que tengo? La aplicación en cuestión es una aplicación web, y tengo una máquina Linux, por lo que no puedo ejecutar los ejemplos de c #, todavía tengo que ver un ejemplo simple de autenticación de Curl / php.
Estoy tratando de configurar esto en Postman, pero no estoy seguro de qué tipo de concesión y alcance usar, ¿podría alguien ayudarme a indicarme la dirección correcta de cómo autenticarme realmente como el principio de la aplicación / servicio con el punto final del token? proporcionado para la aplicación?
Gracias
Jayendran
Hola @ricus_zero, puede usar la siguiente consulta en cartero, básicamente debe usar el tipo de concesión como client_credentials
recurso: https: //analysis.windows.net/powerbi/api
client_id: xxxxx
secreto_cliente: xxxx
grant_type: client_credentials
ricus_zero
Hola @Jayendran
¡Gracias por la pronta respuesta!
Noté que su punto final de token es el punto final v1 y no el /oauth2/v2.0/token, ¿hay alguna razón para eso?
Esa captura de pantalla ayudó mucho, pude obtener un token de acceso usando el punto final del token que usó (no v2), pero lo mismo no funciona para v2, ¿sabe por qué podría ser esto?
Independientemente, después de obtener el token de acceso, intenté obtener una lista de informes que realizaban una solicitud GET para https://api.powerbi.com/v1.0/myorg/reports, pero recibo la siguiente respuesta:
La aplicación es parte de un grupo al que he dado acceso dentro de la configuración del inquilino en PowerBI, ¿me falta algo?
Me gustaría mencionar de nuevo que el resultado final aquí es para que pueda insertar URL para informes y paneles, creo que el punto final que estaba verificando es lo que necesito, pero podría estar equivocado.
Noté esta sección en la documentación con respecto a los tokens de inserción, pero eso requiere ámbitos que no proporcionamos con la solicitud del token.
Gracias de nuevo por la ayuda
Jayendran
En respuesta a ricus_zero
Hola @ricus_zero
Según microsoft utilizaron v1. Por lo tanto, es un estándar para nosotros usar V1 cada vez que iniciamos sesión con microsoft.
Volviendo a tu error …
Hay muchas diferencias en la autenticación de cuentas profesionales y la autenticación de SPN. Le recomiendo que ref …
En realidad, está llamando a una API https://api.powerbi.com/v1.0/myorg/reports cual es Mi espacio de trabajo Este es el espacio de trabajo predeterminado que PowerBI le da a su cuenta.
SPN no podrá acceder a My Workspace, porque solo puede acceder a él, no a una cuenta de servicio / SPN.
¿Qué puedes hacer ahora?
- Crea un nuevo espacio de trabajo
- Agregue el SPN como administrador al nuevo espacio de trabajo
- Publica el informe en ese espacio de trabajo.
- Llame a la API REST OBTENGA https://api.powerbi.com/v1.0/myorg/groups/{groupId}/reports/{reportId} que el token SPN
ricus_zero
En respuesta a Jayendran
Hola @Jayendran
Una vez más entrando con la respuesta sólida como una roca.
Ahora que lo mencionas, eso tiene mucho sentido, así que, en esencia, necesitaríamos una cuenta pro porque solo las cuentas pro pueden crear nuevos espacios de trabajo.
Por el momento, he habilitado la cuenta pro de prueba para probar esto.
Creé un nuevo espacio de trabajo, cuando se trata de asignar el principio de servicio como administrador al nuevo espacio de trabajo, ¿no lo está recogiendo en la función de autocompletar? ¿Esta función ya está disponible en la interfaz gráfica de usuario? (Recuerdo de un video que vi, que hace unos meses esto no era posible desde la interfaz y el SPN tuvo que agregarse a través de PowerShell)
Como referencia, tengo un grupo llamado Power BI Apps, que se ha agregado en la configuración del inquilino:
En Azure AD, cuando navego a este grupo y hago clic en miembros, puedo ver el principio de servicio allí
Al intentar agregar esto, no se detecta, ¿se debe a que no es posible desde la interfaz gráfica de usuario?
Saludos
Jayendran
En respuesta a ricus_zero
Hola @ricus_zero
Incluso SPN puede crear un nuevo espacio de trabajo (V2). Si hizo referencia a la diferencia entre pro y SPN. puedes encontrar esa solución.
Hay 2 tipos de espacios de trabajo
- Clásico (v1)
- Actualizado (v2)
PRO tiene acceso a ambos espacios de trabajo, pero SPN debe tener solo espacio de trabajo v2. Entonces, si está tratando de agregar su SPN en el espacio de trabajo V1, no funcionará / mostrará.
Puede agregar el SPN solo en la V2 (espacio de trabajo actualizado) (desde la GUI)
Por favor, vea la captura de pantalla a continuación. Puedo buscar la identificación de la aplicación en mi espacio de trabajo V2
ricus_zero
En respuesta a Jayendran
Hola @Jayendran
Perdón por todas las preguntas, ¡tu ayuda ha sido tremenda hasta ahora!
¿Estoy en lo cierto al decir que es posible que una licencia normal cree nuevos espacios de trabajo a través del principio de servicio? (Llamada a la API)
Intenté crear un nuevo espacio de trabajo a través de la API REST, haciendo una llamada al punto final del grupo que inicialmente obtuvo un 403, probé suerte y agregué el alcance requerido a la llamada del token de acceso, y sucedió la magia, ahora podía crear un nuevo espacio de trabajo a través de la API, y luego asigné este espacio de trabajo a mi usuario de PowerBI para que también puedan verlo.
Agregué algunos de los paneles e informes de muestra a este nuevo espacio de trabajo que se creó a través de la API
Así que, a partir de ahí, intenté obtener el panel con el punto final del panel de control y obtuve de nuevo la respuesta «API no es accesible para la aplicación».
Luego eché un vistazo a la documentación de Embed Token, ya que es relevante para el escenario de datos de la aplicación que, si no me equivoco, es lo que estamos tratando aquí.
Intenté obtener un token de inserción para dicho panel. Una vez más tuve que cambiar los ámbitos definidos al obtener el token de acceso oauth, pero después de eso pude obtener una respuesta adecuada que incluye el token / tokenId / expirtation y @ odata.context
Ahora, una pregunta aparentemente simple de, ¿cómo utilizo realmente este token de inserción en nuestra aplicación web para mostrar el panel de control integrado?
Espero que puedas ayudar con esto
Gracias
Jayendran
En respuesta a ricus_zero
Hola @ricus_zero
¿Estoy en lo cierto al decir que es posible que una licencia normal cree nuevos espacios de trabajo a través del principio de servicio? (Llamada a la API)
sí, estás en lo correcto
No debe usar get dashboard API usando el token SPN En su lugar, use get dashboard en grupo
Ahora, una pregunta aparentemente simple de, ¿cómo utilizo realmente este token de inserción en nuestra aplicación web para mostrar el panel de control integrado?
Puede usar la aplicación See del SDK posee datos en dotnet
Básicamente, debe pasar el token de inserción a PowerBI Javascript
<script> // Read embed application token from Model var accessToken = "@Model.EmbedToken.Token"; // Read embed URL from Model var embedUrl = "@Html.Raw(Model.EmbedUrl)"; // Read dashboard Id from Model var embedDashboardId = "@Model.Id"; // Get models. models contains enums that can be used. var models = window['powerbi-client'].models; // Embed configuration used to describe the what and how to embed. // This object is used when calling powerbi.embed. // This also includes settings and options such as filters. // You can find more information at https://github.com/Microsoft/PowerBI-JavaScript/wiki/Embed-Configuration-Details. var config = { type: 'dashboard', tokenType: models.TokenType.Embed, accessToken: accessToken, embedUrl: embedUrl, id: embedDashboardId }; // Get a reference to the embedded dashboard HTML element var dashboardContainer = $('#dashboardContainer')[0]; // Embed the dashboard and display it within the div container. var dashboard = powerbi.embed(dashboardContainer, config); </script>
Por cierto, puedes dar Me gusta / da kudo’s a mis respuestas si lo encuentra útil, de esta manera ayudará a otros.
ricus_zero
En respuesta a Jayendran
Hola @Jayendran
Le he dado algunos pulgares hacia arriba por su ayuda y pronto marcaré una solución.
Estoy ejecutando Linux, así que no tengo un entorno ac #, pero eliminé el paquete javascript de su Github.
Estaba un poco confundido con el origen del valor de embedUrl, ya que no está en la respuesta, pero jugando un poco descubrí que es solo https://app.powerbi.com/dashboardEmbed?dashboardId=XXX
Ahora he podido insertar un panel y un informe en mi aplicación web de muestra, haciendo uso de la funcionalidad de token de inserción, y una vez más, muchas gracias por su ayuda hoy, he estado luchando con esto durante más de una semana. .
Me di cuenta de que la vida útil de ese token del token incrustado no es muy larga, por lo que es algo que debería tener en cuenta al desarrollar la aplicación completa.
Espero que tengas un gran día.
¡Gracias de nuevo!
Jayendran
En respuesta a ricus_zero
Hola @ricus_zero Me alegro de que hayas resuelto tu problema.
para su pregunta, puede encontrar la respuesta a continuación.
https://community.powerbi.com/t5/Developer/PowerBI-Embedded-Embed-Token-Expiration/td-p/54535
También en el código puedes configurarlo
https: //github.com/microsoft/PowerBI-Developer-Samples/blob/master/App%20Owns%20Data/PowerBIEmbedded …
Jayendran
Hola @ricus_zero, puede usar la siguiente consulta en cartero, básicamente debe usar el tipo de concesión como client_credentials
recurso: https: //analysis.windows.net/powerbi/api
client_id: xxxxx
secreto_cliente: xxxx
grant_type: client_credentials