Gör så här: Skapa GenericPrincipal- och GenericIdentity-objekt
Kommentar
Den här artikeln gäller för Windows.
Information om ASP.NET Core finns i Översikt över ASP.NET Core Security.
Du kan använda GenericIdentity klassen tillsammans med GenericPrincipal klassen för att skapa ett auktoriseringsschema som finns oberoende av en Windows-domän.
Skapa ett GenericPrincipal-objekt
Skapa en ny instans av identitetsklassen och initiera den med det namn som du vill att den ska innehålla. Följande kod skapar ett nytt GenericIdentity-objekt och initierar det med namnet
MyUser
.Dim myIdentity As New GenericIdentity("MyUser")
GenericIdentity myIdentity = new GenericIdentity("MyUser");
Skapa en ny instans av klassen GenericPrincipal och initiera den med det tidigare skapade GenericIdentity-objektet och en matris med strängar som representerar de roller som du vill associera med det här huvudnamnet. I följande kodexempel anges en matris med strängar som representerar en administratörsroll och en användarroll. GenericPrincipal initieras sedan med den tidigare GenericIdentity och strängmatrisen.
Dim myStringArray As String() = {"Manager", "Teller"} DIm myPrincipal As New GenericPrincipal(myIdentity, myStringArray)
String[] myStringArray = {"Manager", "Teller"}; GenericPrincipal myPrincipal = new GenericPrincipal(myIdentity, myStringArray);
Använd följande kod för att koppla huvudnamnet till den aktuella tråden. Detta är värdefullt i situationer där huvudkontot måste verifieras flera gånger, det måste verifieras av annan kod som körs i ditt program, eller så måste det verifieras av ett PrincipalPermission objekt. Du kan fortfarande utföra rollbaserad validering på huvudobjektet utan att koppla det till tråden. Mer information finns i Ersätta ett huvudobjekt.
Thread.CurrentPrincipal = myPrincipal
Thread.CurrentPrincipal = myPrincipal;
Exempel
Följande kodexempel visar hur du skapar en instans av en GenericPrincipal och en GenericIdentity. Den här koden visar värdena för dessa objekt i konsolen.
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;
}
}
När det körs visar programmet utdata som liknar följande.
The Name is: MyIdentity
The IsAuthenticated is: True
Is this a Manager? True