Proteja uma aplicação autónoma do ASP.NET Core Blazor WebAssembly com o Microsoft Entra ID
Observação
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 9 deste artigo.
Advertência
Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e .NET Core. Para a versão atual, consulte a versão .NET 9 deste artigo.
Importante
Estas informações referem-se a um produto de pré-lançamento que pode ser substancialmente modificado antes de ser lançado comercialmente. A Microsoft não oferece garantias, expressas ou implícitas, em relação às informações fornecidas aqui.
Para a versão atual, consulte a versão .NET 9 deste artigo.
Este artigo explica como criar uma aplicação independente Blazor WebAssembly que usa Microsoft Entra ID (ME-ID) para autenticação.
Para obter cobertura adicional de cenários de segurança depois de ler este artigo, consulte ASP.NET Core Blazor WebAssembly cenários de segurança adicionais.
Passo a passo
As subseções do passo a passo explicam como:
- Criar um locatário no Azure
- Registrar um aplicativo no Azure
- Criar a aplicação Blazor
- Executar o aplicativo
Criar um locatário no Azure
Siga as orientações em Guia de início rápido: configurar um tenant para criar um tenant no ME-ID.
Registrar um aplicativo no Azure
Registe uma aplicação ME-ID:
- Navegue até Microsoft Entra ID no portal do Azure. Selecione Aplicativos>Registros de aplicativos na barra lateral. Selecione o botão Novo de registo.
- Forneça um Nome para a aplicação (por exemplo, ME-ID autónomo Blazor).
- Escolha um dos tipos de conta suportados . Você pode selecionar Contas neste diretório organizacional somente para essa experiência.
- Defina a lista suspensa de URI de Redirecionamento como de aplicativo de página única (SPA) e forneça o seguinte URI de redirecionamento:
https://localhost/authentication/login-callback
. Se você souber o URI de redirecionamento de produção para o host padrão do Azure (por exemplo,azurewebsites.net
) ou o host de domínio personalizado (por exemplo,contoso.com
), também poderá adicionar o URI de redirecionamento de produção ao mesmo tempo em que fornece o URI de redirecionamento delocalhost
. Certifique-se de incluir o número da porta para portas que não sejam:443
em quaisquer URIs de redirecionamento de produção que adicionar. - Se estiver a utilizar um domínio de editor não verificado , desmarque a caixa de verificação Permissões>Conceder consentimento de administrador para openid e offline_access permissões. Se o domínio do editor for verificado, essa caixa de seleção não estará presente.
- Selecione o Registo .
Observação
Não é necessário fornecer o número da porta para um URI de redirecionamento de localhost
ME-ID. Para obter mais informações, consulte Restrições e limitações de URI de redirecionamento (URL de resposta): exceções Localhost (documentação do Entra).
Registe as seguintes informações:
- ID do aplicativo (cliente) (por exemplo,
00001111-aaaa-2222-bbbb-3333cccc4444
) - ID do diretório (locatário) (por exemplo,
aaaabbbb-0000-cccc-1111-dddd2222eeee
)
Em configurações de Autenticação>Plataforma>Aplicativo de página única:
- Confirme se o URI de redirecionamento do
https://localhost/authentication/login-callback
está presente. - Na seção concessão implícita, verifique se as caixas de seleção para tokens de acesso e tokens de ID não estão marcadas. A concessão implícita não é recomendada para aplicativos Blazor que usam o MSAL v2.0 ou posterior. Para obter mais informações, consulte Secure ASP.NET Core Blazor WebAssembly.
- Os padrões restantes para o aplicativo são aceitáveis para essa experiência.
- Selecione o botão Salvar se tiver feito alterações.
Criar a aplicação Blazor
Crie o aplicativo em uma pasta vazia. Substitua os espaços reservados no comando a seguir pelas informações registadas anteriormente e execute o comando num shell de comando:
dotnet new blazorwasm -au SingleOrg --client-id "{CLIENT ID}" -o {PROJECT NAME} --tenant-id "{TENANT ID}"
Marcador de posição | Nome do portal do Azure | Exemplo |
---|---|---|
{PROJECT NAME} |
— | BlazorSample |
{CLIENT ID} |
ID do aplicativo (cliente) | 00001111-aaaa-2222-bbbb-3333cccc4444 |
{TENANT ID} |
ID do diretório (inquilino) | aaaabbbb-0000-cccc-1111-dddd2222eeee |
O local de saída especificado com a opção -o|--output
cria uma pasta de projeto se ela não existir e se torna parte do nome do projeto.
Adicione uma permissão de MsalProviderOptions à User.Read
com DefaultAccessTokenScopes:
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.DefaultAccessTokenScopes
.Add("https://graph.microsoft.com/User.Read");
});
Executar o aplicativo
Use uma das seguintes abordagens para executar o aplicativo:
- Estúdio Visual
- Selecione o botão Executar.
- Use Depurar>Iniciar a Depuração no menu.
- Pressione F5.
- Shell de comando da CLI do .NET: execute o comando
dotnet watch
(oudotnet run
) na pasta do aplicativo.
Partes da aplicação
Esta seção descreve as partes de um aplicativo geradas a partir do modelo de projeto Blazor WebAssembly e como o aplicativo é configurado. Não há nenhuma orientação específica a seguir nesta seção para criar um aplicativo funcional básico se você tiver criado o aplicativo usando o tutorial na seção guia passo a passo. As orientações nesta seção são úteis para atualizar um aplicativo para autenticar e autorizar usuários. No entanto, uma abordagem alternativa para atualizar uma aplicação é criar uma nova aplicação a partir das orientações na secção Passo a Passo e mover os componentes, classes e recursos da aplicação original para a nova.
Pacote de autenticação
Quando um aplicativo é criado para usar Contas Corporativas ou Escolares (SingleOrg
), o aplicativo recebe automaticamente uma referência de pacote para o Biblioteca de Autenticação da Microsoft (Microsoft.Authentication.WebAssembly.Msal
). O pacote fornece um conjunto de primitivos que ajudam o aplicativo a autenticar usuários e obter tokens para chamar APIs protegidas.
Se adicionar autenticação a um aplicativo, adicione manualmente o pacote Microsoft.Authentication.WebAssembly.Msal
ao aplicativo.
Observação
Para obter orientação sobre como adicionar pacotes a aplicações .NET, consulte os artigos em Instalar e gerenciar pacotes em Fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
O pacote Microsoft.Authentication.WebAssembly.Msal
adiciona transitivamente o pacote Microsoft.AspNetCore.Components.WebAssembly.Authentication
ao aplicativo.
Suporte ao serviço de autenticação
O suporte para autenticação de usuários é registrado no contêiner de serviço com o método de extensão AddMsalAuthentication fornecido pelo pacote Microsoft.Authentication.WebAssembly.Msal
. Esse método configura os serviços necessários para que o aplicativo interaja com o Identity Provider (IP).
No ficheiro Program
:
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
});
O método AddMsalAuthentication aceita um retorno de chamada para configurar os parâmetros necessários para autenticar um aplicativo. Os valores necessários para configurar o aplicativo podem ser obtidos na configuração do ME-ID quando você registra o aplicativo.
configuração wwwroot/appsettings.json
A configuração é fornecida pelo arquivo wwwroot/appsettings.json
:
{
"AzureAd": {
"Authority": "https://login.microsoftonline.com/{TENANT ID}",
"ClientId": "{CLIENT ID}",
"ValidateAuthority": true
}
}
Exemplo:
{
"AzureAd": {
"Authority": "https://login.microsoftonline.com/e86c78e2-...-918e0565a45e",
"ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"ValidateAuthority": true
}
}
Escopos de token de acesso
O modelo Blazor WebAssembly não configura automaticamente o aplicativo para solicitar um token de acesso para uma API segura. Para provisionar um token de acesso como parte do fluxo de início de sessão, adicione o escopo aos escopos de token de acesso padrão do MsalProviderOptions:
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});
Especifique escopos adicionais com AdditionalScopesToConsent
:
options.ProviderOptions.AdditionalScopesToConsent.Add("{ADDITIONAL SCOPE URI}");
Observação
AdditionalScopesToConsent não é capaz de provisionar permissões de usuário delegadas para o Microsoft Graph por meio da interface do usuário de consentimento do Microsoft Entra ID quando um usuário usa pela primeira vez um aplicativo registrado no Microsoft Azure. Para obter mais informações, consulte Usar a API do Graph com ASP.NET Core Blazor WebAssembly.
Para obter mais informações, consulte os seguintes recursos:
- Solicitar tokens de acesso adicionais
- Anexar tokens a solicitações de saída
- Guia de início rápido: configurar um aplicativo para expor APIs da Web
- Escopos de token de acesso para a Microsoft Graph API
Modo de login
A estrutura define como padrão o modo de login pop-up e recorre ao modo de login por redirecionamento se um pop-up não puder ser aberto. Configure o MSAL para usar o modo de login de redirecionamento definindo a propriedade LoginMode
do MsalProviderOptions como redirect
:
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.LoginMode = "redirect";
});
A configuração padrão é popup
e o valor da string não é sensível a maiúsculas.
Arquivo de importação
O namespace Microsoft.AspNetCore.Components.Authorization é disponibilizado em todo o aplicativo por meio do arquivo _Imports.razor
:
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.JSInterop
@using {APPLICATION ASSEMBLY}
@using {APPLICATION ASSEMBLY}.Shared
Página de índice
A página Índice (wwwroot/index.html
) inclui um script que define o AuthenticationService
em JavaScript.
AuthenticationService
lida com os detalhes de baixo nível do protocolo OIDC. O aplicativo chama internamente métodos definidos no script para executar as operações de autenticação.
<script src="_content/Microsoft.Authentication.WebAssembly.Msal/AuthenticationService.js"></script>
Componente da aplicação
O componente App
(App.razor
) é semelhante ao componente App
encontrado em Blazor Server aplicativos:
- O componente AuthorizeRouteView garante que o usuário atual esteja autorizado a acessar uma determinada página ou renderize o componente
RedirectToLogin
. - O componente
RedirectToLogin
gerencia o redirecionamento de usuários não autorizados para a página de login.
- O componente CascadingAuthenticationState gerencia a exposição do AuthenticationState ao resto do aplicativo.
- O componente AuthorizeRouteView garante que o usuário atual esteja autorizado a acessar uma determinada página ou renderize o componente
RedirectToLogin
. - O componente
RedirectToLogin
gerencia o redirecionamento de usuários não autorizados para a página de login.
Devido a alterações na estrutura nas versões do ASP.NET Core, Razor marcação para o componente App
(App.razor
) não é mostrada nesta seção. Para inspecionar a marcação do componente para uma determinada versão, use ou de uma das seguintes abordagens:
Crie um aplicativo provisionado para autenticação a partir do modelo de projeto Blazor WebAssembly padrão para a versão do ASP.NET Core que você pretende usar. Inspecione o componente
App
(App.razor
) no aplicativo gerado.Inspecione o componente
App
(App.razor
) na fonte de referência do. Selecione a versão no seletor de ramificação e procure o componente na pastaProjectTemplates
do repositório porque ele foi movido ao longo dos anos.Observação
Os links de documentação para a fonte de referência do .NET geralmente carregam a ramificação padrão do repositório, que representa o desenvolvimento atual para a próxima versão do .NET. Para selecionar uma tag para uma versão específica, utilize a lista suspensa Alternar ramificações ou tags. Para obter mais informações, consulte Como selecionar uma marca de versão do código-fonte do ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Componente RedirectToLogin
O componente RedirectToLogin
(RedirectToLogin.razor
):
- Gerencia o redirecionamento de usuários não autorizados para a página de login.
- A URL atual que o utilizador está tentando aceder é mantida para que o utilizador possa ser retornado a essa página se a autenticação for bem-sucedida usando:
- Estado do histórico de navegação no ASP.NET Core no .NET 7 ou posterior.
- Uma cadeia de caracteres de consulta no ASP.NET Core no .NET 6 ou anterior.
Inspecione o componente RedirectToLogin
na fonte de referência . A localização do componente mudou ao longo do tempo, portanto, use as ferramentas de pesquisa do GitHub para localizar o componente.
Observação
Os links de documentação para a fonte de referência do .NET geralmente carregam a ramificação padrão do repositório, que representa o desenvolvimento atual para a próxima versão do .NET. Para selecionar uma tag para uma versão específica, use a lista suspensa "Opção para ramificações ou tags" . Para obter mais informações, consulte Como selecionar uma marca de versão do código-fonte do ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Componente LoginDisplay
O componente LoginDisplay
(LoginDisplay.razor
) é processado no componente MainLayout
(MainLayout.razor
) e gerencia os seguintes comportamentos:
- Para utilizadores autenticados:
- Exibe o nome de usuário atual.
- Oferece um link para a página de perfil do usuário no ASP.NET Core Identity.
- Oferece um botão para sair do aplicativo.
- Para utilizadores anónimos:
- Oferece a opção de registo.
- Oferece a opção de iniciar sessão.
Devido a alterações na estrutura de trabalho nas versões do ASP.NET Core, a marcação Razor para o componente LoginDisplay
não é apresentada nesta seção. Para inspecionar a marcação do componente para uma determinada versão, use uma das seguintes abordagens:
Crie um aplicativo provisionado para autenticação a partir do modelo de projeto Blazor WebAssembly padrão para a versão do ASP.NET Core que você pretende usar. Inspecione o componente
LoginDisplay
no aplicativo gerado.Inspecione o componente
LoginDisplay
na fonte de referência . A localização do componente mudou ao longo do tempo, portanto, use as ferramentas de pesquisa do GitHub para localizar o componente. O conteúdo do modelo paraHosted
igual atrue
é usado.Observação
Os links de documentação para a fonte de referência do .NET geralmente carregam a ramificação padrão do repositório, que representa o desenvolvimento atual para a próxima versão do .NET. Para selecionar uma tag para uma versão específica, use a lista suspensa Mudar ramificações ou tags. Para obter mais informações, consulte Como selecionar uma marca de versão do código-fonte do ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Componente de autenticação
A página produzida pelo componente Authentication
(Pages/Authentication.razor
) define as rotas necessárias para lidar com diferentes estágios de autenticação.
O componente RemoteAuthenticatorView:
- É fornecido pelo pacote
Microsoft.AspNetCore.Components.WebAssembly.Authentication
. - Gerencia a execução das ações apropriadas em cada estágio de autenticação.
@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
<RemoteAuthenticatorView Action="@Action" />
@code {
[Parameter]
public string? Action { get; set; }
}
Observação
Tipos de referência anuláveis (NRTs) e de análise estática de estado nulo do compilador .NET é suportado no ASP.NET Core no .NET 6 ou posterior. Antes do lançamento do ASP.NET Core no .NET 6, o tipo string
aparece sem a designação de tipo nulo (?
).
Solução de problemas
Registo
Para habilitar o log de depuração ou rastreamento para autenticação Blazor WebAssembly, consulte a seção Log de autenticação do lado do cliente de ASP.NET de log do Core Blazor com o seletor de versão do artigo definido como ASP.NET Core 7.0 ou posterior.
Erros comuns
Configuração incorreta do aplicativo ou do provedor de Identity (IP)
Os erros mais comuns são causados por configuração incorreta. Seguem-se alguns exemplos:
- Dependendo dos requisitos do cenário, uma autoridade, instância, ID do locatário, domínio do locatário, ID do cliente ou URI de redirecionamento ausente ou incorreto impede que um aplicativo autentique clientes.
- Escopos de solicitação incorretos impedem que os clientes acessem os pontos de extremidade da API Web do servidor.
- Permissões incorretas ou ausentes da API do servidor impedem que os clientes acedam aos endpoints da API web do servidor.
- Executar a aplicação numa porta de rede diferente da configurada no URI de redirecionamento do registo da aplicação do IP. Observe que uma porta não é necessária para o Microsoft Entra ID e um aplicativo em execução em um endereço de teste de desenvolvimento
localhost
, mas a configuração de porta do aplicativo e a porta onde o aplicativo está sendo executado devem corresponder para endereços nãolocalhost
.
As seções de configuração das diretrizes deste artigo mostram exemplos da configuração correta. Verifique cuidadosamente cada seção do artigo procurando por configuração incorreta de aplicativos e IP.
Se a configuração parecer correta:
Analise os logs do aplicativo.
Examine o tráfego de rede entre o aplicativo cliente e o aplicativo IP ou servidor com as ferramentas de desenvolvedor do navegador. Muitas vezes, uma mensagem de erro exata ou uma mensagem com uma pista do que está causando o problema é retornada ao cliente pelo IP ou aplicativo de servidor depois de fazer uma solicitação. A orientação das ferramentas de desenvolvedor pode ser encontrada nos seguintes artigos:
- Google Chrome (documentação do Google)
- Microsoft Edge
- Mozilla Firefox (documentação da Mozilla)
Para versões de Blazor em que um JSON Web Token (JWT) é usado, decodifice o conteúdo do token usado para autenticar um cliente ou acessar uma API da Web do servidor, dependendo de onde o problema está ocorrendo. Para obter mais informações, consulte Inspecionar o conteúdo de um JSON Web Token (JWT).
A equipa de documentação responde a comentários sobre os documentos e a erros em artigos (abra um problema na secção de comentários sobre Esta página), mas não pode fornecer suporte ao produto em si. Vários fóruns públicos de suporte estão disponíveis para ajudar na solução de problemas de um aplicativo. Recomendamos o seguinte:
Os fóruns anteriores não pertencem nem são controlados pela Microsoft.
Para relatórios de bugs de estrutura reproduzíveis não relacionados à segurança, não sensíveis e não confidenciais, abra um problema com a unidade de produto ASP.NET Core. Não abra um problema com a unidade de produto até que você tenha investigado completamente a causa de um problema e não possa resolvê-lo sozinho e com a ajuda da comunidade em um fórum de suporte público. A unidade de produto não é capaz de solucionar problemas de aplicativos individuais que estão quebrados devido a simples erros de configuração ou casos de uso envolvendo serviços de terceiros. Se um relatório for de natureza sensível ou confidencial ou descrever uma possível falha de segurança no produto que os ciberatacantes podem explorar, consulte Relatando problemas de segurança e bugs (
dotnet/aspnetcore
repositório GitHub).Cliente não autorizado para ME-ID
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Falha na autorização. Estes requisitos não foram atendidos: DenyAnonymousAuthorizationRequirement: Requer um usuário autenticado.
Erro de retorno de chamada de login do ME-ID:
- Erro:
unauthorized_client
- Descrição:
AADB2C90058: The provided application is not configured to allow public clients.
Para resolver o erro:
- No portal do Azure, acesse o manifesto do aplicativo .
- Defina o atributo
allowPublicClient
comonull
outrue
.
- Erro:
Cookies e dados do site
Os cookies e os dados do site podem persistir nas atualizações do aplicativo e interferir nos testes e na solução de problemas. Desmarque o seguinte ao fazer alterações no código do aplicativo, alterações na conta do usuário com o provedor ou alterações na configuração do aplicativo do provedor:
- Cookies de início de sessão do utilizador
- Cookies de aplicações
- Dados do site em cache e armazenados
Uma abordagem para evitar que cookies persistentes e dados do site interfiram com testes e solução de problemas é:
- Configurar um navegador
- Use um navegador para testar que você pode configurar para excluir todos os dados cookie e do site sempre que o navegador for fechado.
- Verifique se o navegador está fechado manualmente ou pelo IDE para qualquer alteração na configuração do aplicativo, do usuário de teste ou do provedor.
- Use um comando personalizado para abrir um navegador no modo InPrivate ou de navegação anônima no Visual Studio:
- Abra caixa de diálogo Procurar com no botão Executar do Visual Studio.
- Selecione o botão Adicionar.
- Forneça o caminho para o seu navegador no campo do programa. Os seguintes caminhos executáveis são locais de instalação típicos para o Windows 10. Se o seu navegador estiver instalado em um local diferente ou você não estiver usando o Windows 10, forneça o caminho para o executável do navegador.
- Microsoft Edge:
C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
- Google Chrome:
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
- Mozilla Firefox:
C:\Program Files\Mozilla Firefox\firefox.exe
- Microsoft Edge:
- No campo Argumentos, forneça a opção de linha de comando que o navegador usa para abrir no modo InPrivate ou de navegação anônima. Alguns navegadores exigem o URL do aplicativo.
- Microsoft Edge: Use
-inprivate
. - Google Chrome: Use
--incognito --new-window {URL}
, onde o espaço reservado{URL}
é o URL a ser aberto (por exemplo,https://localhost:5001
). - Mozilla Firefox: Use
-private -url {URL}
, onde o espaço reservado{URL}
é o URL a ser aberto (por exemplo,https://localhost:5001
).
- Microsoft Edge: Use
- Forneça um nome no campo Nome amigável. Por exemplo,
Firefox Auth Testing
. - Selecione o botão OK.
- Para evitar ter que selecionar o perfil do navegador para cada iteração de teste com um aplicativo, defina o perfil como padrão com o botão Definir como padrão.
- Certifique-se de que o navegador está fechado pelo IDE para qualquer alteração na configuração do aplicativo, usuário de teste ou provedor.
Atualizações de aplicativos
Um aplicativo em funcionamento pode falhar imediatamente após atualizar o SDK do .NET Core na máquina de desenvolvimento ou alterar as versões do pacote no aplicativo. Em alguns casos, pacotes incoerentes podem quebrar um aplicativo ao executar grandes atualizações. A maioria desses problemas pode ser corrigida seguindo estas instruções:
- Limpe os caches de pacotes NuGet do sistema local executando
dotnet nuget locals all --clear
a partir de um shell de comando. - Exclua as pastas
bin
eobj
do projeto. - Restaure e reconstrua o projeto.
- Exclua todos os arquivos na pasta de implantação no servidor antes de reimplantar o aplicativo.
Observação
Não há suporte para o uso de versões de pacote incompatíveis com a estrutura de destino do aplicativo. Para obter informações sobre um pacote, use a Galeria NuGet .
Executar o aplicativo Server
Ao testar e solucionar problemas de uma solução hospedada de Blazor WebAssembly, certifique-se de estar a executar o aplicativo a partir do projeto Server
.
Inspecionar o usuário
O componente User
a seguir pode ser usado diretamente em aplicativos ou servir como base para personalização adicional.
User.razor
:
@page "/user"
@attribute [Authorize]
@using System.Text.Json
@using System.Security.Claims
@inject IAccessTokenProvider AuthorizationService
<h1>@AuthenticatedUser?.Identity?.Name</h1>
<h2>Claims</h2>
@foreach (var claim in AuthenticatedUser?.Claims ?? Array.Empty<Claim>())
{
<p class="claim">@(claim.Type): @claim.Value</p>
}
<h2>Access token</h2>
<p id="access-token">@AccessToken?.Value</p>
<h2>Access token claims</h2>
@foreach (var claim in GetAccessTokenClaims())
{
<p>@(claim.Key): @claim.Value.ToString()</p>
}
@if (AccessToken != null)
{
<h2>Access token expires</h2>
<p>Current time: <span id="current-time">@DateTimeOffset.Now</span></p>
<p id="access-token-expires">@AccessToken.Expires</p>
<h2>Access token granted scopes (as reported by the API)</h2>
@foreach (var scope in AccessToken.GrantedScopes)
{
<p>Scope: @scope</p>
}
}
@code {
[CascadingParameter]
private Task<AuthenticationState> AuthenticationState { get; set; }
public ClaimsPrincipal AuthenticatedUser { get; set; }
public AccessToken AccessToken { get; set; }
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
var state = await AuthenticationState;
var accessTokenResult = await AuthorizationService.RequestAccessToken();
if (!accessTokenResult.TryGetToken(out var token))
{
throw new InvalidOperationException(
"Failed to provision the access token.");
}
AccessToken = token;
AuthenticatedUser = state.User;
}
protected IDictionary<string, object> GetAccessTokenClaims()
{
if (AccessToken == null)
{
return new Dictionary<string, object>();
}
// header.payload.signature
var payload = AccessToken.Value.Split(".")[1];
var base64Payload = payload.Replace('-', '+').Replace('_', '/')
.PadRight(payload.Length + (4 - payload.Length % 4) % 4, '=');
return JsonSerializer.Deserialize<IDictionary<string, object>>(
Convert.FromBase64String(base64Payload));
}
}
Inspecionar o conteúdo de um JSON Web Token (JWT)
Para decodificar um JSON Web Token (JWT), use a ferramenta jwt.ms da Microsoft. Os valores na interface do usuário nunca saem do navegador.
Exemplo de JWT codificado (abreviado para exibição):
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j ... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q
Exemplo de JWT decodificado pela ferramenta para um aplicativo que se autentica no Azure AAD B2C:
{
"typ": "JWT",
"alg": "RS256",
"kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
"exp": 1610059429,
"nbf": 1610055829,
"ver": "1.0",
"iss": "https://mysiteb2c.b2clogin.com/11112222-bbbb-3333-cccc-4444dddd5555/v2.0/",
"sub": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"aud": "00001111-aaaa-2222-bbbb-3333cccc4444",
"nonce": "bbbb0000-cccc-1111-dddd-2222eeee3333",
"iat": 1610055829,
"auth_time": 1610055822,
"idp": "idp.com",
"tfp": "B2C_1_signupsignin"
}.[Signature]
Recursos adicionais
- Identity e tipos de conta para aplicativos de unilocatário e multilocatário
- ASP.NET Core Blazor WebAssembly cenários de segurança adicionais
- Crie uma versão personalizada da biblioteca JavaScript Authentication.MSAL
- Solicitações de API da Web não autenticadas ou não autorizadas em um aplicativo com um cliente padrão seguro
- ASP.NET Core Blazor WebAssembly com grupos e funções do Microsoft Entra ID
- plataforma de identidade Microsoft e Microsoft Entra ID com ASP.NET Core
- Documentação da plataforma de identidade da Microsoft
- Práticas recomendadas de segurança para propriedades de aplicativos no Microsoft Entra ID