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:
Y también asegúrese de que los permisos de la API tengan el consentimiento.
No hay comentarios:
Publicar un comentario