ASP.NET Core 3.1 - IdentityServer4 - MVC-Client (Parte 8)

Na Parte 7 configuei o IdentityServer4 para que uma aplicação MVC (Model View Controller) possa ter uma tela de login para que os usuários acessem com seu usuário e senha.

Nesta parte, vamos ver como configurar a aplicação MVC (Model View Controller) para que esse processo seja totalmente automático.

Criar aplicação MVC

Eu criei uma aplicação ASP.NET Core Web Application conforme demonstrado nas imagens a seguir.

ASP.NET Core Web Application

ASP.NET Core Web Application MVC

O Scaffold vai se encarregar de carregar o Bootstrap, JQuery de forma básica para que seja mais rápido. Caso você queira, dê uma olhada na Parte 6 onde eu falo sobre o Grunt e traga a configuração para esta aplicação, quanto a isso não há nenhum problema, perceba que se você fizer isso, já facilitou o processo de configuração dos pacotes de interface.

Veja que na criação da aplicação MVC não opter por configurá-la com o Identity, bem diferente do que fiz na aplicação do IdentityServer4, pois é lá que o nosso login está, ele que vai simular a autenticação como se fosse o Facebook.

NuGet

Precisei do pacote Microsoft.AspNetCore.Authentication.OpenIdConnect que habilita os métodos de extensão do OpenID Connect.

Startup.cs

A configuração completa do Startup.cs está no gist abaixo, porém vou falar sobre algumas configurações importantes especificamente do método AddOpenIdConnect

  • Authority: É o endereço do IdentityServer4 que configuramos. Lembre-se que em produção vai ser obrigatório o uso de HTTPS.

  • ClientId: No post anterior configuramos um Client para a aplicação MVC e é aqui que especificamos que esta aplicação MVC é uma aplicação cliente para o IdentityServer4.

  • ClientSecret: Senha do Client.

  • GetClaimsFromUserInfoEndpoint: Permite que o User que está lá na ControllerBase venha preenchido.

  • Scope: No post anterior, também configuramos os Resources do IdentityServer4, e aqui apenas estamos indicando que gostaríamos que nas Claims os dados do OpenID Connect (obrigatório) sejam retornados para a aplicação MVC e que seja permitido o acesso à API de pagamento.

Eu pulei algumas configurações, pois algumas delas vão fazer mais sentido mais adiante em outro post.

Na prática

  • Inicie a aplicação MVC e a do IdentityServer4;
  • Acesse http://localhost:5004 que é o endereço da aplicação MVC.

Login Aplicação MVC

  • Clique em Login IdentityServer4. Neste momento você vai ser redirecionado para o IdentityServer4 que está simulando o login como se fosse o Facebook.

Login Simulando Facebook

  • Email or Phone: admin@admin.com
  • Senha: Abc@12345

  • Depois de logar, você vai ser redirecionado devolta para a aplicação MVC e a opção Sair vai ser apresentada, indicando que o usuário está logado mesmo que o login tenha sido feito em outro lugar.

Cookies

Dê uma olhada nos cookies da aplicação, você vai encontrar um chamado Cookies ele vem da configuração CookieAuthenticationDefaults.AuthenticationScheme, você pode mudar esse nome, mas não esqueça de mudar em outros lugares onde esse nome da constante do cookie é usada.
Você vai encontrar também o cookie com o nome idsrv.session onde idsrv é a abreviação de IdentityServer.
Dica: Apague um cookie ou outro e vá dando refresh da aplicação para você entender a dinâmica, isso é bem importante para reforçar o funcionamento.

Como o foco não está na interface, seria interessante você baixar o projeto para pegar todas as alterações, ou comparar o branch anterior com este novo que foi criado. Acesse o código fonte no GitHub.

Continua em ASP.NET Core 3.1 - IdentityServer4 - MVC-API Request (Parte 9).