Partilhar via


Gerenciando declarações e autorizações com o modelo de identidade

Autorização é o processo de determinar quais entidades têm permissão para alterar, exibir ou acessar um recurso de computador. Por exemplo, em uma empresa, apenas gerentes podem ter permissão para acessar os arquivos de seus funcionários. O Windows Communication Foundation (WCF) oferece suporte a dois mecanismos para executar o processamento de autorização. O primeiro mecanismo permite controlar a autorização usando construções CLR (Common Language Runtime) existentes. O segundo é um modelo baseado em declarações conhecido como Modelo de Identidade. O WCF usa o Modelo de Identidade para criar declarações a partir de mensagens recebidas; As classes de Modelo de Identidade podem ser estendidas para oferecer suporte a novos tipos de declaração para esquemas de autorização personalizados. Este tópico apresenta uma visão geral dos principais conceitos de programação do recurso Modelo de Identidade, bem como uma lista das classes mais importantes que o recurso usa.

Cenários de modelo de identidade

Os cenários a seguir representam o uso do Modelo de Identidade.

Cenário 1: Suporte a identidade, função e declarações de grupo

Os usuários enviam mensagens para um serviço Web. Os requisitos de controle de acesso do serviço Web usam identidade, funções ou grupos. O remetente da mensagem é mapeado para um conjunto de funções ou grupos. As informações de função ou grupo são usadas para executar verificações de acesso.

Cenário 2: Suporte a reivindicações ricas

Os usuários enviam mensagens para um serviço Web. Os requisitos de controle de acesso do serviço Web exigem um modelo mais avançado do que identidade, funções ou grupos. O serviço Web determina se um determinado usuário tem acesso a um recurso protegido específico usando o modelo baseado em declarações avançadas. Por exemplo, um usuário pode ser capaz de ler informações específicas, como informações salariais, às quais outros usuários não têm acesso.

Cenário 3: Mapeando declarações diferentes

Um usuário envia uma mensagem para um serviço Web. O usuário pode especificar suas credenciais de várias maneiras diferentes: certificado X.509, token de nome de usuário ou token Kerberos. O serviço Web é necessário para executar verificações de controle de acesso da mesma maneira, independentemente do tipo de credencial do usuário. Se houver suporte para tipos de credenciais adicionais ao longo do tempo, o sistema deverá evoluir de acordo.

Cenário 4: Determinando o acesso a vários recursos

Um serviço Web tenta acessar vários recursos. O serviço determina a quais recursos protegidos um determinado usuário tem acesso comparando as declarações associadas ao usuário com as declarações necessárias para acessar o recurso.

Termos do Modelo de Identidade

A lista a seguir define os principais termos usados para descrever os conceitos do Modelo de Identidade.

Política de autorização
Um conjunto de regras para mapear um conjunto de declarações de entrada para um conjunto de declarações de saída. A avaliação da política de autorização resulta em conjuntos de declarações sendo adicionados a um contexto de avaliação e, posteriormente, a um contexto de autorização.

Contexto de autorização
Um conjunto de conjuntos de declarações e zero ou mais propriedades. O resultado da avaliação de uma ou mais políticas de autorização.

Afirmação
Uma combinação de um tipo de declaração, direito e um valor.

Conjunto de reclamações
Um conjunto de créditos emitidos por um determinado emitente.

Tipo de afirmação
Uma espécie de reivindicação. As declarações definidas pela API do Modelo de Identidade são propriedades da ClaimType classe. Exemplos de tipos de declaração fornecidos pelo sistema são Dns, Email, Hash, , RsaName, Sid, Spn, SystemThumbprintUrie .X500DistinguishedName

Contexto da avaliação
Um contexto no qual uma política de autorização é avaliada. Contém propriedades e conjuntos de declarações. Torna-se a base de um contexto de autorização assim que a avaliação é concluída.

Reivindicação de identidade
Uma reivindicação cujo direito é a identidade.

Emissor
Um conjunto de declarações que contém pelo menos uma declaração de identidade e é considerado como tendo emitido outro conjunto de declarações.

Propriedades
Um conjunto de informações associadas a um contexto de avaliação ou contexto de autorização.

