Tenho um aplicativo autônomo Blazor WASM que usa o Azure AD B2C para gerenciamento de usuários e tokens.
Vi outras perguntas/respostas sobre esse problema, mas no meu caso nenhuma dessas abordagens funcionou e meu aplicativo Blazor WASM Standalone NÃO consegue obter tokens de acesso.
Meu aplicativo Blazor está configurado como um aplicativo SPA no Azure AD B2C e é importante observar que as opções "Access Tokens" e "Id Tokens" estão desmarcadas na seção "Implicit grant and hybrid flows". Além disso, "Allow public flows" está definido como "No" -- veja abaixo. Para essas configurações, eu apenas segui as instruções aqui: https://learn.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/standalone-with-azure-active-directory-b2c?view=aspnetcore-8.0#register-an-app-in-azure
Também adicionei os escopos "Leitura" e "Gravação" para minha API em "Permissões configuradas" para meu aplicativo Blazor WASM — veja abaixo:
No lado do Blazor WASM, é assim que Program.cs
fica:
...
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAdB2C", options.ProviderOptions.Authentication);
options.ProviderOptions.LoginMode = "redirect";
//options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
//options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
options.ProviderOptions.DefaultAccessTokenScopes.Add("https://mytenant.onmicrosoft.com/api/MyApiUser.Write");
});
// Add HttpClient for My API calls
builder.Services.AddHttpClient("MyApiClient",
client => client.BaseAddress = new Uri("https://api.test.com"))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>()
.CreateClient("MyApiClient"));
Observe que comentei os escopos para openid
e offline_access
mas tentei com eles também. De qualquer forma, não funciona e não access_token
é recebido.
Nesta pergunta/resposta do SO, o desenvolvedor sugere usar o Application Id para o aplicativo Blazor WASM em vez do escopo URI funcionou para ele. Eu tentei o seguinte e isso também NÃO funcionou. Aqui está a pergunta: Blazor Standalone WASM não consegue obter o Access Token com MSAL
options.ProviderOptions.DefaultAccessTokenScopes.Add("cb3574c0-305e-4e44-a3b7-ac5f045f94e7"); // options.ProviderOptions.DefaultAccessTokenScopes.Add("https://mytenant.onmicrosoft.com/api/MyApiUser.Write");
Aqui, o GUID
valor de cb3574c0-305e-4e44-a3b7-ac5f045f94e7
é o ID do aplicativo para meu aplicativo Blazor WASM, conforme atribuído pelo Azure AD B2C.
Quando inspeciono HttpClient
onde faço minhas chamadas de API, vejo que DefaultRequestHeaders
é null
.
Não acredito que o Azure AD B2C esteja realmente enviando um access_token
. Alguém tem ideia do que estou fazendo errado aqui?