Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Note
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 10 deste artigo.
Warning
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.
Este artigo explica como proteger um aplicativo autônomo ASP.NET Core Blazor WebAssembly com a biblioteca de Blazor WebAssembly autenticação.
A Blazor WebAssembly biblioteca de autenticação (Authentication.js) suporta apenas o fluxo de código de autorização PKCE (Proof Key for Code Exchange) através da Microsoft Authentication Library (MSAL, msal.js). Para implementar outros fluxos de concessão, acesse as orientações do MSAL para implementar o MSAL diretamente, mas não oferecemos suporte nem recomendamos o uso de fluxos de concessão diferentes do PKCE para Blazor aplicativos.
Para as diretrizes do Microsoft Entra (ME-ID) e do Azure Ative Directory B2C (AAD B2C), não siga as orientações neste tópico. Consulte Proteger um aplicativo autônomo do ASP.NET Core Blazor WebAssembly com a ID do Microsoft Entra ou Proteger um aplicativo autônomo do ASP.NET Core Blazor WebAssembly com o Azure Ative Directory B2C.
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.
Walkthrough
As subseções do passo a passo explicam como:
- Registar uma aplicação
- Criar a aplicação Blazor
- Executar o aplicativo
Registar uma aplicação
Registre um aplicativo com um provedor (IP) OpenID Connect (OIDC)Identity seguindo as orientações fornecidas pelo mantenedor do IP.
Registe as seguintes informações:
- Autoridade (por exemplo,
https://accounts.google.com/). - ID do aplicativo (cliente) (por exemplo,
2...7-e...q.apps.googleusercontent.com). - Configuração de IP adicional (consulte a documentação do IP).
Note
O IP deve usar OIDC. Por exemplo, o IP do Facebook não é um provedor compatível com OIDC, portanto, as orientações neste tópico não funcionam com o IP do Facebook. Para obter mais informações, consulte Secure ASP.NET Core Blazor WebAssembly.
Criar a aplicação Blazor
Para criar um aplicativo autônomo Blazor WebAssembly que use a Microsoft.AspNetCore.Components.WebAssembly.Authentication biblioteca, siga as orientações para sua escolha de ferramentas. Se estiver adicionando suporte para autenticação, consulte a seção Partes do aplicativo deste artigo para obter orientação sobre como instalar e configurar o aplicativo.
Para criar um novo projeto Blazor WebAssembly com um mecanismo de autenticação:
Depois de escolher o Blazor WebAssembly modelo de aplicativo , defina o tipo de autenticação como Contas individuais.
Depois de escolher o Blazor WebAssembly modelo de aplicativo , defina o tipo de autenticação como Contas individuais. Confirme se a caixa de seleção ASP.NET Core Hosted não está marcada .
A seleção de Contas Individuais utiliza o sistema do Identity ASP.NET Core. Essa seleção adiciona suporte à autenticação e não resulta no armazenamento de usuários em um banco de dados. As seções a seguir deste artigo fornecem mais detalhes.
Configurar o aplicativo
Configure o aplicativo seguindo as orientações do IP. No mínimo, a app requer as definições de configuração Local:Authority e Local:ClientId no ficheiro wwwroot/appsettings.json da app:
{
"Local": {
"Authority": "{AUTHORITY}",
"ClientId": "{CLIENT ID}"
}
}
Exemplo de localhost OIDC do Google OAuth 2.0 para um aplicativo executado no endereço na porta 5001:
{
"Local": {
"Authority": "https://accounts.google.com/",
"ClientId": "2...7-e...q.apps.googleusercontent.com",
"PostLogoutRedirectUri": "https://localhost:5001/authentication/logout-callback",
"RedirectUri": "https://localhost:5001/authentication/login-callback",
"ResponseType": "code"
}
}
O URI de redirecionamento (https://localhost:5001/authentication/login-callback) é registrado no console de APIs do Google emURIs de redirecionamento autorizados por >{NAME}>, onde {NAME} é o nome do cliente do aplicativo na lista de IDs do cliente OAuth 2.0 do console de APIs do Google.
Note
O fornecimento do número da porta para um localhost URI de redirecionamento não é necessário para alguns IPs OIDC de acordo com a especificação OAuth 2.0. Alguns IPs autorizam que o URI de reencaminhamento para endereços de loopback omita a porta. Outros permitem o uso de um curinga para o número da porta (por exemplo, *). Para obter informações adicionais, consulte a documentação do IP.
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 ser seguida nesta seção para uma aplicação básica funcional se você criou a aplicação usando a orientação na seção 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 Individuais, o aplicativo recebe automaticamente uma referência de pacote para o Microsoft.AspNetCore.Components.WebAssembly.Authentication pacote. 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.AspNetCore.Components.WebAssembly.Authentication ao aplicativo.
Note
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Suporte ao serviço de autenticação
O suporte para autenticação de usuários usando OpenID Connect (OIDC) é registrado no contêiner de serviço com o AddOidcAuthentication método de extensão fornecido pelo Microsoft.AspNetCore.Components.WebAssembly.Authentication pacote.
O AddOidcAuthentication método aceita um retorno de chamada para configurar os parâmetros necessários para autenticar um aplicativo usando OIDC. Os valores necessários para configurar o aplicativo podem ser obtidos do IP compatível com OIDC. Obtenha os valores ao registrar o aplicativo, o que normalmente ocorre em seu portal online.
Para um novo aplicativo, forneça valores para os {AUTHORITY} espaços reservados e {CLIENT ID} na configuração a seguir. Forneça outros valores de configuração necessários para uso com o IP do aplicativo. O exemplo é para o Google, que requer PostLogoutRedirectUri, RedirectUrie ResponseType. Se adicionar autenticação a um aplicativo, adicione manualmente o código e a configuração a seguir ao aplicativo com valores para os espaços reservados e outros valores de configuração.
No ficheiro Program:
builder.Services.AddOidcAuthentication(options =>
{
builder.Configuration.Bind("Local", options.ProviderOptions);
});
wwwroot/appsettings.json configuração
A configuração é fornecida pelo arquivo wwwroot/appsettings.json:
{
"Local": {
"Authority": "{AUTHORITY}",
"ClientId": "{CLIENT ID}"
}
}
Escopos de token de acesso
O Blazor WebAssembly modelo configura automaticamente os escopos padrão para openid e profile.
O modelo Blazor WebAssembly não configura automaticamente o aplicativo para solicitar um token de acesso para uma API segura. Para configurar um token de acesso como parte do processo de autenticação, adicione o escopo aos escopos de token padrão do OidcProviderOptions. Se estiver adicionando autenticação a um aplicativo, adicione manualmente o código a seguir e configure o URI do escopo.
No ficheiro Program:
builder.Services.AddOidcAuthentication(options =>
{
...
options.ProviderOptions.DefaultScopes.Add("{SCOPE URI}");
});
Para obter mais informações, consulte as seguintes seções do Cenários adicionais artigo:
Arquivo de importação
O namespace Microsoft.AspNetCore.Components.Authorization é disponibilizado em todo o aplicativo por meio do arquivo _Imports.razor:
...
@using Microsoft.AspNetCore.Components.Authorization
...
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.AspNetCore.Components.WebAssembly.Authentication/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
RedirectToLogingerencia 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
RedirectToLogingerencia o redirecionamento de usuários não autorizados para a página de login.
Devido a alterações na estrutura entre as versões do ASP.NET Core, a marcação Razor para o componente App (App.razor) não é mostrada nesta secçã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 . Selecione a versão no seletor de ramificação e procure o componente na pastaProjectTemplatesdo repositório porque ele foi movido ao longo dos anos.Note
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 Alternar entre 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 acessar é mantida para que o utilizador possa voltar a essa página se a autenticação for bem-sucedida usando:
- Estado do histórico de navegação no ASP.NET Core em .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.
O caminho de login pode ser personalizado pelo aplicativo (RemoteAuthenticationApplicationPathsOptions.LogInPath, padrões da estrutura (dotnet/aspnetcore fonte de referência)). O componente do RedirectToLogin modelo de projeto usa o caminho de login padrão do authentication/login.
Note
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 Alternar entre 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).
Se um aplicativo personalizar o caminho de login, siga uma das seguintes abordagens:
Corresponder o caminho na cadeia de caracteres codificada
RedirectToLoginno componente.Injete RemoteAuthenticationOptions para obter o valor configurado. Por exemplo, adote essa abordagem ao personalizar o caminho com AddApiAuthorizationo . Adicione as seguintes diretivas na parte superior do
RedirectToLogincomponente:@using Microsoft.Extensions.Options @inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> RemoteOptionsModifique o redirecionamento do componente no
OnInitializedmétodo:- Navigation.NavigateToLogin("authentication/login"); + Navigation.NavigateToLogin(RemoteOptions.Get(Options.DefaultName) + .AuthenticationPaths.LogInPath);Note
Se outros caminhos forem diferentes dos caminhos padrão do modelo de projeto ou da estrutura, eles deverão ser gerenciados da mesma maneira.
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 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
LoginDisplayno aplicativo gerado.Inspecione o componente
LoginDisplayna 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 modelado paraHostedigual atrueé utilizado.Note
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 Alternar entre 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; }
}
Note
Tipos de referência anuláveis (NRTs) e análise estática de estado nulo do compilador .NET são suportados 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 (?).
Troubleshoot
Logging
Para habilitar o log de depuração ou rastreamento para Blazor WebAssembly autenticação, consulte a seção Log de autenticação do lado do cliente do log do ASP.NET Core Blazor com o seletor de versão do artigo definido como ASP.NET Core no .NET 7 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 endpoints da API Web do servidor.
- Permissões incorretas ou ausentes para a API do servidor impedem os clientes de acederem aos endpoints da API web do servidor.
- Executar a aplicação numa porta diferente da configurada na URI de Redirecionamento do registo da aplicação 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)
- Borda da Microsoft
- 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 Inspecione o conteúdo de um JSON Web Token (JWT).
A equipa de documentação responde a feedback sobre documentos e a bugs em artigos (abra um problema na seção de feedback Esta página), mas não consegue fornecer suporte ao produto. 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 que não estejam relacionados à segurança, não sejam sensíveis nem 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/aspnetcorerepositório GitHub).Cliente não autorizado para ME-ID
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] A autorização falhou. Estes requisitos não foram atendidos: DenyAnonymousAuthorizationRequirement: Requer um usuário autenticado.
Erro ao retornar a 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
allowPublicClientcomonulloutrue.
- 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 login 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
- Utilize um navegador para testar se consegue configurar para excluir todos os dados cookie e os dados do site quando fechar o navegador.
- 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 a caixa de diálogo 'Procurar com' a partir do botão 'Executar' do Visual Studio.
- Selecione o botão Adicionar.
- Forneça o caminho para o seu navegador no campo 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 comandos que o navegador usa para abrir no modo InPrivate ou no modo de navegação anônima. Alguns navegadores exigem o URL do aplicativo.
- Microsoft Edge: Utilize
-inprivate. - Google Chrome: Use
--incognito --new-window {URL}, onde o placeholder{URL}é o URL a abrir (por exemplo,https://localhost:5001). - Mozilla Firefox: Utilize
-private -url {URL}, onde o marcador{URL}representa o URL a ser aberto (por exemplo,https://localhost:5001).
- Microsoft Edge: Utilize
- Forneça um nome no campo Nome amigável. Por exemplo,
Firefox Auth Testing. - Selecione o botão OK.
- Para evitar ter de selecionar o perfil do navegador para cada iteração de teste com uma aplicação, 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 na máquina de desenvolvimento ou alterar as versões do pacote dentro do 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 --cleara partir de um shell de comando. - Exclua as pastas
bineobjdo projeto. - Restaure e reconstrua o projeto.
- Exclua todos os arquivos na pasta de implantação no servidor antes de reimplantar o aplicativo.
Note
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 acerca de um pacote, utilize a Galeria NuGet.
Executar o aplicativo Server
Ao testar e resolver problemas de uma solução hospedada Blazor WebAssembly, certifique-se de estar a executar a aplicação 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), utilize a ferramenta jwt.ms disponibilizada pela 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
- ASP.NET Core Blazor WebAssembly cenários de segurança adicionais
- Solicitações de API da Web não autenticadas ou não autorizadas em um aplicativo com um cliente padrão seguro
-
Configurar ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga: Inclui orientações sobre:
- Usar o Middleware de Cabeçalhos Reencaminhados para manter as informações do esquema HTTPS em servidores proxy e redes internas.
- Cenários e casos de uso adicionais, incluindo configuração manual de esquemas, alterações do caminho de pedido para roteamento correto de pedidos e encaminhamento do esquema de pedido para proxies reversos Linux e em sistemas não-IIS.