Objetos principais e de identidade
Nota
Este artigo aplica-se ao Windows.
Para obter informações sobre o ASP.NET Core, consulte ASP.NET Core Security.
O código gerenciado pode descobrir a identidade ou a função de uma entidade por meio de um IPrincipal objeto, que contém uma referência a um IIdentity objeto. Pode ser útil comparar identidade e objetos principais com conceitos familiares, como contas de usuário e grupo. Na maioria dos ambientes de rede, as contas de usuário representam pessoas ou programas, enquanto as contas de grupo representam certas categorias de usuários e os direitos que eles possuem. Da mesma forma, os objetos de identidade .NET representam usuários, enquanto as funções representam associações e contextos de segurança. No .NET, o objeto principal encapsula um objeto de identidade e uma função. Os aplicativos .NET concedem direitos à entidade de segurança com base em sua identidade ou, mais comumente, em sua associação de função.
Objetos de identidade
O objeto de identidade encapsula informações sobre o usuário ou entidade que está sendo validado. Em seu nível mais básico, os objetos de identidade contêm um nome e um tipo de autenticação. O nome pode ser o nome de um usuário ou o nome de uma conta do Windows, enquanto o tipo de autenticação pode ser um protocolo de logon com suporte, como Kerberos V5, ou um valor personalizado. O .NET define um GenericIdentity objeto que pode ser usado para a maioria dos cenários de logon personalizados e um objeto mais especializado WindowsIdentity que pode ser usado quando você deseja que seu aplicativo dependa da autenticação do Windows. Além disso, você pode definir sua própria classe de identidade que encapsula informações personalizadas do usuário.
A IIdentity interface define propriedades para acessar um nome e um tipo de autenticação, como Kerberos V5 ou NTLM. Todas as classes Identity implementam a interface IIdentity . Não há nenhuma relação necessária entre um objeto Identity e o token de processo do Windows sob o qual um thread está sendo executado no momento. No entanto, se o objeto Identity for um objeto WindowsIdentity , presume-se que a identidade representa um token de segurança do Windows.
Objetos principais
O objeto principal representa o contexto de segurança sob o qual o código está sendo executado. Os aplicativos que implementam segurança baseada em função concedem direitos com base na função associada a um objeto principal. Semelhante aos objetos de identidade, o .NET fornece um GenericPrincipal objeto e um WindowsPrincipal objeto. Você também pode definir suas próprias classes principais personalizadas.
A IPrincipal interface define uma propriedade para acessar um objeto Identity associado, bem como um método para determinar se o usuário identificado pelo objeto Principal é um membro de uma determinada função. Todas as classes Principal implementam a interface IPrincipal, bem como quaisquer propriedades e métodos adicionais que sejam necessários. Por exemplo, o common language runtime fornece a classe WindowsPrincipal , que implementa funcionalidade adicional para mapear a associação de grupo a funções.
Um objeto Principal está vinculado a um objeto de contexto de chamada (CallContext) dentro de um domínio de aplicativo (AppDomain). Um contexto de chamada padrão é sempre criado com cada novo AppDomain, portanto, sempre há um contexto de chamada disponível para aceitar o objeto Principal . Quando um novo thread é criado, um objeto CallContext também é criado para o thread. A referência do objeto Principal é copiada automaticamente do thread de criação para o CallContext do novo thread. Se o tempo de execução não puder determinar qual objeto Principal pertence ao criador do thread, ele seguirá a política padrão para a criação do objeto Principal e Identity .
Uma política específica de domínio de aplicativo configurável define as regras para decidir que tipo de objeto Principal associar a um novo domínio de aplicativo. Quando a diretiva de segurança permite, o tempo de execução pode criar objetos Principal e Identity que refletem o token do sistema operacional associado ao thread de execução atual. Por padrão, o tempo de execução usa objetos Principal e Identity que representam usuários não autenticados. O tempo de execução não cria esses objetos Principal e Identity padrão até que o código tente acessá-los.
O código confiável que cria um domínio de aplicativo pode definir a diretiva de domínio de aplicativo que controla a construção dos objetos Principal e Identity padrão. Essa política específica do domínio do aplicativo se aplica a todos os threads de execução nesse domínio do aplicativo. Um host não gerenciado e confiável inerentemente tem a capacidade de definir essa política, mas o código gerenciado que define essa política deve ter o para controlar a System.Security.Permissions.SecurityPermission política de domínio.
Ao transmitir um objeto Principal entre domínios de aplicativo, mas dentro do mesmo processo (e, portanto, no mesmo computador), a infraestrutura remota copia uma referência ao objeto Principal associado ao contexto do chamador para o contexto do destinatário.