Press ESC to close

Flutter App : Minimal API with JWT authentication, authorization and roles

JWT API

Documentação da Minimal API

Esta api possui duas políticas de acesso, Admin e Employee, checagem de token por usuário

Setup da API

Adicionando Políticas de Autorização:

builder.Services.AddAuthorization(options => { <!-- Adicione políticas aqui --> options.AddPolicy("Admin", policy => policy.RequireRole("manager")); options.AddPolicy("Employee", policy => policy.RequireRole("employee")); });

Endpoint de Autenticação do Usuário:

app.MapPost("/login", (User model) => { //implemente mais validações ou uma lógica diferente, caso use em produção var user = UserRepository.Get(model.Username, model.Password); if (user == null) return Results.NotFound(new { message = "Usuário ou senha inválidos!" }); // se tudo ocorre certo, gera o token var token = TokenService.GenerateToken(user); // esconde a senha no body da resposta user.Password = ""; return Results.Ok(new { user, token }); });

Método Anônimo:

app.MapGet("/anonymous", () => { Results.Ok("anonymous"); }).AllowAnonymous();

Verificação de Usuário Autenticado:

app.MapGet("/authenticated", (ClaimsPrincipal user) => { // altere o retorno para o seu propósito Results.Ok(new { message = $"Authenticated as {user.Identity.Name}" }); }).RequireAuthorization();

Acesso por Política:

app.MapGet("/admin", (ClaimsPrincipal user) => { // experimente retorna uma view diferente ou redirecionar para um painel Results.Ok(new { message = $"Authenticated as {user.Identity.Name}" }); } ).RequireAuthorization("Admin"); app.MapGet("/employee", (ClaimsPrincipal user) => { // altere o retorno para o seu propósito Results.Ok(new { message = $"Authenticated as {user.Identity.Name}" }); } ).RequireAuthorization("Employee");

Lista de EndPoints

Para testes com um endpoint real, use https://minimalapijwt.azurewebsites.net/

1. "/" => um JSON com informações do repositório e do autor. 2. "/docs" => outro JSON com os metódos, caso do usuário queira tratar as informações exibidas em outra aplicação. 3. "/login" => POST aceitando apenas usuários registrados no arquivo *UserRepository.cs*. 4. "/admin" => checa o token de autenticação do *admin* e retorna 200 ou 403. 5. "/employee" => checa o token de autenticação do *employee* e retorna 200 ou 403.

Build

Rode o Projeto em localhost

Dotnet watch observa as modificações do código e faz o build automaticamente, toda vez que necessário.

  dotnet watch --project . run

Em caso de erros:

Apague a pasta de settings da ide.

Exclua **.vs**, caso use o visual studio 

Exclua **.vscode** caso use o visual studio code

Faça o clean da aplicação e em seguida o build

dotnet clean 

dotnet run

Execute a Aplicação Flutter

Para executar o aplicativo em seu celular ou emulador android, é necessário checar as versões mínimas:

  1. Flutter 3.10.5
  2. Dart 3.0.5
  3. Sdk “>=3.0.0-290.0.dev <4.0.0”

Após a checagem, atualize os pacotes

flutter run pub get

Em seguida, execute no device escolhido.

Documentação da Aplicação

GitHub

View Github

Footer Example