Recurso protegido
Algo no sistema que só pode ser usado, acessado ou manipulado se certos requisitos forem atendidos primeiro.

Right
Uma capacidade sobre um recurso. Os direitos definidos pela API do Modelo de Identidade são propriedades da Rights classe. Exemplos de direitos fornecidos pelo sistema são Identity e PossessProperty.

Value
Algo sobre o qual se reivindica um direito.

Pedidos

O Modelo de Identidade é um sistema baseado em declarações. As declarações descrevem os recursos associados a alguma entidade no sistema, geralmente um usuário desse sistema. O conjunto de declarações associadas a uma determinada entidade pode ser considerado como uma chave. As alegações particulares definem a forma dessa chave, semelhante a uma chave física usada para abrir uma fechadura numa porta. As declarações são usadas para obter acesso a recursos. O acesso a um determinado recurso protegido é determinado comparando as declarações necessárias para acessar esse recurso com as declarações associadas à entidade que está tentando acessar.

Uma reivindicação é a expressão de um direito em relação a um determinado valor. Um direito pode ser algo como "Ler", "Escrever" ou "Executar". Um valor pode ser um banco de dados, um arquivo, uma caixa de correio ou uma propriedade. As reclamações também têm um tipo de reivindicação. A combinação de tipo de reivindicação e direito fornece o mecanismo para especificar capacidades em relação ao valor. Por exemplo, uma declaração do tipo "File", com direito "Read" sobre o valor "Biography.doc", indica que a entidade à qual tal declaração está associada tem acesso de leitura ao arquivo Biography.doc. Uma reivindicação do tipo "Name", com direito "PossessProperty" sobre o valor "Martin", indica que a entidade à qual tal reivindicação está associada possui uma propriedade Name com o valor "Martin".

Embora vários tipos de declaração e direitos sejam definidos como parte do Modelo de Identidade, o sistema é extensível, permitindo que os vários sistemas, com base na infraestrutura do Modelo de Identidade, definam tipos e direitos de declaração adicionais, conforme necessário.

Declarações de identidade

Um direito particular é o da identidade. As reivindicações que possuem este direito fazem uma declaração sobre a identidade da entidade. Por exemplo, uma declaração do tipo "nome principal do usuário" (UPN) com um valor de someone@example.com e um direito de Identity indica uma identidade específica em um domínio específico.

Declaração de identidade do sistema

O Modelo de Identidade define uma declaração de identidade: System. A System declaração de identidade indica que uma entidade é o aplicativo ou sistema atual.

Conjuntos de reclamações

O modelo de declarações que representam a identidade é importante porque as declarações são sempre emitidas por alguma entidade no sistema, mesmo que essa entidade seja, em última análise, algum conceito de "eu". As declarações são agrupadas como um conjunto e cada conjunto tem um emissor. Um emissor é apenas um conjunto de reivindicações. Tal relação recursiva deve eventualmente terminar e qualquer conjunto de sinistros pode ser seu próprio emissor.

A figura seguinte mostra um exemplo de três conjuntos de sinistros em que um conjunto de créditos tem, como emitente, outro conjunto de reclamações, que, por sua vez, tem a declaração do Sistema definida como emitente. Portanto, conjuntos de reivindicações formam uma hierarquia que pode ser arbitrariamente profunda.

Sets of claims within the hierarchy.

Vários conjuntos de declarações podem ter o mesmo conjunto de declarações emissoras, conforme ilustrado na figura a seguir:

Multiple sets of claims with the same issuing claim set.

Com exceção de um conjunto de declarações que é seu próprio emissor, o Modelo de Identidade não fornece suporte para conjuntos de declarações formarem um loop. Assim, nunca poderá surgir uma situação em que o conjunto de créditos A é emitido pelo conjunto de créditos B, que é ele próprio emitido pelo conjunto de créditos A. Além disso, o Modelo de Identidade não fornece suporte para conjuntos de declarações terem vários emissores. Se dois ou mais emissores tiverem de emitir um determinado conjunto de declarações, terá de utilizar vários conjuntos de declarações, cada um contendo as mesmas declarações, mas com emissores diferentes.

A origem das reivindicações

