0Pricing
C# Academy · Aula

Autorização baseada em funções

Restrinja endpoints por funções de usuário.

Autorização baseada em funções é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

Autenticação versus autorização

Autenticação responde a "quem é você?". Autorização responde a "o que você tem permissão para fazer?".

O modelo de autorização mais simples no ASP.NET Core é baseado em funções: um usuário pertence a funções, e os pontos de acesso exigem funções específicas.

// User has roles: admin, editor
// Endpoint requires: admin

De onde vêm as funções

Uma função é simplesmente uma declaração do tipo ClaimTypes.Role. Ao emitir um JWT, adicione uma declaração de função para cada função que o usuário possui.

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
    new Claim(ClaimTypes.Role, "admin"),
    new Claim(ClaimTypes.Role, "editor")
};

O tipo de declaração de função

Para que [Authorize(Roles=...)] e User.IsInRole funcionem, o manipulador precisa saber qual tipo de declaração representa uma função.

A chave JWT role é mapeada para ClaimTypes.Role por padrão. Se você usar uma chave personalizada, informe isso ao validador por meio de RoleClaimType.

options.TokenValidationParameters = new TokenValidationParameters
{
    RoleClaimType = ClaimTypes.Role
};

Exigindo uma única função

Aplique [Authorize(Roles = "admin")] a um controlador ou ação. Somente usuários com a função admin poderão entrar.

[Authorize(Roles = "admin")]
[HttpDelete("users/{id}")]
public IActionResult DeleteUser(int id)
{
    // only admins reach here
    return NoContent();
}

Exigindo qualquer uma de várias funções

Uma lista separada por vírgulas significa OR: o usuário precisa ter pelo menos uma das funções listadas.

[Authorize(Roles = "admin,editor")]
[HttpPut("articles/{id}")]
public IActionResult Update(int id) => Ok();
// admins OR editors are allowed

Exigindo várias funções (AND)

Para exigir todas as funções de um conjunto, empilhe vários atributos [Authorize]. Cada um deles deve ser aprovado.

[Authorize(Roles = "employee")]
[Authorize(Roles = "manager")]
public IActionResult ApproveBudget() => Ok();
// must be BOTH employee AND manager

Verificando funções no código

Às vezes, é necessário verificar uma função dentro do corpo do método, e não apenas na entrada. Use User.IsInRole.

public IActionResult GetReport()
{
    var data = BuildReport();
    if (User.IsInRole("admin"))
        data.IncludeSensitiveColumns();
    return Ok(data);
}

Equivalente com APIs mínimas

As APIs mínimas usam .RequireAuthorization com uma política embutida ou, de forma mais simples, você pode exigir uma função por meio de uma política nomeada.

app.MapDelete("/users/{id}", (int id) => Results.NoContent())
   .RequireAuthorization(p => p.RequireRole("admin"));

Funções em uma hierarquia

ASP.NET Core não tem uma hierarquia de funções integrada. Se os administradores também devem ter implicitamente direitos de edição, conceda as duas declarações de função no login ou modele isso com políticas (no próximo curso).

// Grant both at login if admin >= editor
new Claim(ClaimTypes.Role, "admin");
new Claim(ClaimTypes.Role, "editor");

Quando as funções não são suficientes

As funções são pouco granulares. Quando as regras dependem de dados (por exemplo, "somente o proprietário pode editar") ou de permissões detalhadas, as verificações de função ficam confusas.

É nesse ponto que entram a autorização baseada em declarações e a autorização baseada em políticas.

// Hard to express with roles alone:
// "editors, but only for their own department"

Retornando 403 vs 401

Se o usuário não estiver autenticado, uma verificação de função produzirá 401 Unauthorized. Se estiver autenticado, mas não tiver a função, receberá 403 Forbidden.

// No/invalid token         -> 401 Unauthorized
// Valid token, wrong role   -> 403 Forbidden

Verificação rápida

Teste seus conhecimentos sobre funções.

Recapitulação

Você aprendeu sobre autorização baseada em funções:

  • As funções são declarações ClaimTypes.Role colocadas no token.
  • [Authorize(Roles = "a,b")] significa OR; empilhar atributos significa AND.
  • User.IsInRole verifica funções no código.
  • As funções são pouco granulares; regras orientadas por dados precisam de modelos mais ricos.

Próximo tópico: autorização baseada em declarações.

Perguntas Frequentes

A aula “Autorização baseada em funções” é grátis?

Sim — o texto completo de “Autorização baseada em funções” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Autorização baseada em funções”?

Restrinja endpoints por funções de usuário. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Autorização baseada em funções”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Autorização baseada em funções
  2. Autorização baseada em declarações
  3. Autorização baseada em políticas
  4. Requisitos personalizados de autorização
← Voltar para C# Academy