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 = trueAdicionando 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.
RequireClaimverifica a existência ou valores permitidos específicos.RequireAssertionlida 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
- Autorização baseada em funções
- Autorização baseada em declarações
- Autorização baseada em políticas
- Requisitos personalizados de autorização