MrRichDean
Buenos dias / tardes / noches a todos
En primer lugar, me disculpo por mi ignorancia y por cualquier pregunta estúpida que haga. Soy nuevo en Power BI, por lo que me encuentro muy bien.
Ok, entonces lo que estoy tratando de hacer es crear una pequeña aplicación de consola que obtenga el historial de actualización para un conjunto de datos en particular, pero estoy teniendo todo tipo de problemas con el token de acceso. Aquí está el código que tengo:
private static string GetToken()
{
//OAuth2 authority Uri
string authorityUri = "https://login.microsoftonline.com/common/";
// AcquireToken will acquire an Azure access token
// Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
AuthenticationContext authContext = new AuthenticationContext(authorityUri);
var credential = new ClientCredential(_clientId, _clientSecret);
var authenticationResult = authContext.AcquireToken("https://analysis.windows.net/powerbi/api", credential);
token = authenticationResult.AccessToken;
HttpWebRequest request;
var url = "https://api.powerbi.com/v1.0/myorg/datasets/{DATASETIDHERE}/refreshes/?$top=1";
request = WebRequest.CreateHttp(url);
request.Method = "GET";
var tryItToken = "eyJ0eXAiO etc etc etc";
//Add token to the request header
request.Headers.Add("Authorization", String.Format("Bearer {0}", token));
using (var response = (HttpWebResponse)request.GetResponse())
{
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
dynamic array = JsonConvert.DeserializeObject(responseString);
}
return token;
}
tryItToken se completa con el token que se genera desde aquí https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/getrefreshhistory.
Ahora, cada vez que paso la ficha de prueba, obtengo la respuesta absolutamente bien. Sin embargo, si reemplazo el tryItToken con el token que obtengo a través de authenticationcontext.AcquireToken, estoy recibiendo el 401 Unauthorized.
¿Alguien puede indicarme la dirección de los pasos que claramente me he perdido para que esto funcione correctamente desde el código?
Gracias por adelantado.
v-shex-msft
Hola @MrRichDean,
Me gustaría sugerirle que eche un vistazo al siguiente tutorial sobre cómo obtener un token de acceso si funciona de su lado:
Obtenga un token de acceso de autenticación
Saludos,
Xiaoxin Sheng
MrRichDean
En respuesta a v-shex-msft
Buenos días @ v-shex-msft
Intenté hacer esto en un intento anterior, pero cuando intenté usar el método asnyc, recibí lo siguiente;
v-shex-msft
En respuesta a MrRichDean
Hola @MrRichDean,
Parece que la nueva versión del paquete NuGet cambia lo definido para que el código de la versión anterior no funcione. Intente usar el siguiente código que reemplaza la parte sin procesar si funciona de su lado:
private static string GetToken()
{
// and add using Microsoft.IdentityModel.Clients.ActiveDirectory
//The client id that Azure AD created when you registered your client app.
string clientID = "{Client_ID}";
//RedirectUri you used when you register your app.
//For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate.
// You can use this redirect uri for your client app
string redirectUri = "https://login.live.com/oauth20_desktop.srf";
//Resource Uri for Power BI API
string resourceUri = "https://analysis.windows.net/powerbi/api";
//OAuth2 authority Uri
string authorityUri = "https://login.microsoftonline.com/common/";
//Get access token:
// To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken
// AuthenticationContext is part of the Active Directory Authentication Library NuGet package
// To install the Active Directory Authentication Library NuGet package in Visual Studio,
// run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.
// AcquireToken will acquire an Azure access token
// Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
AuthenticationContext authContext = new AuthenticationContext(authorityUri);
string token = authContext.AcquireTokenAsync(resourceUri, clientID, new Uri(redirectUri), (IPlatformParameters)new UserCredential()).Result.AccessToken;
Console.WriteLine(token);
Console.ReadLine();
return token;
}
Saludos,
Xiaoxin Sheng
MrRichDean
En respuesta a v-shex-msft
Gracias por tu hep @ v-shex-msft
Desafortunadamente, parece que a la nueva definición no le gusta IPlatformParameters
v-shex-msft
En respuesta a MrRichDean
Hola @MrRichDean,
¿En qué versión del paquete NuGet está trabajando? Copio directamente el nombre del paquete NuGet (del documento) a vs studio package manager, luego lo descargo y lo pruebo con la última versión.
Saludos,
Xiaoxin Sheng
___Johan___
Hola,
Yo también soy nuevo. ¿AuthenticationContext completa el authotityUri correctamente?
Cuando uso curl, necesito llamar a http://login.microsoftonline.com/common/oauth2/token.
Atentamente
Johan