Configuração de login externo do Twitter com ASP.NET Core

Por Valeriy Novytskyy e Rick Anderson

Este exemplo mostra como permitir que os usuários se inscrevam com sua conta do Twitter usando um projeto de exemplo ASP.NET Core 3.0 criado na página anterior.

Criar o aplicativo no Twitter

  • Adicione o pacote Microsoft.AspNetCore.Authentication.Twitter NuGet ao projeto.

  • Navegue https://apps.twitter.com/ até e entre. Se você ainda não tiver uma conta do Twitter, use o link Inscrever-se agora para criar uma.

  • Selecione Criar um aplicativo. Preencha o Nome do aplicativo, a Descrição do aplicativo e o URI do site público (isso pode ser temporário até que você registre o nome de domínio):

  • Marque a caixa ao lado de Habilitar Entrar com o Twitter

  • Microsoft.AspNetCore.Identity exige que os usuários tenham um endereço de email por padrão. Vá para a guia Permissões, clique no botão Editar e marque a caixa ao lado de Solicitar endereço de email dos usuários.

  • Insira o URI de desenvolvimento /signin-twitter com acrescentado ao campo URLs de retorno de chamada (por exemplo: https://webapp128.azurewebsites.net/signin-twitter ). O esquema de autenticação do Twitter configurado posteriormente neste exemplo manipulará automaticamente as solicitações na /signin-twitter rota para implementar o fluxo OAuth.

    Observação

    O segmento de URI /signin-twitter é definido como o retorno de chamada padrão do provedor de autenticação do Twitter. Você pode alterar o URI de retorno de chamada padrão ao configurar o middleware de autenticação do Twitter por meio da propriedade RemoteAuthenticationOptions.CallbackPath herdada da classe TwitterOptions.

  • Preencha o restante do formulário e selecione Criar. Novos detalhes do aplicativo são exibidos:

Armazenar a chave e o segredo da API do consumidor do Twitter

Armazene configurações confidenciais, como a chave de API do consumidor do Twitter e o segredo com o Gerenciador de Segredos. Para este exemplo, use as seguintes etapas:

  1. Inicialize o projeto para armazenamento secreto de acordo com as instruções em Habilitar armazenamento secreto.

  2. Armazene as configurações confidenciais no armazenamento de segredos local com as chaves de segredos Authentication:Twitter:ConsumerKey e Authentication:Twitter:ConsumerSecret :

    dotnet user-secrets set "Authentication:Twitter:ConsumerAPIKey" "<consumer-api-key>"
    dotnet user-secrets set "Authentication:Twitter:ConsumerSecret" "<consumer-secret>"
    

O : separador não funciona com chaves hierárquicas de variável de ambiente em todas as plataformas. __, o sublinhado duplo, é:

  • Com suporte em todas as plataformas. Por exemplo, o : separador não é suportado pelo Bash,mas __ é.
  • Substituído automaticamente por um :

Esses tokens podem ser encontrados na guia Chaves e Tokens de Acesso depois de criar um novo aplicativo do Twitter:

Configurar a autenticação do Twitter

Adicione o serviço do Twitter no ConfigureServices método no arquivo Startup.cs:

{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options =>
        options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();

    services.AddAuthentication().AddTwitter(twitterOptions =>
    {
        twitterOptions.ConsumerKey = Configuration["Authentication:Twitter:ConsumerAPIKey"];
        twitterOptions.ConsumerSecret = Configuration["Authentication:Twitter:ConsumerSecret"];
        twitterOptions.RetrieveUserDetails = true;
    });

}

A sobrecarga de addauthentication (cadeia de caracteres) define a propriedade defaultscheme . A sobrecarga de addauthentication<(ação>authenticationoptions) permite configurar opções de autenticação, que podem ser usadas para configurar esquemas de autenticação padrão para finalidades diferentes. Chamadas subsequentes AddAuthentication para substituir Propriedades de 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.

Vários provedores de autenticação

Caso o aplicativo exija vários provedores, encadeie os métodos de extensão do provedor em AddAuthentication:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

Consulte a referência da API TwitterOptions para obter mais informações sobre as opções de configuração com suporte na autenticação do Twitter. Isso pode ser usado para solicitar informações diferentes sobre o usuário.

Entrar com o Twitter

Execute o aplicativo e selecione Fazer logoff em. Uma opção para entrar com o Twitter é exibida:

Clicar no Twitter redireciona para o Twitter para autenticação:

Depois de inserir suas credenciais do Twitter, você será redirecionado de volta para o site, no qual poderá definir seu email.

Agora você está conectado usando suas credenciais do Twitter:

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, consulte Configure o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga.

Solução de problemas

  • ASP.NET Core somente 2.x: Se não estiver configurado chamando no , a tentativa de autenticação resultará em ArgumentException: a opção Identity services.AddIdentity ConfigureServices 'SignInScheme' deve ser fornecida. O modelo de projeto usado neste exemplo garante que isso seja feito.
  • Se o banco de dados do site não tiver sido criado aplicando a migração inicial, uma operação de banco de dados falhará ao processar o erro de solicitação. Toque em Aplicar Migrações para criar o banco de dados e atualizar para continuar após o erro.

Próximas etapas

  • Este artigo mostrou como você pode se autenticar com o Twitter. Você pode seguir uma abordagem semelhante para autenticar com outros provedores listados na página anterior.

  • Depois de publicar seu site no aplicativo Web do Azure, você deverá redefinir o no portal do ConsumerSecret desenvolvedor do Twitter.

  • De acordo Authentication:Twitter:ConsumerKey com Authentication:Twitter:ConsumerSecret as configurações do aplicativo e no portal do Azure. O sistema de configuração é definido para ler chaves de variáveis de ambiente.