Configuração do logon externo da conta Microsoft com o ASP.NET Core
Por Valeriy Novytskyy e Rick Anderson
Este exemplo mostra a você como habilitar os usuários para entrarem com suas contas Microsoft corporativas, escolares ou pessoais utilizando o projeto ASP.NET Core 6.0 criado na página anterior.
Crie o aplicativo no Portal do Desenvolvedor da Microsoft
- Adicione o pacote NuGet Microsoft.AspNetCore.Authentication.MicrosoftAccount ao projeto.
- Navegue até a página Portal do Azure - Registros de Aplicativos e crie ou entre em uma conta Microsoft:
Se você não tiver uma conta Microsoft, selecione Criar uma. Depois de entrar, você será redirecionado para a página Registros de Aplicativos:
- Selecione Novo registro.
- Insira um Nome.
- Selecione uma opção em Tipos de conta com suporte.
- Por padrão, o pacote
MicrosoftAccount
tem suporte para os Registros de aplicativos criados utilizando as opções "Contas em qualquer diretório organizacional" ou "Contas em qualquer diretório organizacional e contas Microsoft". - Para utilizar outras opções, defina os membros
AuthorizationEndpoint
eTokenEndpoint
deMicrosoftAccountOptions
usados para inicializar a autenticação da conta Microsoft para as URLs exibidas na página Pontos de Extremidade do Registro de Aplicativo depois que ele for criado (disponível clicando em Pontos de Extremidade na página Visão Geral).
- Por padrão, o pacote
- Em URI de Redirecionamento, insira a URL de desenvolvimento com o
/signin-microsoft
anexado. Por exemplo,https://localhost:5001/signin-microsoft
. O esquema de autenticação da Microsoft configurado posteriormente neste exemplo tratará automaticamente as solicitações na rota/signin-microsoft
para implementar o fluxo do OAuth. - Escolha Registrar
Criar o segredo do cliente
- No painel esquerdo, selecione Certificados e segredos.
- Em Segredos do cliente, selecione Novo segredo do cliente
- Adicione uma descrição para o segredo do cliente.
- Selecione o botão Adicionar.
- Em Segredos do cliente, copie o valor do segredo do cliente.
O segmento de URI /signin-microsoft
é definido como o retorno de chamada padrão do provedor de autenticação da Microsoft. Você pode alterar o URI de retorno de chamada padrão ao configurar o Middleware de autenticação da Microsoft por meio da propriedade RemoteAuthenticationOptions.CallbackPath herdada da classe MicrosoftAccountOptions.
Armazenar a ID e o segredo do cliente da Microsoft
Armazene configurações confidenciais, como a ID do aplicativo (cliente) da Microsoft encontrada na página Visão geral do registro do aplicativo e o segredo do cliente que você criou na Página de certificados e segredos com o Gerenciador de Segredos. Para este exemplo, use as seguintes etapas:
Inicialize o projeto para armazenamento de segredos de acordo com as instruções em Habilitar armazenamento de segredos.
Armazene as configurações confidenciais no repositório de segredos local com as chaves de segredos
Authentication:Microsoft:ClientId
eAuthentication:Microsoft:ClientSecret
:dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
O separador :
não funciona com chaves hierárquicas de variáveis de ambiente em todas as plataformas. __
, o sublinhado duplo, tem:
- Suporte em todas as plataformas. Por exemplo, o separador
:
não tem suporte pelo Bash, mas pelo__
tem. - Substituição automática por um
:
Configure a Autenticação da conta Microsoft
Adicione o serviço de autenticação ao Program
:
var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;
services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
});
A sobrecarga AddAuthentication(IServiceCollection, String) define a propriedade DefaultScheme. A sobrecarga AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) permite configurar opções de autenticação, que podem ser usadas para configurar esquemas de autenticação padrão para diferentes finalidades. Chamadas subsequentes para AddAuthentication
substitui as propriedades AuthenticationOptions configuradas anteriormente.
Os métodos de extensão AuthenticationBuilder que registram um manipulador de autenticação só podem ser chamados uma vez por esquema de autenticação. Existem sobrecargas que permitem configurar as propriedades do esquema, o nome do esquema e o nome de exibição.
Para obter mais informações sobre as opções de configuração que têm suporte para a autenticação da conta Microsoft, confira a referência da API MicrosoftAccountOptions. Você pode utilizar isso para solicitar informações diferentes sobre o usuário.
Entrar com uma conta Microsoft
- Execute o aplicativo e selecione Entrar. Uma opção para você entrar com a Microsoft aparecerá.
- Selecione para entrar com a Microsoft. Você será redirecionado para a Microsoft para fazer a autenticação. Depois de entrar com a sua conta Microsoft, você será solicitado a permitir que o aplicativo acesse as suas informações:
- Selecione Sim. Você será redirecionado de volta ao site, onde poderá definir seu email.
Agora você está conectado utilizando suas credenciais da Microsoft.
Vários provedores de autenticação
Quando o aplicativo exigir vários provedores, encadeie os métodos de extensão do provedor atrás de AddAuthentication:
services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });
Encaminhar informações de solicitação com um proxy ou balanceador de carga
Se o aplicativo for implantado atrás de um servidor proxy ou um balanceador de carga, algumas das informações da solicitação original podem ser encaminhadas para o aplicativo nos cabeçalhos de solicitação. Essas informações geralmente incluem o esquema de solicitação segura (https
), o host e o endereço IP do cliente. Os aplicativos não leem automaticamente esses cabeçalhos de solicitação para descobrir e usar as informações da solicitação original.
O esquema é usado na geração de link que afeta o fluxo de autenticação com provedores externos. Perder o esquema de seguro (https
) resulta no aplicativo gerando URLs de redirecionamento inseguros incorretos.
Use Middleware de cabeçalhos encaminhados para disponibilizar as informações da solicitação original ao aplicativo para o processamento da solicitação.
Para obter mais informações, veja Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga.
Solução de problemas
Se o provedor da conta Microsoft redirecionar você para uma página de erro ao entrar, observe os parâmetros da cadeia de caracteres do título e da descrição do erro diretamente após
#
(hashtag) no Uri.Embora a mensagem de erro pareça indicar um problema com a autenticação da Microsoft, a causa mais comum é o Uri do seu aplicativo não corresponder a nenhum dos URIs de Redirecionamento especificados para a plataforma Web.
Se Identity não for configurado chamando
services.AddIdentity
emConfigureServices
, a tentativa de autenticação resultará em ArgumentException: a opção 'SignInScheme' deve ser fornecida. O modelo de projeto utilizado neste exemplo certifica-se de que isso seja feito.Se o banco de dados do site não tiver sido criado com o aplicativo da migração inicial, você receberá o erro Falha na operação do banco de dados ao processar a solicitação. Toque em Aplicar migrações para criar o banco de dados e atualize para continuar após o erro.
Próximas etapas
- Esse artigo mostrou como você pode se autenticar com a Microsoft. Você pode seguir uma abordagem semelhante para se autenticar com outros provedores listados na página anterior.
- Depois que você publicar seu site no aplicativo Web do Azure, crie um novo segredo de cliente no Portal do desenvolvedor da Microsoft.
- Defina
Authentication:Microsoft:ClientId
eAuthentication:Microsoft:ClientSecret
como configurações do aplicativo no portal do Azure. O sistema de configuração está configurado para fazer a leitura das chaves das variáveis de ambiente.
Este exemplo mostra a você como habilitar os usuários para entrar com a conta Microsoft corporativa, escolar ou pessoal utilizando o projeto ASP.NET Core 3.0 criado na página anterior.
Crie o aplicativo no Portal do Desenvolvedor da Microsoft
- Adicione o pacote NuGet Microsoft.AspNetCore.Authentication.MicrosoftAccount ao projeto.
- Navegue até a página Portal do Azure - Registros de Aplicativos e crie ou entre em uma conta Microsoft:
Se você não tiver uma conta Microsoft, selecione Criar uma. Depois de entrar, você será redirecionado para a página Registros de Aplicativos:
- Selecione Novo registro.
- Insira um Nome.
- Selecione uma opção em Tipos de conta com suporte.
- Por padrão, o pacote
MicrosoftAccount
tem suporte para os Registros de aplicativos criados utilizando as opções "Contas em qualquer diretório organizacional" ou "Contas em qualquer diretório organizacional e contas Microsoft". - Para utilizar outras opções, defina os membros
AuthorizationEndpoint
eTokenEndpoint
deMicrosoftAccountOptions
usados para inicializar a autenticação da conta Microsoft para as URLs exibidas na página Pontos de Extremidade do Registro de Aplicativo depois que ele for criado (disponível clicando em Pontos de Extremidade na página Visão Geral).
- Por padrão, o pacote
- Em URI de Redirecionamento, insira a URL de desenvolvimento com o
/signin-microsoft
anexado. Por exemplo,https://localhost:5001/signin-microsoft
. O esquema de autenticação da Microsoft configurado posteriormente neste exemplo tratará automaticamente as solicitações na rota/signin-microsoft
para implementar o fluxo do OAuth. - Escolha Registrar
Criar o segredo do cliente
- No painel esquerdo, selecione Certificados e segredos.
- Em Segredos do cliente, selecione Novo segredo do cliente
- Adicione uma descrição para o segredo do cliente.
- Selecione o botão Adicionar.
- Em Segredos do cliente, copie o valor do segredo do cliente.
O segmento de URI /signin-microsoft
é definido como o retorno de chamada padrão do provedor de autenticação da Microsoft. Você pode alterar o URI de retorno de chamada padrão ao configurar o Middleware de autenticação da Microsoft por meio da propriedade RemoteAuthenticationOptions.CallbackPath herdada da classe MicrosoftAccountOptions.
Armazenar a ID e o segredo do cliente da Microsoft
Armazene configurações confidenciais, como a ID do aplicativo (cliente) da Microsoft encontrada na página Visão geral do registro do aplicativo e o segredo do cliente que você criou na Página de certificados e segredos com o Gerenciador de Segredos. Para este exemplo, use as seguintes etapas:
Inicialize o projeto para armazenamento de segredos de acordo com as instruções em Habilitar armazenamento de segredos.
Armazene as configurações confidenciais no repositório de segredos local com as chaves de segredos
Authentication:Microsoft:ClientId
eAuthentication:Microsoft:ClientSecret
:dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
O separador :
não funciona com chaves hierárquicas de variáveis de ambiente em todas as plataformas. __
, o sublinhado duplo, tem:
- Suporte em todas as plataformas. Por exemplo, o separador
:
não tem suporte pelo Bash, mas pelo__
tem. - Substituição automática por um
:
Configure a Autenticação da conta Microsoft
Adicionar o serviço da conta Microsoft ao Startup.ConfigureServices
:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
});
}
A sobrecarga AddAuthentication(IServiceCollection, String) define a propriedade DefaultScheme. A sobrecarga AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) permite configurar opções de autenticação, que podem ser usadas para configurar esquemas de autenticação padrão para diferentes finalidades. Chamadas subsequentes para AddAuthentication
substitui as propriedades AuthenticationOptions configuradas anteriormente.
Os métodos de extensão AuthenticationBuilder que registram um manipulador de autenticação só podem ser chamados uma vez por esquema de autenticação. Existem sobrecargas que permitem configurar as propriedades do esquema, o nome do esquema e o nome de exibição.
Para obter mais informações sobre as opções de configuração que têm suporte para a autenticação da conta Microsoft, confira a referência da API MicrosoftAccountOptions. Você pode utilizar isso para solicitar informações diferentes sobre o usuário.
Entrar com uma conta Microsoft
Execute o aplicativo e selecione Entrar. Uma opção para você entrar com a Microsoft aparecerá. Ao selecionar a Microsoft, você será redirecionado para a Microsoft para fazer a autenticação. Depois de entrar com a sua conta Microsoft, você será solicitado a permitir que o aplicativo acesse as suas informações:
Toque em Sim e você será redirecionado de volta ao site, no qual poderá definir o seu email.
Agora você está conectado utilizando suas credenciais da Microsoft.
Vários provedores de autenticação
Quando o aplicativo exigir vários provedores, encadeie os métodos de extensão do provedor atrás de AddAuthentication:
services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });
Encaminhar informações de solicitação com um proxy ou balanceador de carga
Se o aplicativo for implantado atrás de um servidor proxy ou um balanceador de carga, algumas das informações da solicitação original podem ser encaminhadas para o aplicativo nos cabeçalhos de solicitação. Essas informações geralmente incluem o esquema de solicitação segura (https
), o host e o endereço IP do cliente. Os aplicativos não leem automaticamente esses cabeçalhos de solicitação para descobrir e usar as informações da solicitação original.
O esquema é usado na geração de link que afeta o fluxo de autenticação com provedores externos. Perder o esquema de seguro (https
) resulta no aplicativo gerando URLs de redirecionamento inseguros incorretos.
Use Middleware de cabeçalhos encaminhados para disponibilizar as informações da solicitação original ao aplicativo para o processamento da solicitação.
Para obter mais informações, veja Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga.
Solução de problemas
Se o provedor da conta Microsoft redirecionar você para uma página de erro ao entrar, observe os parâmetros da cadeia de caracteres do título e da descrição do erro diretamente após
#
(hashtag) no Uri.Embora a mensagem de erro pareça indicar um problema com a autenticação da Microsoft, a causa mais comum é o Uri do seu aplicativo não corresponder a nenhum dos URIs de Redirecionamento especificados para a plataforma Web.
Se Identity não for configurado chamando
services.AddIdentity
emConfigureServices
, a tentativa de autenticação resultará em ArgumentException: a opção 'SignInScheme' deve ser fornecida. O modelo de projeto utilizado neste exemplo certifica-se de que isso seja feito.Se o banco de dados do site não tiver sido criado com o aplicativo da migração inicial, você receberá o erro Falha na operação do banco de dados ao processar a solicitação. Toque em Aplicar migrações para criar o banco de dados e atualize para continuar após o erro.
Próximas etapas
- Esse artigo mostrou como você pode se autenticar com a Microsoft. Você pode seguir uma abordagem semelhante para se autenticar com outros provedores listados na página anterior.
- Depois que você publicar seu site no aplicativo Web do Azure, crie um novo segredo de cliente no Portal do desenvolvedor da Microsoft.
- Defina
Authentication:Microsoft:ClientId
eAuthentication:Microsoft:ClientSecret
como configurações do aplicativo no portal do Azure. O sistema de configuração é definido para ler chaves de variáveis de ambiente.