As alegações podem provir de uma variedade de fontes. Uma fonte comum de declarações são as credenciais apresentadas por um usuário, por exemplo, como parte de uma mensagem enviada a um serviço Web. O sistema valida essas declarações, e elas se tornam parte de um conjunto de declarações associadas ao usuário. Outros componentes do sistema também podem ser fontes de declarações, incluindo, mas não limitado a, o sistema operacional, a pilha de rede, o ambiente de tempo de execução ou o aplicativo. Além disso, os serviços remotos também podem ser uma fonte de reivindicações.

Políticas de Autorização

No Modelo de Identidade, as declarações são geradas como parte do processo de avaliação da política de autorização. Uma política de autorização examina o conjunto (possivelmente vazio) de declarações existentes e pode optar por adicionar declarações adicionais com base nas declarações já presentes e informações adicionais à sua disposição. Isso fornece a base do mapeamento entre declarações. A presença ou ausência de declarações no sistema influencia o comportamento de uma política de autorização no que diz respeito à adição de declarações adicionais.

Por exemplo, a política de autorização tem acesso a uma base de dados que inclui as datas de nascimento das várias entidades que utilizam o sistema. A política de autorização usa essas informações para adicionar uma declaração "Over18" ao contexto. Note-se que esta reivindicação Over18 não divulga qualquer informação sobre a entidade, a não ser o facto de ser maior de 18 anos. Note-se que a interpretação da alegação «Maiores de 18 anos» depende da compreensão da semântica dessa afirmação. A política de autorização que adicionou a declaração compreende essas semânticas em algum nível. O código que posteriormente examina as alegações que resultam da avaliação de políticas também deve ser informado sobre essas semânticas.

Uma determinada política de autorização pode exigir que ela seja avaliada várias vezes porque, à medida que outras políticas de autorização adicionam declarações, essa política de autorização pode adicionar ainda mais declarações. O Modelo de Identidade foi projetado para continuar a avaliação até que mais nenhuma declaração seja adicionada ao contexto por qualquer uma das políticas de autorização em vigor. Esta avaliação contínua das políticas de autorização impede a necessidade de aplicar qualquer ordem de avaliação específica em relação às políticas de autorização; eles podem ser avaliados em qualquer ordem. Por exemplo, se a política X só adicionar a Reivindicação Z se a política A tiver adicionado a Reivindicação B, então, se X for avaliado primeiro, ela inicialmente não adicionará a Reivindicação Z. Posteriormente, A é avaliado e adiciona a Reivindicação B. X é então avaliada uma segunda vez, e desta vez adiciona a Reivindicação Z.

Um determinado sistema pode ter muitas políticas de autorização em vigor.

Uma máquina de fazer chaves

Avaliar um grupo de políticas de autorização associadas é como usar uma máquina que produz chaves. As políticas de autorização são avaliadas e conjuntos de declarações são gerados, construindo a forma da chave. Uma vez que a forma da chave está completa, ela pode ser usada para tentar abrir algumas fechaduras. A forma da chave é armazenada em um "contexto de autorização", que é criado por um gerenciador de autorização.

Contexto de autorização

Um gerenciador de autorização avalia as várias políticas de autorização conforme descrito, e o resultado é um contexto de autorização (um conjunto de conjuntos de declarações e algumas propriedades associadas). O contexto de autorização pode ser examinado para determinar quais declarações estão presentes nesse contexto, as relações entre essas várias declarações (por exemplo, o conjunto de declarações emissoras) e, finalmente, compará-las com alguns requisitos que elas devem atender para acessar um recurso.

Bloqueios

Se um contexto de autorização (um conjunto de declarações) for uma chave, os requisitos que devem ser satisfeitos para conceder acesso a um recurso protegido específico constituem a fechadura que a chave deve ajustar. O Modelo de Identidade não formaliza como tais requisitos são expressos, mas eles, dada a natureza baseada em declarações do sistema, envolvem a comparação das declarações no contexto de autorização com algum conjunto de reivindicações necessárias.

Uma recapitulação

