Como: criar objetos GenericPrincipal e GenericIdentity

Observação

Este artigo aplica-se ao Windows.

Para obter informações sobre o ASP.NET Core, consulte a Visão geral da segurança do ASP.NET Core.

Você pode usar a classe GenericIdentity em conjunto com a classe GenericPrincipal para criar um esquema de autorização que exista independentemente de um domínio do Windows.

Para criar um objeto GenericPrincipal

  1. Crie uma nova instância da classe de identidade e inicialize-a com o nome que você deseja que ela mantenha. O código a seguir cria um novo objeto GenericIdentity e o inicializa com o nome MyUser.

    Dim myIdentity As New GenericIdentity("MyUser")
    
    GenericIdentity myIdentity = new GenericIdentity("MyUser");
    
  2. Crie uma nova instância da classe GenericPrincipal e inicialize-a com o objeto GenericIdentity criado anteriormente e uma matriz de cadeias de caracteres que representam as funções que você deseja associar a essa entidade de segurança. O exemplo de código a seguir especifica uma matriz de cadeias de caracteres que representam uma função de administrador e uma função de usuário. O GenericPrincipal é inicializado com a GenericIdentity anterior e a matriz de cadeia de caracteres.

    Dim myStringArray As String() = {"Manager", "Teller"}
    DIm myPrincipal As New GenericPrincipal(myIdentity, myStringArray)
    
    String[] myStringArray = {"Manager", "Teller"};
    GenericPrincipal myPrincipal = new GenericPrincipal(myIdentity, myStringArray);
    
  3. Use o código a seguir para anexar a entidade de segurança ao thread atual. Isso é valioso em situações em que a entidade de segurança deve ser validada várias vezes, quando ela deve ser validada por outro código em execução em seu aplicativo ou quando deve ser validada por um objeto PrincipalPermission. Você ainda pode executar a validação baseada em função no objeto da entidade de segurança sem anexá-lo ao thread. Para obter mais informações, consulte Substituir um objeto da entidade de segurança.

    Thread.CurrentPrincipal = myPrincipal
    
    Thread.CurrentPrincipal = myPrincipal;
    

Exemplo

O exemplo de código a seguir demonstra como criar uma instância de um GenericPrincipal e um GenericIdentity. Esse código exibe os valores desses objetos no console.

Imports System.Security.Principal
Imports System.Threading

Public Class Class1

    Public Shared Sub Main()
        ' Create generic identity.
        Dim myIdentity As New GenericIdentity("MyIdentity")

        ' Create generic principal.
        Dim myStringArray As String() =  {"Manager", "Teller"}
        Dim myPrincipal As New GenericPrincipal(myIdentity, myStringArray)

        ' Attach the principal to the current thread.
        ' This is not required unless repeated validation must occur,
        ' other code in your application must validate, or the
        ' PrincipalPermission object is used.
        Thread.CurrentPrincipal = myPrincipal

        ' Print values to the console.
        Dim name As String = myPrincipal.Identity.Name
        Dim auth As Boolean = myPrincipal.Identity.IsAuthenticated
        Dim isInRole As Boolean = myPrincipal.IsInRole("Manager")

        Console.WriteLine("The name is: {0}", name)
        Console.WriteLine("The isAuthenticated is: {0}", auth)
        Console.WriteLine("Is this a Manager? {0}", isInRole)

    End Sub

End Class
using System;
using System.Security.Principal;
using System.Threading;

public class Class1
{
    public static int Main(string[] args)
    {
    // Create generic identity.
    GenericIdentity myIdentity = new GenericIdentity("MyIdentity");

    // Create generic principal.
    String[] myStringArray = {"Manager", "Teller"};
    GenericPrincipal myPrincipal =
        new GenericPrincipal(myIdentity, myStringArray);

    // Attach the principal to the current thread.
    // This is not required unless repeated validation must occur,
    // other code in your application must validate, or the
    // PrincipalPermission object is used.
    Thread.CurrentPrincipal = myPrincipal;

    // Print values to the console.
    String name =  myPrincipal.Identity.Name;
    bool auth =  myPrincipal.Identity.IsAuthenticated;
    bool isInRole =  myPrincipal.IsInRole("Manager");

    Console.WriteLine("The name is: {0}", name);
    Console.WriteLine("The isAuthenticated is: {0}", auth);
    Console.WriteLine("Is this a Manager? {0}", isInRole);

    return 0;
    }
}

Quando executado, o aplicativo exibe uma saída semelhante à seguinte.

The Name is: MyIdentity
The IsAuthenticated is: True
Is this a Manager? True

Confira também