ASP .NET Core - Autenticação com Google

Hoje veremos como realizar a autenticação usando as credenciais do Facebook em uma aplicação ASP .NET Core.

O OAuth é um protocolo de autenticação web e um padrão aberto para autorização.

Atualmente ele é muito usado para fazer o login em sites que usam as seguintes contas de usuário sem expor o seu registro : GOOGLE , FACEBOOK, TWITTER, MICROSOFT. LINKEDIN, GITHUB, FLICKER, YAHOO, DROPBOX

Para saber mais sobre os provedores de identidades acesse essse link  https://en.wikipedia.org/wiki/List_of_OAuth_providers

Como funciona o OAuth ?

O OAuth é framework de autorização que permite que um aplicativo obtenha acesso limitado às contas de um usuário no serviço HTTP no Facebook, no Google, Twitter, na Microsoft, etc.

Atualmente, não há necessidade de criar uma lógica de registro. Como alternativa, você pode escolher usar o provedor de login do identity. Nesse caso, uma pessoa se inscreve para o aplicativo e uma conta é criada para ele e a etapa de autenticação é atendida pelo provedor de identidade.

De forma bem resumida o processo para acessar as informações de outro website sem realizar o registro pode se feito em 3 etapas:

1 - Obter um token da solicitação - Request Token;
2 - Obter a autorização do usuário;
3 - Troca o token de solicitação por um token de acesso ;

A figura abaixo ilustra esse processo com o Facebook:

Autenticação com Facebook

A seguir veremos como realizar a autenticação usando o Facebook no Blazor.

Recursos usados:

Criando o projeto Blazor (Cliente side) no VS Community 2019

Abra o VS 2019 Community (versão mínima 16.6) e selecione a opção Create a New Project;

Selecione o template ASP .NET Core Web Application, e, Informe o nome Aspn_OAuth1;

Selecione .NET Core e ASP .NET Core 3.1 e marque o template Web Application(Model-View-Controller) e
 a seguir clique em Change para implementar a autenticação;

Marque a opção Individual User Accounts e Store user accounts in-app e clique em OK;

A seguir clique no botão Create para criar o projeto com autenticação.

Após a criação do projeto, abrindo o projeto, você vai verificar que foi criado no arquivo appsettings.json a string de conexão com o banco de dados SQL Server Local que será usada para criar o banco de dados e as tabelas do Identity.(Se desejar pode alterar o nome do servidor e do banco de dados)

A migração inicial estará pronta, e, para poder criar as tabelas e o banco de dados que será usado na autenticação vamos abrir uma janela do Package Manager Console e a seguir digitar o comando : Update-Database

Ao final teremos a aplicação pronta, e agora vamos iniciar a implementação da autenticação usando o Google.

Abra a janela de propriedades do projeto e obtenha a URL original e a com SSL usada para esta aplicação:

Criando  uma conta no Google

Você vai precisar ter uma conta no Google.

A primeira coisa a fazer é acessar  https://developers.google.com/identity/sign-in/web/sign-in e clicar no botão Configure project;

A seguir você precisa criar um projeto ou selecionar um já existente e clicar em NEXT:

A seguir informe de onde partirão as requisições e informe a URL original do projeto e clique em CREATE:

Depois você deve acessar a área das suas APIs criadas em https://console.developers.google.com/apis/dashboard e na caixa de entrada de texto URIs de redirecionamento autorizados , defina o URI de redirecionamento informando o endereço SSL do site seguido de signin-google:

https://localhost:5001/signin-google

Ao final deste processo será gerado o ID do aplicativo e a chave secreta que vamos usar em nosso projeto.

Salve e anote os valores para o ID e a chave secreta.

Instalando o pacote NuGet de middleware de autenticação do Google

Vamos instalar agora o middleware de autenticação do Google via nuget.

Abra uma janela do Package Manager Console e a seguir digite o comando :


Install-Package Microsoft. AspNetCore. Authentication. Google - version 3.1.4

Após instalar o pacote vamos definir um local para armazenar as informações do ID da aplicação e da chave secreta que iremos usar para autentica via Google.

Podemos armazenar no arquivo de configuração ou melhor ainda podemos usar o recurso UserSecrets da ASP .NET Core  que permite trabalhar com informações sensíveis(como senhas, tokens, etc) sem a necessidade de colocá-las no seu código, e consequentemente isso fica fora do controle de versões. (Somente para o ambiente de desenvolvimento)

Clique com o botão direito do mouse sobre o projeto e no menu suspenso clique em Manage Users Secret;

A seguir copie o código abaixo no arquivo secrets.json que será gerado:

{
  "Authentication:Google:ClientId": "2##9#####025@@8",
  "Authentication:Google:ClientSecret": "9e#####72e3#####bc8d18#####d61cd"
}

Criamos aqui duas chaves uma para ClientId e outra ClientSecret onde armazenamos os valores que geramos no site do Google.

Podemos também usar a ferramenta de linha de comando e o comando dotnet :

dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>"
dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"

Agora abra o arquivo Startup.cs e no método ConfigureServices inclua o código abaixo onde vamos usar o middleware de autenticação do Google e verificar as credenciais do ID e da chave secreta para logar via Google:

 ...
          services.AddAuthentication()
                .AddGoogle(options =>
                {
                    IConfigurationSection googleAuthNSection =
                        Configuration.GetSection("Authentication:Google");
                    options.ClientId = googleAuthNSection["ClientId"];
                    options.ClientSecret = googleAuthNSection["ClientSecret"];
                });
...

Este código lerá o ClientId e ClientSecret no arquivo secrets.json.

O método AddGoogle() é um método de extensão usado para configurar as opções de autenticação do Google para nosso aplicativo.

Para implementar a autorização para uma página específica, precisamos usar o atributo [Authorize] e podemos fazer isso a nível de Controlador e de método Action.

Nesta aplicação, aplicaremos [Authorize] ao método Action Privacy do controlador HomeController

...
        [Authorize]
        public IActionResult Privacy()
        {
            return View();
        }
...

Assim agora somente usuários autenticados poderão acessar este método Action e a página Privacy.

Agora é só alegria...

Execute o projeto e tente acessar Privacy, você vai notar que seremos redirecionando para a página de login onde veremos o botão para fazer a autenticação usando o Google:

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 com falha ao processar o erro de solicitação . Selecione aplicar migrações para criar o banco de dados e atualize a página para continuar após o erro.

Se a entrada não funcionar e você não estiver recebendo erros, mude para o modo de desenvolvimento para facilitar a depuração do problema.

"Fui buscado dos que não perguntavam por mim, fui achado daqueles que não me buscavam; a uma nação que não se chamava do meu nome eu disse: Eis-me aqui. Eis-me aqui."
Isaías 65:1


Referências:


José Carlos Macoratti