Asıl Nesneyi Değiştirme
Kimlik doğrulama hizmetleri sağlayan uygulamaların belirli bir iş parçacığı için Principal nesnesini (IPrincipal) değiştirebilmesi gerekir. Ayrıca, kötü amaçlı olarak eklenmiş, yanlış bir Sorumlu, doğru olmayan bir kimlik veya rol talep ederek uygulamanızın güvenliğini tehlikeye atacağından, güvenlik sistemi Principal nesnelerini değiştirme özelliğinin korunmasına yardımcı olmalıdır. Bu nedenle, Principal nesnelerini değiştirme yeteneği gerektiren uygulamalara asıl denetim için nesnesi verilmelidirSystem.Security.Permissions.SecurityPermission. (Rol tabanlı güvenlik denetimleri gerçekleştirmek veya oluşturmak için bu iznin gerekli olmadığını unutmayınAsıl nesneler.)
Geçerli Principal nesnesi aşağıdaki görevler gerçekleştirilerek değiştirilebilir:
Yedek Sorumlu nesnesini ve ilişkili Identity nesnesini oluşturun.
Çağrı bağlamı için yeni Principal nesnesini ekleyin.
Örnek
Aşağıdaki örnekte genel bir sorumlu nesnesinin nasıl oluşturulacağı ve iş parçacığının sorumlusunu ayarlamak için nasıl kullanılacağı gösterilmektedir.
using System;
using System.Threading;
using System.Security.Permissions;
using System.Security.Principal;
class SecurityPrincipalDemo
{
public static void Main()
{
// Retrieve a GenericPrincipal that is based on the current user's
// WindowsIdentity.
GenericPrincipal genericPrincipal = GetGenericPrincipal();
// Retrieve the generic identity of the GenericPrincipal object.
GenericIdentity principalIdentity =
(GenericIdentity)genericPrincipal.Identity;
// Display the identity name and authentication type.
if (principalIdentity.IsAuthenticated)
{
Console.WriteLine(principalIdentity.Name);
Console.WriteLine("Type:" + principalIdentity.AuthenticationType);
}
// Verify that the generic principal has been assigned the
// NetworkUser role.
if (genericPrincipal.IsInRole("NetworkUser"))
{
Console.WriteLine("User belongs to the NetworkUser role.");
}
Thread.CurrentPrincipal = genericPrincipal;
}
// Create a generic principal based on values from the current
// WindowsIdentity.
private static GenericPrincipal GetGenericPrincipal()
{
// Use values from the current WindowsIdentity to construct
// a set of GenericPrincipal roles.
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
string[] roles = new string[10];
if (windowsIdentity.IsAuthenticated)
{
// Add custom NetworkUser role.
roles[0] = "NetworkUser";
}
if (windowsIdentity.IsGuest)
{
// Add custom GuestUser role.
roles[1] = "GuestUser";
}
if (windowsIdentity.IsSystem)
{
// Add custom SystemUser role.
roles[2] = "SystemUser";
}
// Construct a GenericIdentity object based on the current Windows
// identity name and authentication type.
string authenticationType = windowsIdentity.AuthenticationType!;
string userName = windowsIdentity.Name;
GenericIdentity genericIdentity =
new GenericIdentity(userName, authenticationType);
// Construct a GenericPrincipal object based on the generic identity
// and custom roles for the user.
GenericPrincipal genericPrincipal =
new GenericPrincipal(genericIdentity, roles);
return genericPrincipal;
}
}
Imports System.Threading
Imports System.Security.Permissions
Imports System.Security.Principal
Class SecurityPrincipalDemo
' Create a generic principal based on values from the current
' WindowsIdentity.
Private Shared Function GetGenericPrincipal() As GenericPrincipal
' Use values from the current WindowsIdentity to construct
' a set of GenericPrincipal roles.
Dim windowsIdentity As WindowsIdentity = windowsIdentity.GetCurrent()
Dim roles(9) As String
If windowsIdentity.IsAuthenticated Then
' Add custom NetworkUser role.
roles(0) = "NetworkUser"
End If
If windowsIdentity.IsGuest Then
' Add custom GuestUser role.
roles(1) = "GuestUser"
End If
If windowsIdentity.IsSystem Then
' Add custom SystemUser role.
roles(2) = "SystemUser"
End If
' Construct a GenericIdentity object based on the current Windows
' identity name and authentication type.
Dim authenticationType As String = windowsIdentity.AuthenticationType
Dim userName As String = windowsIdentity.Name
Dim genericIdentity As New GenericIdentity(userName, authenticationType)
' Construct a GenericPrincipal object based on the generic identity
' and custom roles for the user.
Dim genericPrincipal As New GenericPrincipal(genericIdentity, roles)
Return genericPrincipal
End Function 'GetGenericPrincipal
Public Shared Sub Main()
' Retrieve a GenericPrincipal that is based on the current user's
' WindowsIdentity.
Dim genericPrincipal As GenericPrincipal = GetGenericPrincipal()
' Retrieve the generic identity of the GenericPrincipal object.
Dim principalIdentity As GenericIdentity = CType(genericPrincipal.Identity, GenericIdentity)
' Display the identity name and authentication type.
If principalIdentity.IsAuthenticated Then
Console.WriteLine(principalIdentity.Name)
Console.WriteLine("Type:" + principalIdentity.AuthenticationType)
End If
' Verify that the generic principal has been assigned the
' NetworkUser role.
If genericPrincipal.IsInRole("NetworkUser") Then
Console.WriteLine("User belongs to the NetworkUser role.")
End If
Thread.CurrentPrincipal = genericPrincipal
End Sub
End Class
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin