Objekty zabezpečení a identity
Poznámka:
Tento článek se týká Windows.
Informace o ASP.NET Core najdete v tématu ASP.NET Core Security.
Spravovaný kód může zjistit identitu nebo roli objektu prostřednictvím IPrincipal objektu, který obsahuje odkaz na IIdentity objekt. Může být užitečné porovnat identity a objekty zabezpečení se známými koncepty, jako jsou uživatelské a skupinové účty. Ve většině síťových prostředí představují uživatelské účty lidi nebo programy, zatímco skupinové účty představují určité kategorie uživatelů a práva, která mají. Podobně objekty identity .NET představují uživatele, zatímco role představují členství a kontexty zabezpečení. V .NET objekt zabezpečení zapouzdřuje objekt identity i roli. Aplikace .NET uděluje instančnímu objektu práva na základě své identity nebo častěji jeho členství v rolích.
Objekty identit
Objekt identity zapouzdřuje informace o ověřovaném uživateli nebo entitě. Na nejzásadnější úrovni objekty identity obsahují název a typ ověřování. Název může být buď uživatelské jméno, nebo název účtu Windows, zatímco typ ověřování může být podporovaný přihlašovací protokol, například Kerberos V5, nebo vlastní hodnota. .NET definuje GenericIdentity objekt, který lze použít pro většinu vlastních scénářů přihlášení, a specializovanější WindowsIdentity objekt, který lze použít, když chcete, aby vaše aplikace spoléhala na ověřování systému Windows. Kromě toho můžete definovat vlastní třídu identity, která zapouzdřuje vlastní informace o uživatelích.
Rozhraní IIdentity definuje vlastnosti pro přístup k názvu a typu ověřování, například Kerberos V5 nebo NTLM. Všechny třídy Identity implementují rozhraní IIdentity . Mezi objektem Identity a tokenem procesu Systému Windows, ve kterém se právě spouští vlákno, neexistuje žádný povinný vztah. Pokud je objekt Identity objektem WindowsIdentity , předpokládá se, že identita představuje token zabezpečení systému Windows.
Objekty zabezpečení
Objekt zabezpečení představuje kontext zabezpečení, pod kterým je spuštěný kód. Aplikace, které implementují práva k udělení zabezpečení na základě role na základě role přidružené k objektu objektu zabezpečení. Podobně jako objekty identit poskytuje GenericPrincipal .NET objekt a WindowsPrincipal objekt. Můžete také definovat vlastní třídy objektu zabezpečení.
Rozhraní IPrincipal definuje vlastnost pro přístup k přidruženému objektu Identity a také metodu pro určení, zda je uživatel identifikovaný objektem Principal členem dané role. Všechny hlavní třídy implementují IPrincipal rozhraní, stejně jako všechny další vlastnosti a metody, které jsou nezbytné. Například modul CLR (Common Language Runtime) poskytuje třídu WindowsPrincipal , která implementuje další funkce pro mapování členství ve skupinách na role.
Objekt zabezpečení je vázán na objekt kontextu volání (CallContext) v rámci domény aplikace (AppDomain). Výchozí kontext volání se vždy vytvoří s každou novou doménou AppDomain, takže je vždy k dispozici kontext volání pro přijetí objektu Principal . Při vytvoření nového vlákna se pro vlákno vytvoří také objekt CallContext . Odkaz objektu Principal se automaticky zkopíruje z vlákna vytváření do callContext nového vlákna. Pokud modul runtime nemůže určit, který objekt zabezpečení patří tvůrci vlákna, řídí se výchozí zásadou pro vytvoření objektu zabezpečení a identity .
Konfigurovatelná zásada specifická pro doménu aplikace definuje pravidla pro rozhodování o typu objektu Principal , který se má přidružit k nové doméně aplikace. Pokud zásady zabezpečení povolují, může modul runtime vytvořit objekty zabezpečení a identity , které odrážejí token operačního systému přidružený k aktuálnímu vláknu spuštění. Modul runtime ve výchozím nastavení používá objekty zabezpečení a identity , které představují neověřené uživatele. Modul runtime nevytvoří tyto výchozí objekty zabezpečení a identity , dokud se kód nepokusí o přístup k nim.
Důvěryhodný kód, který vytvoří doménu aplikace, může nastavit zásady domény aplikace, které řídí vytváření výchozích objektů zabezpečení a identity . Tato zásada specifická pro doménu aplikace se vztahuje na všechna vlákna spouštění v této doméně aplikace. Nespravovaný důvěryhodný hostitel má ze své podstaty možnost nastavit tuto zásadu, ale spravovaný kód, který tuto zásadu System.Security.Permissions.SecurityPermission nastaví, musí mít pro řízení zásad domény.
Při přenosu objektu principal mezi doménami aplikace, ale ve stejném procesu (a proto ve stejném počítači), infrastruktura vzdálené komunikace zkopíruje odkaz na objekt objektu zabezpečení přidruženého k kontextu volajícího do kontextu volané.