共用方式為


.NET Framework 使用者作業基本概念

更新:2007 年 11 月

.NET Framework 會在 System.Security.Principal 命名空間中提供以角色為基礎的安全性實作,您可以將它用於授權與驗證應用程式中的使用者。本主題將討論如何在 .NET Framework 中使用應用程式授權,以及如何建立用於表示使用者的 IIdentityIPrincipal 物件。

IIdentity 會封裝已驗證的使用者。IPrincipal 是使用者識別 (Identity) 及該使用者所具備之任何角色的組合。您可以在 System.Security.Principal 命名空間中使用預先定義的識別與主要類別,或是建立實作介面的類別,藉以加入自訂驗證 (Authentication)。

若要使用這些介面,您必須使介面名稱完全符合規定,或是在受到影響之來源程式碼檔案的開頭處包含 Imports 陳述式 (Statement),藉以匯入適當的命名空間。如需詳細資訊,請參閱 Imports 陳述式 (.NET 命名空間和型別)

在 .NET Framework 應用程式中使用以角色為基礎的安全性

每一個應用程式執行緒都會有相關聯的主體物件 (可以透過 CurrentPrincipal 屬性存取),此物件表示使用者的安全性內容,並代表該使用者執行程式碼。主體物件會封裝使用者的使用者安全性內容 (或 Identity) 物件。使用兩個可以分開驗證 (在 Identity 物件中) 和授權 (在主體物件中) 的物件。

Identity 物件必須實作 IIdentity 介面。Identity 物件代表特定使用者,並且會在 IIdentity 介面要求時公開下列屬性:NameIsAuthenticatedAuthenticationType。Identity 物件通常會有執行使用者驗證的其他私用成員。

主體物件必須實作 IPrincipal 介面。主體物件會在 IPrincipal 介面要求時公開下列成員,藉以封裝使用者的安全性內容:IsInRole 方法 (此方法會執行授權) 以及 Identity 屬性 (此屬性會提供使用者之 Identity 物件的存取權)。

使用識別

.NET Framework 會提供四種實作 IIdentity 介面的類別:

每一種類別都可以讓您使用不同的使用者身分。若要為使用 Windows 驗證的應用程式存取目前的 WindowsIdentity 物件,請使用 WindowsIdentity 類別的靜態 GetCurrent 方法。您可以呼叫 My.User.InitializeWithWindowsUser 方法,藉以設定目前執行緒的主體。

也可以在自己的自訂類別中實作 IIdentity 介面,藉以建立自訂的識別類別。如需建立自訂識別的詳細資訊,請參閱逐步解說:實作自訂驗證和授權

使用主體

.NET Framework 提供用於連結使用者角色與識別的 IPrincipal 介面。如果應用程式會執行授權,則它應該使用會實作 IPrincipal 的物件。例如,WindowsIdentityGenericIdentity 類別會提供 IPrincipal 的內建實作。此外,還可以根據 IPrincipal 建立自己的主要類別。

將物件指派給執行緒的 CurrentPrincipal 屬性或 My.User.CurrentPrincipal 屬性,藉以連結目前的執行緒與 IPrincipal 物件。然後可以測試使用者是否為特定角色的成員,藉以執行授權檢查。若要這樣做,您可以使用主體的 IsInRole 方法。

ASP.NET 應用程式會以與其他 .NET Framework 應用程式不同的方式,處理 IPrincipal 物件。ASP.NET 會在沒有狀態 (Stateless) 的 HTTP 通訊協定上建立工作階段的外觀。做為此工作階段的一部分,代表使用者的 IPrincipal 物件可以從 HttpContext 物件的 User 屬性供執行使用者要求的所有程式碼使用。Common Language Runtime 會以 Global.asax 檔案之 OnAuthenticate 事件後的 User 值,自動更新 CurrentPrincipal。ASP.NET 應用程式通常會使用 User 屬性,執行授權檢查。

注意事項:

若以手動方式變更 User,則會針對在相同 HTTP 內容中執行的所有執行緒自動更新 CurrentPrincipal 屬性。然而,變更 CurrentPrincipal 不會影響 User 屬性。它只會影響針對要求之其他部分所選擇的執行緒。

在 ASP.NET 應用程式中,My.User.CurrentPrincipal 屬性會更新 User 屬性。

如需建立您自己之 IPrincipal 型別的詳細資訊,請參閱逐步解說:實作自訂驗證和授權

授與使用權限以使用 IIdentity 與 IPrincipal 物件

因為 IIdentity 物件可以使用機密的使用者相關資訊,因此授與使用權限以使用這些物件時應該多加留意。因為應用程式的授權功能是依據它目前的主體,所以您應該保護應用程式目前的 IPrincipal 物件,使它不受變更。

.NET Framework 會查詢這些作業是否具備存取程式碼的安全性權限,藉以提供此項保護措施。使用程式碼存取安全性原則工具 (Caspol.exe),將 SecurityPermissionAttribute.ControlPrincipal 存取權限授與給需要管理這些物件的應用程式。

根據預設,所有在本機安裝的應用程式都具有此存取權限,這是因為它們是在 FullTrust 存取權限集合下所執行。

若要執行下列方法,則需要具備 ControlPrincipal 存取權限:

請參閱

工作

逐步解說:實作自訂驗證和授權

參考

My.User 物件

其他資源

.NET Framework 中使用 Visual Basic 進行的驗證和授權