0Pricing
C# Academy · Aula

Autorização baseada em declarações

Autorize com base nas declarações do usuário.

Autorização baseada em declarações é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 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.

Além das funções

As funções são um caso especial de declarações. A autorização baseada em declarações verifica qualquer declaração — e-mail, departamento, nível de assinatura, um sinalizador de permissão — e não apenas funções.

Isso oferece um controle mais detalhado sem a necessidade de criar dezenas de funções.

// Claims a user might carry:
// department = sales
// subscription = pro
// email_verified = true

Adicionando declarações a um token

Emita todas as declarações que suas regras de autorização vão inspecionar. A declaração é um par de tipo e valor.

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
    new Claim("department", "sales"),
    new Claim("subscription", "pro"),
    new Claim("email_verified", "true")
};

Definindo uma política de declarações

As regras baseadas em declarações são expressas como políticas nomeadas registradas com AddAuthorization. RequireClaim exige que o usuário tenha uma determinada declaração.

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("VerifiedEmail", policy =>
        policy.RequireClaim("email_verified", "true"));
});

RequireClaim sem valor

Se você só precisa verificar se a declaração existe (com qualquer valor), chame RequireClaim apenas com o tipo.

options.AddPolicy("HasDepartment", policy =>
    policy.RequireClaim("department"));

RequireClaim com valores permitidos

Você pode listar valores permitidos; a política será aprovada se a declaração corresponder a qualquer um deles.

options.AddPolicy("PaidTier", policy =>
    policy.RequireClaim("subscription", "pro", "enterprise"));

Aplicando uma política de declarações

Faça referência à política pelo nome em [Authorize].

[Authorize(Policy = "PaidTier")]
[HttpGet("premium-reports")]
public IActionResult Reports() => Ok();

Uso em APIs mínimas

As APIs mínimas fazem referência ao mesmo nome de política por meio de RequireAuthorization.

app.MapGet("/premium-reports", () => Results.Ok())
   .RequireAuthorization("PaidTier");

Combinando vários requisitos de declaração

Uma política pode encadear várias chamadas a RequireClaim; todas devem ser satisfeitas (AND).

options.AddPolicy("VerifiedSales", policy =>
    policy
        .RequireClaim("email_verified", "true")
        .RequireClaim("department", "sales"));

RequireAssertion para lógica personalizada

Quando uma verificação de valor fixo não é suficiente, RequireAssertion executa um predicado arbitrário sobre o ClaimsPrincipal.

options.AddPolicy("AdultUser", policy =>
    policy.RequireAssertion(ctx =>
    {
        var dob = ctx.User.FindFirst("birthdate")?.Value;
        return DateTime.TryParse(dob, out var d) &&
               d <= DateTime.UtcNow.AddYears(-18);
    }));

Lendo declarações em tempo de execução

Dentro de uma ação, você ainda pode inspecionar as declarações diretamente quando precisar do valor, e não apenas de uma barreira sim/não.

var dept = User.FindFirst("department")?.Value;
var isPro = User.HasClaim("subscription", "pro");

Declarações vs funções - quando usar cada uma

Use funções para responsabilidades profissionais abrangentes. Use declarações para atributos e sinalizadores de funcionalidades. Elas podem ser combinadas: uma política pode exigir uma função e várias declarações ao mesmo tempo.

options.AddPolicy("SalesManager", policy =>
    policy.RequireRole("manager")
          .RequireClaim("department", "sales"));

Verificação rápida

Confirme seu entendimento sobre políticas de declarações.

Recapitulação

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

  • Qualquer declaração — não apenas funções — pode controlar o acesso.
  • RequireClaim verifica a existência ou valores permitidos específicos.
  • RequireAssertion lida com lógica de predicado personalizada.
  • Declarações e funções podem ser combinadas dentro de uma única política nomeada.

Próximo tópico: o modelo completo baseado em políticas.

Perguntas Frequentes

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

Sim — o texto completo de “Autorização baseada em declaraçõ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 declarações”?

Autorize com base nas declarações do 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 2 de 4.

Quanto tempo leva a aula “Autorização baseada em declaraçõ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