共用方式為


設定以角色為基礎的安全性原則和主體

以角色為基礎的安全性可以讓元件來識別目前的使用者和他們在執行階段時關聯的角色。 然後使用程式碼存取安全性原則對應這項資訊,來決定在執行階段時授與的使用權限集。 如果是指定的應用程式定義域,主應用程式 (Host) 可以變更預設之以角色為基礎的安全性原則,並設定預設的安全性主體。 安全性主體代表某一位使用者,以及與這位使用者關聯的角色。

以角色為基礎的安全性通常是用來實作自訂驗證配置。 例如,ASP.NET 主應用程式會使用以角色為基礎的安全性,依據它從網際網路資訊服務 (IIS) 取得的使用者資訊來實作驗證配置。

使用者和使用者之角色這兩者的定義都是應用程式所特有的。 應用程式對於使用者的概念與 Windows 不大一樣。 例如,應用程式可能會要求使用者在登入應用程式時,提供使用者的名稱和密碼。 此一使用者名稱/密碼和使用者用來登入 Windows 的使用者名稱/密碼是沒有關聯性的。

明確為執行緒設定主體

如果已設定執行緒的主體,則會忽略應用程式定義域的原則和預設的主體。 例如,執行緒可能已使用 Thread 類別的 CurrentPrincipal 靜態屬性 (在 Visual Basic 內為 Shared 屬性) 設定自己的主體。 此外,執行緒可能已從啟動它的執行緒中取得其主體。

注意事項注意事項

在 .NET Framework 2.0 版中,當執行緒啟動另一個執行緒,或是將某個工作項目排入佇列供執行緒集區執行時,執行緒的內容 (包括安全性主體) 會自動流到子執行緒或執行緒集區的執行緒。在 .NET Framework 1.0 和 1.1 版中,內容只會流到由執行緒啟動的執行緒,而不會流到執行緒集區的執行緒。

如果沒有安全性主體的執行緒採取需要主體的動作,則會根據目前應用程式定義域的安全性原則和預設的安全性主體來提供主體。

注意事項注意事項

當沒有安全性主體的執行緒使用 CurrentPrincipal 靜態屬性來查詢它的主體時,便會使用應用程式定義域的預設值來設定主體。也就是說,CurrentPrincipal 永遠不會傳回 null。

應用程式定義域的原則和預設的主體

主應用程式 (Host) 可以藉由呼叫 SetThreadPrincipal 方法,為應用程式定義域設定預設的主體。 如果已提供預設的主體,便會將它指定給在應用程式定義域內執行、需要主體,以及還沒有主體的任何執行緒。

注意事項注意事項

預設的主體不會自動套用到呼叫 SetThreadPrincipal 的執行緒上,即使該執行緒沒有主體也是一樣。如果執行緒稍後需要主體,而且未同時取得主體,便會根據當它在應用程式定義域內執行時的預設主體和原則為它指派主體。

如果尚未為應用程式定義域設定預設的主體,則會根據此應用程式定義域的原則來為執行緒指派主體。 根據預設,應用程式定義域的原則就是指派未經驗證的一般主體給執行緒。 主應用程式可以藉由呼叫 SetPrincipalPolicy 方法,為應用程式定義域變更這個原則。 例如,下列 Managed 程式碼會建立一個應用程式定義域,並設定其原則來使用目前的 Windows 主體。

Dim ad As AppDomain = AppDomain.CreateDomain("Child")
ad.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
AppDomain ad = AppDomain.CreateDomain("Child");
ad.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
AppDomain^ ad = AppDomain::CreateDomain("Child");
ad->SetPrincipalPolicy(PrincipalPolicy::WindowsPrincipal);

Unmanaged 主應用程式可以使用 _AppDomain 介面來存取應用程式定義域,此介面會保存跨 .NET Framework 版本的 Vtable 順序。

請參閱

參考

System.AppDomain

概念

裝載概觀

以角色為基礎的安全性

其他資源

重要的安全性概念