es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    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 authResult = client.Authentication(AzureAuthenticationMode.AdpApplication);
    var token = authResult.AccessToken;
    var results = client.QueryWithHttpMessagesAsync("union * | take 5", token).Result;
    

    Ten en cuenta que hemos agregado el método Authentication que toma un objeto AzureAuthenticationMode, que especifica el flujo de autenticación que se va a utilizar. En este caso, estamos usando el flujo AdpApplication, 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.

Comments are closed.