Veja como o ASP.NET Core 3.1 e o OpenId Connect podem dar trabalho. Prepare-se para lidar com JSON configurando a integração com o IdentityServer4, que promete ser útil no mundo OAuth2, mas pode se tornar um pesadelo de configuração.

JavaScript se achando

Depois da versão 3, houve mudanças importantes no .NET Core, especialmente em Autenticação e Autorização. Agora, transformar um simples "Hello World" em 10 passos virou diversão.

Tenha paciência e ME MOSTRE O CÓDIGO que te deu dor de cabeça!

Você vai precisar de:

  • ASP.NET Core 3.1
  • Visual Studio

Porque complicar é necessário

Para mais detalhes técnicos, veja Segurança - JWT x Cookies x OAuth x Bearer.

Projeto pequeno, mas chato

Vamos criar um projeto simples como exemplo nessa configuração:

Identity Server 4

Vá em File > New Project e nomeie a solução de IdentityServerWithMvc. Selecione a opção Web Application com o clássico Model-View-Controller.

NovoProjeto MVC

Adicione a dependência IdentityServer4 via Manage Nuget Packages.

Configurando o Servidor

server

O server autentica Usuários ou Clientes. Se algo falhar, recomece.

QuickStart

Use um pacote de Views e Controllers padrão:

Config.cs

Crie o arquivo Config.cs:

Veja o que você está enfrentando:

  • Users: A base da aplicação
  • Client: A aplicação que solicita tokens
  • Resource: Recursos protegidos

Configurando Startup.cs

Configure o IdentityServer no Startup.cs:

Porta 5000

Configure a porta 5000 na seção Debug.

Lidando com o Client

Configure o Client.

cliente

Adicione uma ASP.NET Core Web Application com MVC.

clientproj NovoProjeto MVC

No Home/Index.cshtml:

Adicione o pacote OpenIdConnect do Nuget.

Configurando Startup.cs

Configure o Startup.cs:

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapDefaultControllerRoute()
        .RequireAuthorization();
});

Protegendo uma rota

Adicione um AdminController.

No AdminController:

Na View:

Agora, teste e veja se você ainda está inteiro.

SolutionProperties ConfigProject

Baixe se tiver coragem

GitHub

O código do projeto está aqui: GitHub