Практическое руководство. Создание объектов GenericPrincipal и GenericIdentity
Примечание.
Эта статья применима к Windows.
Дополнительные сведения о ASP.NET Core см. в разделе "Общие сведения о ASP.NET основной безопасности".
Класс можно использовать GenericIdentity вместе с GenericPrincipal классом для создания схемы авторизации, которая существует независимо от домена Windows.
Создание объекта GenericPrincipal
Создайте новый экземпляр класса identity и инициализируйте его с необходимым именем. Следующий код создает новый объект GenericIdentity и инициализирует его с именем
MyUser
.Dim myIdentity As New GenericIdentity("MyUser")
GenericIdentity myIdentity = new GenericIdentity("MyUser");
Создайте новый экземпляр класса GenericPrincipal и инициализируйте его с ранее созданным объектом GenericIdentity и массивом строк, представляющими роли, которые требуется связать с этим участником. В следующем примере кода задается массив строк, представляющих роль администратора и роль пользователя. Затем GenericPrincipal инициализируется с предыдущим GenericIdentity и массивом строк.
Dim myStringArray As String() = {"Manager", "Teller"} DIm myPrincipal As New GenericPrincipal(myIdentity, myStringArray)
String[] myStringArray = {"Manager", "Teller"}; GenericPrincipal myPrincipal = new GenericPrincipal(myIdentity, myStringArray);
Для подключения участника к текущему потоку используйте следующий код. Это полезно в ситуациях, когда субъект должен проверяться несколько раз, он должен быть проверен другим кодом, запущенным в приложении, или он должен быть проверен PrincipalPermission объектом. Объект Principal по-прежнему можно проверять на основании ролей без подключения его к потоку. Дополнительные сведения см. в разделе Замена объекта Principal.
Thread.CurrentPrincipal = myPrincipal
Thread.CurrentPrincipal = myPrincipal;
Пример
В следующем примере кода показано, как создать экземпляр объекта GenericPrincipal и GenericIdentity. Данный код выводит значения этих объектов на консоль.
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;
}
}
Во время выполнения приложение выводит примерно следующие сведения.
The Name is: MyIdentity
The IsAuthenticated is: True
Is this a Manager? True