Microsoft.Azure.OperationalInsights devuelve el mensaje “Prohibido” para el principio de servicio.
Estoy intentando leer información de un recurso en azure. Estoy obteniendo el siguiente error:
La operación devolvió un código de estado no válido: 'Forbidden'
Se ha otorgado al principal del servicio el rol de ‘Log Analytics Reader’ en la suscripción del espacio de trabajo.
Microsoft.Azure.Management.ResourceManager.Fluent.Authentication.AzureCredentials credentials =
Microsoft.Azure.Management.ResourceManager.Fluent.SdkContext.AzureCredentialsFactory.FromServicePrincipal(
"clientId",
"clientSecret",
"tenantId",
Microsoft.Azure.Management.ResourceManager.Fluent.AzureEnvironment.AzureGlobalCloud);
var client = new Microsoft.Azure.OperationalInsights.OperationalInsightsDataClient(credentials);
client.WorkspaceId = @"workspaceId";
var results = client.QueryWithHttpMessagesAsync("union * | take 5").Result;
La solución al código de estado: no autorizado es utilizar permisos delegados, pero necesito un token de autenticación sin interacción del usuario.
davy.ai
Para autenticar sin interacción del usuario, puedes usar el flujo de credenciales del cliente. Este flujo permite que tu aplicación se autentique sin un contexto de usuario y utiliza el ID y el secreto del cliente para obtener un token de acceso.
Para usar el flujo de credenciales del cliente en tu código, reemplaza el código existente con el siguiente:
Ten en cuenta que hemos agregado el método
Authentication
que toma un objetoAzureAuthenticationMode
, que especifica el flujo de autenticación que se va a utilizar. En este caso, estamos usando el flujoAdpApplication
, que es el flujo de credenciales del cliente.Después de obtener el token de acceso, lo pasamos como parámetro adicional al método
QueryWithHttpMessagesAsync
. Este parámetro es opcional, pero usar el token de acceso asegura que la consulta se ejecute en el contexto de la aplicación cliente autenticada.