Configurar a autenticação em um aplicativo desktop WPF de exemplo usando o Azure AD B2C
Este artigo usa um aplicativo de desktop WPF (Windows Presentation Foundation) de amostra para ilustrar como adicionar a autenticação no Azure AD B2C (Azure Active Directory B2C) aos seus aplicativos de desktop.
Visão geral
O OIDC (OpenID Connect) é um protocolo de autenticação criado com base no OAuth 2.0. Você pode usar o OIDC para conectar usuários com segurança a um aplicativo. Este aplicativo de desktop de amostra usa a MSAL (Biblioteca de Autenticação da Microsoft) com o fluxo de PKCE (Proof Key for Code Exchange) do código de autorização do OIDC. A MSAL é uma biblioteca fornecida pela Microsoft que simplifica a adição do suporte de autenticação e autorização a aplicativos de desktop.
O fluxo de entrada envolve as seguintes etapas:
- Os usuários abrem o aplicativo e selecionam conectar.
- O aplicativo abre o navegador do sistema do dispositivo de desktop e inicia uma solicitação de autenticação para o Azure AD B2C.
- Os usuários se inscrevem ou se conectam, redefinem a senha ou se conectam com uma conta de rede social.
- Depois que os usuários entram com sucesso, o Azure AD B2C retorna um código de autorização para o aplicativo.
- O aplicativo executa as seguintes ações:
- Ele troca o código de autorização por um token de ID, token de acesso e token de atualização.
- Ele lê as declarações do token da ID.
- Ele armazena os tokens em um cache na memória para usar depois.
Visão geral do registro do aplicativo
Para permitir que o aplicativo entre com o Azure AD B2C e chame uma API Web, registre dois aplicativos no diretório do Azure AD B2C.
O registro de aplicativo da área de trabalho permite que o seu aplicativo entre com o Azure AD B2C. Durante o registro do aplicativo, especifique o URI de redirecionamento. O URI de redirecionamento é o ponto de extremidade para o qual os usuários são redirecionados pelo Azure AD B2C após a autenticação no Azure AD B2C. O processo de registro de aplicativo gera um ID de aplicativo, também conhecido como ID de cliente, que identifica exclusivamente seu aplicativo de desktop (por exemplo, ID de aplicativo: 1).
O registro da API Web permite que o aplicativo chame uma API Web protegida. O registro expõe as permissões da API Web (escopos). O processo de registro de aplicativo gera um ID de aplicativo, que identifica exclusivamente sua API da Web (por exemplo, ID de aplicativo: 2). Conceda permissões ao aplicativo da área de trabalho (ID do aplicativo: 1) para os escopos da API Web (ID do aplicativo: 2).
O registro e a arquitetura do aplicativo são ilustrados nos seguintes diagramas:
Chamar uma API Web
Após a autenticação, os usuários interagem com o aplicativo, que invoca uma API Web protegida. A API Web usa a autenticação de token de portador. O token de portador é o token de acesso que o aplicativo obteve do Azure AD B2C. O aplicativo passa o token no cabeçalho de autorização da solicitação HTTPS.
Authorization: Bearer <access token>
Se o escopo do token de acesso não corresponder aos escopos da API Web, a biblioteca de autenticação obterá um novo token de acesso com os escopos corretos.
O fluxo de saída
O fluxo de saída envolve as seguintes etapas:
- No aplicativo, os usuários sairão.
- O aplicativo limpa seus objetos de sessão e a biblioteca de autenticação limpa seu cache de tokens.
- O aplicativo leva os usuários para o ponto de extremidade de saída do Azure AD B2C para encerrar a sessão do Azure AD B2C.
- Os usuários são redirecionados de volta para o aplicativo.
Pré-requisitos
Um computador que executa o Visual Studio 2019 com desenvolvimento de desktop .NET.
Etapa 1: configurar o fluxo de usuário
Quando os usuários tentam entrar, o aplicativo inicia uma solicitação de autenticação para o ponto de extremidade de autorização por meio de um fluxo de usuário. O fluxo de usuários define e controla a experiência do usuário. Quando o fluxo é concluído, o Azure AD B2C gera um token e redireciona o usuário de volta para o aplicativo.
Se você ainda não fez isso, crie um fluxo de usuário ou uma política personalizada. Repita as etapas para criar três fluxos de usuário separados, da seguinte forma:
- Um fluxo de usuário combinado de entrada e inscrição, como
susi
. Esse fluxo de usuário também dá suporte à experiência Esqueceu sua senha. - Um fluxo de usuário de edição de perfil, como
edit_profile
. - Um fluxo de usuário de Redefinição de senha, como
reset_password
.
O Azure AD B2C acrescenta B2C_1_
ao início do nome do fluxo de usuário. Por exemplo, susi
torna-se B2C_1_susi
.
Etapa 2: registrar seu aplicativo
Crie o aplicativo de desktop e o registro do aplicativo da API da Web e especifique os escopos da API da Web.
Etapa 2.1: registrar o aplicativo de API Web
Para criar o registro do aplicativo da API Web (ID do Aplicativo: 2), siga estas etapas:
Entre no portal do Azure.
Verifique se você está usando o diretório que contenha seu locatário do Azure AD B2C. Selecione o ícone Diretórios + assinaturas na barra de ferramentas do portal.
Na página Configurações do portal | Diretórios + assinaturas, encontre o diretório Azure Active Directory B2C na lista Nome do diretório e, em seguida, selecione Alternar.
No portal do Azure, pesquise e selecione Azure AD B2C.
Escolha Registros de aplicativo e Novo registro.
Insira um Nome para o aplicativo, (por exemplo, my-api1). Deixe os valores padrão para URI de redirecionamento e tipos de conta com suporte.
Selecione Registrar.
Depois que o registro do aplicativo for concluído, selecione Visão Geral.
Registre o valor da ID do aplicativo (cliente) para uso posterior, quando você configurar o aplicativo Web.
Etapa 2.2: configurar escopos de aplicativo de API Web
Selecione o aplicativo my-api1 que você criou (ID do Aplicativo: 2) para abrir a página de Visão Geral do aplicativo.
Em Gerenciar, selecione Expor uma API.
Ao lado de URI do ID do Aplicativo, selecione o link Definir. Substitua o valor padrão (identificador exclusivo, GUID) por um nome exclusivo (por exemplo, tasks-api) e selecione Salvar.
Quando o aplicativo Web solicita um token de acesso à API Web, ele deve adicionar esse URI como prefixo para cada escopo que você definir para a API.
Em Escopos definidos por esta API, selecione Adicionar um escopo.
Para criar um escopo que define o acesso de leitura à API:
- Para Nome do escopo, insira tasks.read.
- Para Nome de exibição de consentimento do administrador, insira Acesso de leitura à API de tarefas.
- Para Descrição do consentimento do administrador, insira Permitir acesso de leitura à API de tarefas.
Selecione Adicionar escopo.
Selecione Adicionar escopo e adicione um escopo que define o acesso de gravação à API:
- Para Nome do escopo, insira tasks.write.
- Para Nome de exibição de consentimento do administrador, insira Acesso de gravação à API de tarefas.
- Para Descrição do consentimento do administrador, insira Permitir acesso de gravação à API de tarefas.
Selecione Adicionar escopo.
Etapa 2.3: registrar o aplicativo de desktop
Para criar o registro do aplicativo de desktop, faça o seguinte:
- Entre no portal do Azure.
- Escolha Registros de aplicativo e Novo registro.
- Em Nome, insira um nome para o aplicativo (por exemplo, desktop-app1).
- Em Tipos de conta com suporte, selecione Contas em qualquer provedor de identidade ou diretório organizacional (para autenticar usuários com fluxos dos usuários) .
- Em Redirecionar URI, selecione Cliente público/nativo (desktop & desktop) e, na caixa da URL, insira
https://your-tenant-name.b2clogin.com/oauth2/nativeclient
. Substituayour-tenant-name
pelo seu nome de locatário. Para obter mais opções, veja Configurar o URI de redirecionamento. - Selecione Registrar.
- Depois que o registro do aplicativo for concluído, selecione Visão Geral.
- Registre o ID de aplicativo (cliente) para uso posterior ao configurar o aplicativo de desktop.
Etapa 2.4: conceda ao aplicativo de desktop permissões para a API da Web
Para conceder permissões ao aplicativo (ID do Aplicativo: 1), siga estas etapas:
Selecione Registros de aplicativo e, em seguida, selecione o aplicativo que você criou (ID do Aplicativo: 1).
Em Gerenciar, selecione Permissões de API.
Em Permissões Configuradas, selecione Adicionar uma permissão.
Selecione a guia Minhas APIs.
Selecione a API (ID do Aplicativo: 2) que deverá conceder acesso ao aplicativo Web. Por exemplo, insira my-api1.
Em Permissão, expanda tarefas e, em seguida, selecione os escopos definidos anteriormente (por exemplo, tasks.read e tasks.write).
Selecione Adicionar Permissões.
Selecione Fornecer consentimento do administrador para <nome do seu locatário>.
Selecione Sim.
Selecione Atualizar e, em seguida, verifique se Concedido para... aparece em Status para ambos os escopos.
Na lista Permissões configuradas, selecione o escopo e, em seguida, copie o nome completo do escopo.
Etapa 3: configurar a API Web de exemplo
Esse exemplo adquire um token de acesso com os escopos relevantes que o aplicativo de desktop pode usar para uma API da Web. Para chamar uma API da Web a partir do código, faça o seguinte:
- Use uma API Web existente ou crie uma. Para obter mais informações, confira Habilitar autenticação em sua própria API Web usando o Azure AD B2C.
- Depois de configurar a API Web, copie o URI do ponto de extremidade dela. Você usará o ponto de extremidade da API Web nas próximas etapas.
Dica
Se você não tiver uma API Web, ainda poderá executar este exemplo. Nesse caso, o aplicativo retorna o token de acesso, mas não poderá chamar a API Web.
Etapa 4: obter o exemplo de aplicativo da área de trabalho WPF
Baixe o arquivo .zip ou clone o aplicativo da Web de amostra do repositório GitHub.
git clone https://github.com/Azure-Samples/active-directory-b2c-dotnet-desktop.git
Abra a solução active-directory-b2c-wpf (o arquivo active-directory-b2c-wpf.sln) no Visual Studio.
Etapa 5: configurar o aplicativo da área de trabalho de exemplo
No projeto active-directory-b2c-wpf, abra o arquivo App.xaml.cs. Os membros da classe App.xaml.cs
contêm informações sobre seu provedor de identidade Azure AD B2C. O aplicativo de desktop usa essas informações para estabelecer uma relação de confiança com o Azure AD B2C, conectar e desconectar usuários, adquirir tokens e validá-los.
Atualize os seguintes membros de classe:
Chave | Valor |
---|---|
TenantName |
A primeira parte do nome do locatário do Azure Active Directory B2C (por exemplo, contoso.b2clogin.com ). |
ClientId |
A ID do aplicativo da área de trabalho da Etapa 2.3. |
PolicySignUpSignIn |
O fluxo de conexão ou inscrição de usuário ou a política personalizada que você criou na etapa 1. |
PolicyEditProfile |
O fluxo de edição de perfil de usuário ou a política personalizada que você criou na etapa 1. |
ApiEndpoint |
(Opcional) O ponto de extremidade da API da Web criado na etapa 3 (por exemplo, https://contoso.azurewebsites.net/hello ). |
ApiScopes |
Os escopos da API da Web que você criou na etapa 2.4. |
Seu arquivo App.xaml.cs final deve se parecer com o seguinte código C#:
public partial class App : Application
{
private static readonly string TenantName = "contoso";
private static readonly string Tenant = $"{TenantName}.onmicrosoft.com";
private static readonly string AzureAdB2CHostname = $"{TenantName}.b2clogin.com";
private static readonly string ClientId = "<web-api-app-application-id>";
private static readonly string RedirectUri = $"https://{TenantName}.b2clogin.com/oauth2/nativeclient";
public static string PolicySignUpSignIn = "b2c_1_susi";
public static string PolicyEditProfile = "b2c_1_edit_profile";
public static string PolicyResetPassword = "b2c_1_reset";
public static string[] ApiScopes = { $"https://{Tenant}//api/tasks.read" };
public static string ApiEndpoint = "https://contoso.azurewebsites.net/hello";
Etapa 6: executar e testar o aplicativo da área de trabalho
Pressione F5 para criar e executar a amostra.
Selecione Conectar e inscreva-se ou entre com sua conta do Azure AD B2C local ou social.
Após uma inscrição ou entrada bem-sucedida, os detalhes do token são exibidos no painel inferior do aplicativo WPF.
Selecione Chamar API para chamar a API da Web.
Próximas etapas
Aprenda a Configurar opções de autenticação em um aplicativo de desktop WPF usando o Azure AD B2C.