Pré-requisitos

  • Antes de começar, certifique-se de conferir os artigos Como acessar o painel e Criar aplicação
  • Aplicação cadastrada no Kodigos Identity com client_id, client_secret e URL da authority

Instalação e configuração

1

Instalar o pacote NuGet

bash
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
2

Configurar o appsettings.json

appsettings.json
{
  "ApiAuth": {
    "Url": "https://development.kodigos.com.br/identity",
    "ApplicationId": "seu-client-id",
    "ClientSecret": "seu-client-secret",
	"audience": "sua-audience"
  }
}
CampoDescrição
URLURL base do Identity Provider
ApplicationIdIdentificador da aplicação registrado no painel
ClientSecretChave secreta quando o tipo da aplicação é confidential
Audience<to-do>
3

Configurar autenticação no Program.cs

Program.cs
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
    {
        options.Authority = Configuration.GetSection("ApiAuth:Url").Value;
        options.Audience = Configuration.GetSection("ApiAuth:audience").Value;
        options.RequireHttpsMetadata = false;

		options.TokenValidationParameters = new TokenValidationParameters
        {
            // Valida se o "iss" do token bate com o Kodigos ID.
            // Protege contra tokens de outro Identity Server.
            ValidateIssuer = true,

            // Valida o audience do token.
            ValidateAudience = false,

            // Valida se o token não expirou. Recomendado manter true.
            ValidateLifetime = true,

            // Valida a assinatura com as chaves do Identity Server. Recomendado manter true.
            ValidIssuer = Configuration.GetSection("ApiAuth:Url").Value,
			ValidateIssuerSigningKey = true,

			options.RequireHttpsMetadata = false;
        };
    });

builder.Services.AddAuthorization();

var app = builder.Build();

app.UseAuthentication();  // Primeiro lê o token e preenche HttpContext.User
app.UseAuthorization();   // Depois verifica se o usuário tem permissão

app.MapControllers();
app.Run();	
Ao realizar essa configuração, não é necessário o uso de [Authorize] nos controllers.  
Sempre coloque o UseAuthentication antes do UseAuthorization. Se inverter, o UseAuthorization executa com HttpContext.User vazio e todas as requests retornam 401