Configuração de logon externo do Google no ASP.NET Core
Por Valeriy Novytskyy, Rick Anderson e Sharaf Abacery
Este tutorial mostra como permitir que os usuários entrem com sua conta do Google usando o projeto ASP.NET Core criado na página anterior.
Criar a ID e o segredo do cliente do Google OAuth 2.0
Siga as diretrizes em Integrando o Google Sign-In ao seu aplicativo Web (documentação do Google)
Acesse os Serviços da API do Google&.
Um Projeto deve existir primeiro; talvez seja necessário criar um. Depois que um projeto for selecionado, acesse o Dashboard .
Na tela de consentimento do Oauth do Painel:
- Selecione Tipo de Usuário – Externo e CRIAR.
- Na caixa de diálogo de informações do aplicativo , forneça um nome para o aplicativo , um endereço de email de suporte do usuário e informações de contato do desenvolvedor .
- Percorra a etapa Escopos.
- Percorra a etapa Testar usuários.
- Revise a tela de consentimento do OAuth
e volte para o Dashboarddo aplicativo .
Na guia Credenciais do Painel do aplicativo, selecione CRIAR CREDENCIAIS>ID do cliente OAuth.
Selecione tipo de aplicativo>aplicativo Web, escolha um nome .
Na seção URIs de redirecionamento autorizados, selecione ADICIONAR URI para definir o URI de redirecionamento. Exemplo de URI de redirecionamento:
https://localhost:{PORT}/signin-google
, em que o espaço reservado{PORT}
é a porta do aplicativo.Selecione o botão CRIAR.
Salve a ID do Cliente e o Segredo do Cliente para uso na configuração do aplicativo.
Ao implantar o site:
- Atualize o URI de redirecionamento do aplicativo no Console do Google para o URI de redirecionamento implantado do aplicativo.
- Crie um novo registro de API do Google no Console do Google para o aplicativo de produção com seu URI de redirecionamento de produção.
Armazenar a ID e o segredo do cliente do Google
Armazene configurações confidenciais, como a ID do cliente do Google e valores do segredo com o Gerenciador de Segredos. Para este exemplo, use as seguintes etapas:
Inicialize o projeto para armazenamento secreto de acordo com as instruções em Habilitar armazenamento secreto.
Armazene as configurações confidenciais no repositório de segredos local com as chaves secretas
Authentication:Google:ClientId
eAuthentication:Google:ClientSecret
:dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"
O separador :
não é compatível com chaves hierárquicas de variáveis de ambiente em todas as plataformas. Por exemplo, o separador :
não é suportado pelo Bash . O sublinhado duplo, __
, é:
- Compatível com todas as plataformas.
- Substituição automática por dois pontos,
:
.
Você pode gerenciar suas credenciais e o uso da API no console de API .
Configurar a autenticação do Google
- Adicione o pacote NuGet
Google.Apis.Auth.AspNetCore3
ao aplicativo. - Adicione o serviço de Autenticação ao
program.cs
: - Siga
Add Authtication for asp.net app
A chamada para AddIdentity define as configurações de esquema padrão. A sobrecarga AddAuthentication(IServiceCollection, String) define a propriedade DefaultScheme. A sobrecarga de 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
substituem propriedades anteriormente configuradas de AuthenticationOptions.
AuthenticationBuilder métodos de extensão 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.
Entrar com o Google
- Obtenha um link para a biblioteca no link do google developer library para obter o link da biblioteca.
- Em seguida, vá para a geração de botões do desenvolvedor do google
- Configure seu Controlador para corresponder ao
data-login_uri="{HostName}/{ControllerName}/{actionName}"
attrbute porque, após o logon bem-sucedido, ele encaminhará você para esse link. - Crie um controlador e uma ação que usa um argumento
string credential
, que é retornado pelo Google ao concluir o processo de logon. - Verifique o
credential
usando a seguinte linha de código:GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(credential);
- Isso recuperará as informações disponíveis sobre o usuário conectado, que pode ser armazenado em um banco de dados.
Alterar o URI de retorno de chamada padrão
O segmento de URI /signin-google
é configurado como o callback padrão do provedor de autenticação do Google. Você pode alterar o URI de retorno de chamada padrão ao configurar o middleware de autenticação do Google por meio da propriedade herdada RemoteAuthenticationOptions.CallbackPath da classe GoogleOptions.
Solução de problemas
- Se o login não funcionar e você não receber mensagens de erro, mude para o modo de desenvolvimento para facilitar a depuração do problema.
- Se o Identity não estiver configurado chamando
services.AddIdentity
emConfigureServices
, tentar autenticar resultará em ArgumentException: a opção "SignInScheme" deve ser fornecida. O modelo de projeto usado neste tutorial garante que Identity esteja configurado. - Se o banco de dados do site não tiver sido criado aplicando a migração inicial, você obterá uma operação de banco de dados falhou ao processar a solicitação erro. Selecione Aplicar Migrações para criar o banco de dados e atualize a página para continuar após o erro.
- Erro HTTP 500 depois de autenticar com êxito a solicitação pelo provedor OAuth 2.0, como o Google: consulte este problema do GitHub.
- Como implementar a autenticação externa com o Google para o React e outros aplicativos SPA: consulte este problema do GitHub.
Próximas etapas
- Este artigo mostrou como você pode se autenticar com o Google. Você pode seguir uma abordagem semelhante para se autenticar com outros provedores listados na página anterior.
- Depois de publicar o aplicativo no Azure, redefina o
ClientSecret
no Console de API do Google. - Defina o
Authentication:Google:ClientId
eAuthentication:Google:ClientSecret
como configurações de aplicativo no portal do Azure. O sistema de configuração é configurado para ler chaves de variáveis de ambiente.