← SecurityX/CASP+: arquitetura e operação segura
12 / 15 · 65 MIN

Autorização por objeto e tenant

Combina identidade, ação, recurso e relações autorizadas em cada pedido.

Separar acesso à função e acesso ao registo

Um utilizador pode chamar GET de relatórios sem poder ler todos os relatórios existentes. A autenticação identifica um principal no contexto do emissor; a autorização decide se esse principal pode executar esta ação neste recurso. O exercício tem report-a, report-a-private e report-b. Todos usam o mesmo mecanismo de token, mas os objetos têm tenants e relações diferentes. Verificar apenas que o utilizador tem sessão, ou apenas que o endpoint exige autenticação, deixa a decisão por objeto por resolver. Desenha uma matriz de sujeitos, ações e recursos antes de implementar. Inclui leitura, alteração e operações administrativas, porque o comportamento autorizado numa função não se transfere automaticamente para outra.

Conservar a fronteira entre tenants

No modelo, analyst-a tem uma relação de leitura com report-a em fund-a. O mesmo identificador aparece na lista de leitores de report-b em fund-b, mas o token pertence a fund-a: o pedido é recusado. Uma relação isolada não substitui a fronteira do tenant. O tenant é uma claim privada deste exercício, não um campo universal obrigatório do protocolo. Em produção, a origem e a autoridade dos atributos precisam de ser definidas. Um parâmetro de rota ou header enviado pelo cliente não deve substituir silenciosamente o contexto autorizado. Confirma também que consultas, caches, tarefas assíncronas e exportações mantêm essa fronteira; proteger o formulário inicial não protege automaticamente todos os percursos de acesso.

Scopes não substituem relações do negócio

O scope reports:read permite considerar uma leitura, mas report-a-private só tem analyst-b como leitor. Analyst-a é recusado apesar de estar no mesmo tenant e ter o scope certo. Para alterar report-a, o modelo exige reports:write e uma relação de editor. Dar esse scope a analyst-a não o transforma em editor; editor-a com o scope correto passa. O exercício compara scopes completos: reports:read-all não satisfaz reports:read por conter texto semelhante. A política é um exemplo de combinação de atributos e relações. Uma organização pode usar outras regras, mas precisa de explicar quem gere essas relações, quando se atualizam e qual decisão ocorre quando os dados necessários estão ausentes.

Aplicar a decisão no ponto que controla o efeito

Esconder um botão no cliente melhora a interface, mas não impede pedidos diretos. A decisão deve ser aplicada num ponto de confiança que controle acesso ou alteração. Um gateway pode validar o token sem conhecer as relações de cada relatório; o serviço continua a precisar da informação necessária para decidir. Evita que uma validação de leitura seja tomada como permissão de escrita. Em fluxos de alteração, considera também mudanças entre a verificação e o efeito: o recurso pode mudar de tenant ou estado durante a operação. A estratégia concreta depende do armazenamento e da transação. O laboratório apenas calcula decisões sobre objetos em memória; não demonstra atomicidade ou isolamento de uma base de dados real.

Testar recusas e acessos legítimos

Prepara pares de testes com identidade válida: objeto próprio e alheio, mesmo tenant e outro tenant, scope correto e insuficiente, leitor e editor. Acrescenta recurso inexistente, ação não prevista e estado de autorização indisponível. Na fixture, a decisão padrão é recusar e a indisponibilidade não alarga permissões. O diagnóstico interno identifica a razão; a resposta externa deve seguir a política de divulgação do serviço, podendo ocultar a existência de objetos. Identificadores aleatórios reduzem facilidade de descoberta, mas não substituem autorização. Depois de corrigir uma falha, procura a mesma omissão em listagens, downloads, endpoints aninhados e operações em lote. Regista cobertura e lacunas para que a equipa RUN saiba o que foi efetivamente ensaiado.

# Fixture decisions
# report-a + analyst-a + read -> permitted
# report-a-private + analyst-a + read -> object-relationship
# report-b + fund-a token + read -> tenant
NA PRÁTICA

Analyst-a lê report-a, mas não report-a-private no mesmo tenant nem report-b noutro tenant.

Armadilhas comuns

Autenticação como autorização; UUID como controlo de acesso; gateway como conhecimento de todas as relações; scope de leitura como escrita.

Tópicos relacionados: Fronteiras de confiança · Autorização de APIs · Revogação e operação

Leva esta ideia contigo

A decisão precisa de corresponder ao sujeito, objeto, ação e contexto de cada pedido.

Criar conta

Referência: Authorization Cheat Sheet · CAS-005 / SecurityX V5; objectives 3.0; launched 2024-12-17

CompTIA® e CASP+ são marcas comerciais ou marcas registadas de CompTIA, Inc. A dr.pt é uma plataforma de preparação independente e não está afiliada, associada, patrocinada, autorizada nem aprovada por CompTIA. Os conteúdos e as perguntas são originais, não são perguntas oficiais de exame, e concluir os nossos testes não atribui nem garante qualquer certificação. Os nomes são usados apenas para identificar o tema. Todas as outras marcas pertencem aos respetivos titulares.