Las credenciales del cliente no funcionan para la API REST de powerBI

Estoy tratando de implementar el flujo de autenticación de daemon. La siguiente solicitud de publicación me devuelve un token de acceso con el scope correcto:

p_url = 'https://login.microsoftonline.com/' + 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' + '/oauth2/token' data = { 'grant_type':'client_credentials', 'client_id': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'client_secret': 'L------------------------------------------=', 'resource':'https://analysis.windows.net/powerbi/api' } r = requests.post(url=p_url, data=data) 

Recibo la siguiente respuesta

 { "access_token" : "ey------------" "expires_on" : "1454857253", "not_before" : "1454853353", "expires_in" : "3600", "token_type" : "Bearer", "scope" : "Dashboard.Read.All Data.Alter_Any Dataset.Read.All Dataset.ReadWrite.All Report.Read.All", "resource" : "https://analysis.windows.net/powerbi/api" } response = json.loads(r.text) token = response['access_token'] headers = { 'Authorization': 'Bearer ' + token } response = requests.get('https://api.powerbi.com/v1.0/myorg/datasets', headers=headers) 

Uso el punto final de la página de aplicaciones “ver puntos finales”. Sin embargo, cuando bash obtener una lista de “conjuntos de datos” siempre recibo 403. ¿Qué puede faltar en el proceso de adquisición de token?

Tu flujo es un poco corto. La llamada REST para los conjuntos de datos parece estar bien, pero, por lo que sé, debe solicitar el token de acceso por código de autorización, no solo las credenciales del cliente.

1) Obtener código de autorización

Depende de su flujo, para el sitio web se recibirá durante el proceso de inicio de sesión o llame a / oauth2 / authorize con {‘response_type’: ‘code}

2) Obtener el token de acceso

Con el código de autorización en una variable, debe modificar su solicitud para incluir el código de autorización, como este (los campos de tipo y código de concesión están alterados):

 p_url = 'https://login.microsoftonline.com/' + 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' + '/oauth2/token' data = { 'grant_type':'authorization_code', 'client_id': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'client_secret': 'L------------------------------------------=', 'code': authorizationCodeForSingedInUser, 'resource':'https://analysis.windows.net/powerbi/api' } r = requests.post(url=p_url, data=data) 

Dicho básicamente, debe tener una cuenta de usuario que acceda al recurso de Power BI. Su sitio web (clientid + secreto) no está autorizado por sí mismo. Debe haber un usuario involucrado.

Además, solo los usuarios de “cuentas de organización” de afaik pueden acceder a power bi.

Para ser explícito y subrayar la causa principal en este hilo, publicaciones y comentarios: la API REST de Power BI solo se puede usar a través de un Usuario con credenciales con una cuenta de organización y ya debe haber iniciado sesión (activado) Power BI en el portal de Power BI . Puede verificar si REST Api funcionará al verificar si este usuario puede usar el portal Power BI manualmente.