O Modelo de Identidade baseia-se no conceito de declarações. As declarações são agrupadas em conjuntos e agregadas em um contexto de autorização. Um contexto de autorização contém um conjunto de declarações e é o resultado da avaliação de uma ou mais políticas de autorização associadas a um gerenciador de autorização. Esses conjuntos de declarações podem ser examinados para determinar se os requisitos de acesso foram atendidos. A figura a seguir mostra as relações entre esses vários conceitos de Modelo de Identidade.

Managing claims and authorization

WCF e Modelo de Identidade

O WCF usa a infraestrutura do Modelo de Identidade como base para executar a autorização. No WCF, a ServiceAuthorizationBehavior classe permite que você especifique políticas de autorização como parte de um serviço. Essas políticas de autorização são conhecidas como políticas de autorização externa e podem executar o processamento de solicitações com base na diretiva local ou pela interação com um serviço remoto. O gerenciador de autorização, representado pela ServiceAuthorizationManager classe, avalia as políticas de autorização externas juntamente com as políticas de autorização que reconhecem os vários tipos de credenciais (tokens) e preenche o que é chamado de contexto de autorização com as declarações apropriadas para uma mensagem de entrada. O contexto de AuthorizationContext autorização é representado pela classe.

Programação do modelo de identidade

A tabela a seguir descreve o modelo de objeto usado para programar extensões do Modelo de Identidade. Todas essas classes existem nos System.IdentityModel.Policy namespaces ou nos System.IdentityModel.Claims namespaces.

Classe Description
Componente de autorização Uma classe Identity Model que implementa a IAuthorizationComponent interface.
IAuthorizationComponent Uma interface que fornece uma única propriedade de cadeia de caracteres somente leitura: Id. O valor dessa propriedade é exclusivo para cada instância no sistema que implementa essa interface.
AuthorizationContext Um componente de autorização que contém um conjunto de ClaimSet instâncias com zero ou mais propriedades, o resultado da avaliação de uma ou mais Políticas de Autorização.
Claim Uma combinação de um tipo de declaração, direito e valor. As partes de direito e valor são restringidas pelo tipo de sinistro.
ClaimSet Uma classe base abstrata. Uma coleção de Claim instâncias.
DefaultClaimSet Uma classe selada. Uma implementação da ClaimSet classe.
EvaluationContext Uma classe base abstrata. Passado para uma política de autorização durante a avaliação da política.
IAuthorizationPolicy Uma interface derivada e implementada por classes de política de IAuthorizationComponent autorização.
Rights Uma classe estática que contém valores corretos predefinidos.

As classes a seguir também são usadas para programação do System.IdentityModel.Policy Modelo de Identidade, mas não são encontradas nos namespaces ou System.IdentityModel.Claims .

Classe Description
ServiceAuthorizationManager Uma classe que fornece um método— CheckAccessCore—para executar verificações de autorização baseadas em declaração para cada operação em um serviço. Você deve derivar da classe e substituir o método.
ServiceAuthorizationBehavior Uma classe lacrada que fornece várias propriedades relacionadas ao comportamento de um serviço no que diz respeito à autorização.
ServiceSecurityContext Uma classe que fornece contexto de segurança, incluindo contexto de autorização, para a operação atualmente em execução (ou prestes a ser executada). Uma instância dessa classe faz parte do OperationContext.

Membros Significativos

Os membros a seguir são comumente usados para criar novos tipos de declaração.

Membro Description
CheckAccessCore As classes derivadas implementam esse método para executar verificações de acesso baseadas em declarações antes de executar operações em um serviço. Toda e qualquer informação fornecida ou em outro lugar pode ser examinada OperationContextao tomar a decisão de verificação de acesso. Se CheckAccessCore retornar true, o acesso será concedido e a operação poderá ser executada. Se CheckAccessCore retornar false, o acesso será negado e a operação não será executada. Para obter um exemplo, consulte Como criar um Gerenciador de Autorização Personalizado para um Serviço.
ServiceAuthorizationManager Devolve o ServiceAuthorizationManager para o serviço. O ServiceAuthorizationManager é responsável por tomar decisões de autorização.
ExternalAuthorizationPolicies A coleção de políticas de autorização personalizadas especificadas para o serviço. Essas políticas são avaliadas além das políticas associadas às credenciais nas mensagens recebidas.

Consulte também