GOOGLE ADS

martes, 3 de mayo de 2022

Problema con la aplicación del servidor blazor con autenticación de Azure AD que llama a una API web segura con un token de portador

Creé una API web que requiere autorización y se implementa en una aplicación web de Azure. También tengo una aplicación Blazor Server que requiere autenticación de Azure AD.

Cuando ejecuto la aplicación Blazor Server desde Visual Studio, puede obtener un token y llamar correctamente a la API web implementada en Azure.

Sin embargo, cuando implemento la aplicación Blazor Server en una aplicación web de Azure, aparece un error 401 cuando llama a la API web, a pesar de que funcionó desde Visual Studio.

Así es como configuro el token antes de la llamada a la API web

 var accessToken = await _authRepo.PrepareAuthenticatedClient();
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

incluyendo también una captura de la excepción

@inject MicrosoftIdentityConsentAndConditionalAccessHandler ConsentHandler

 catch (Exception ex)
{
ConsentHandler.HandleException(ex);
}

Este procedimiento obtiene un token para el usuario que inició sesión para el alcance de la API web:

public async Task<string> PrepareAuthenticatedClient()
{
var accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(new[] { _WPScope });
return accessToken;
}

Este es el código en el archivo startup.cs

 public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi(new string[] { "api://xxxxxxxxxxxxxxxxxxxxxx/allaccess" })
.AddInMemoryTokenCaches();
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
}).AddMicrosoftIdentityUI();


¿Cómo configuro esto en Azure para que funcione como lo hace en Visual Studio?


Solución del problema

Por favor, intente estos:

  • Después de descodificar el token, si ve la URL del emisor con el punto de conexión v2, asegúrese de cambiar la versión aceptada del token de acceso a 2 en el manifiesto en Azure Ad Portal, si el valor iss tiene un cambio de punto de conexión v1 en el manifiesto a 1.

  • Además, si lo anterior no es la causa, vea si la audiencia, es decir; aud reclamación es igual a la identificación del cliente. De lo contrario, intente cambiar el alcance al no incluir el prefijo api://.

  • Y también asegúrese de que los permisos de la API tengan el consentimiento.

    No hay comentarios:

    Publicar un comentario

    Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

    Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...