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:
- Flutter 3.10.5
- Dart 3.0.5
- 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.