Este artigo vai representar em código os conceitos básicos por trás do OAuth2. Implementado através do IdentityServer4.

Pegue seu caderno e SHOW ME THE CODE!

Show me the code

O conceito por trás do código

Para saber mais sobre OAuth2, JWT e porquê utilizar o IdentityServer leia este post: Segurança - JWT x Cookies x OAuth x Bearer

Ao projeto

Neste artigo será criado um projeto para exemplificar a seguinte Arquitetura

Identity Server 4

Crie um novo projeto ASP.NET Core Web Application (File > New Project). Coloque o nome de IdentityServerWithMvc. Na tela seguinte escolha a opção Web Application (Model-View-Controller), conforme figuras abaixo:

NovoProjeto
MVC

Agora pressione o botão direito no projeto e em seguida vá até a opção Manage Nuget Packages. Procure por IdentityServer4

Configurando o Server

server

O server é responsável por autenticar os Users ou um Client e controlar suas claims.

QuickStart UI

É um pacote com Views e Controllers padrão, com um layout simple. Utilizado para facilitar a demo.

Para fazer download abra o Package Manager no Visual Studio (View > Other Windows > Package Manager) e execute o comando

Será feito o download de alguns pacotes.

Config.cs

Crie um novo arquivo chamado Config.cs e copie o seguinte conteúdo nele

Esse arquivo contém os parâmetros para configurar o IdentityServer.

  • Users: São os usuários que se cadastraram na APP
  • Client: Representa uma aplicação que pode requisitar tokens para o IdentityServer
  • Resource: São os dados protegidos da sua aplicação, para conseguir acessar os Resources é preciso ter um Token válido emitido pelo Server.

IdentityServerWithMvc/Startup.cs

É preciso configurar o IdentityServer através do Startup.cs. Utilize este código:

Porta 5000

Para este exemplo a porta 5000 é utilizado, a mesma nos documentos oficiais, mas nada impede de trocar.

Pressione o botão direito em cima do projeto e vá em Properties > Debug e altere a App Url para 5000

Client

Agora que o Identity server está configurado, será configurado o client

client

O Client representa uma aplicação. Pode ser uma aplicação que o usuário do sistema tem acesso, uma WebApi ou site externo.

Adicionar novo projeto

No visual studio, adicione um novo projeto (pressione o botão direito na Solução e Add > New Project...). Escolha um novamente um ASP.NET Core Web Application e depois a opção Web Application (Model-View-Controller), conforme figuras abaixo:

clientproj
NovoProjeto
MVC

Altere o conteúdo do Home/Index.cshtml para:

MvcClient/Startup.cs

Para o projeto rodar corretamente é preciso configurar o Startup.cs

No startup foi definido o endereço do server de autenticação, é para lá que o usuário será redirecionado caso tente acessar um Resource protegido e não esteja logado.
Como é uma aplicação MVC a melhor estratégia é utilizar Cookies. Repare também que foi setado o ClientId, se esta propriedade for diferente da que foi configurado no Config.cs o IdentityServer retorna "Não Autorizado"

Resource

Agora será configurado uma Resource protegida.

resource

Resource: São os dados protegidos da sua aplicação, para conseguir acessar os Resources é preciso ter um Token válido emitido pelo Server.

Crie uma nova controller chamada AdminController.cs (Botão Direito na Pasta Controller do Projeto > Add > New Controller)

Na AdminController cole o seguinte código

Adicione uma nova view para a Action Secure da Controller Admin (Botão direito em cima da chamada do método View() > Add View)

Na View, cole o seguinte código:

Pronto! Os projetos estão configurados. Agora para testar é preciso configurar a solution para rodar os dois projetos simultaneamente.

SolutionProperties
ConfigProject

Veja como ficou o projeto final:

Link do projeto: GitHub

Espero que tenham gostado! Deixem seus comentários, dúvidas! Vamos bater um papo!