天天看點

安全性-身份驗證和授權(一)之Principal1.概述2.身份驗證和授權

1.概述

為了確定應用程式的安全,安全性有幾個重要方面需要考慮。一是應用程式的使用者,通路應用程式的是一個真正的使用者,還是僞裝成使用者的某個人?如何确定這個使用者是可以信任的?

確定應用程式安全的使用者方面是一個2個階段過程:

  • 使用者首先需要身份驗證
  • 再進行授權,已驗證該使用者是否可以使用需要的資源

    對于在網絡上存儲或發送的資料呢?例如,有人可以通過網絡嗅探器通路這些資料嗎?這裡資料加密很重要。一些技術,如WCF,通過簡單的配置提供了加密功能,是以可以看到背景執行了什麼操作。

另一方面是應用程式本身。如果應用程式駐留在WEB提供程式上,如何禁止應用程式執行對伺服器有傷害的操作?

2.身份驗證和授權

安全性的兩個基本支柱是身份驗證和授權。身份驗證是辨別使用者的過程,授權在驗證了所辨別使用者是否可以通路特定資源之後進行。

2.1辨別和Principal

使用辨別可以驗證運作應該程式的使用者。Windows Indentity 類表示一個Windows使用者。如果沒有用windows賬戶辨別使用者,也可以使用實作了Identity接口的其他類。通過這個接口可以通路使用者名,該使用者是否通過身份驗證,以及驗證類型等資訊。

Principal是一個包含使用者的辨別和使用者的所屬角色的對象。IPrincipal接口定義了Identity屬性和IsInRole方法,Identity屬性傳回Identity對象;在IsInRole方法中,可以驗證使用者是否是指定角色的一個成員。角色是有相同安全權限的使用者集合,同時它是使用者的管理單元。角色可以是Windows組或自己定義的一個字元串集合。

表示 Windows 使用者。

命名空間: System.Security.Principal

程式集: mscorlib(位于 mscorlib.dll)

繼承層次結構

System.Object

  System.Security.Claims.ClaimsIdentity

    System.Security.Principal.WindowsIdentity

文法

[SerializableAttribute]

[ComVisibleAttribute(true)]

public class WindowsIdentity : ClaimsIdentity, ISerializable,

IDeserializationCallback, IDisposable

構造函數

名稱 說明
WindowsIdentity(IntPtr) 為指定的 Windows 帳戶标記表示的使用者初始化 WindowsIdentity 類的新執行個體。
WindowsIdentity(IntPtr, String) 為指定的 Windows 帳戶标記和指定的身份驗證類型表示的使用者初始化 WindowsIdentity 類的新執行個體。
WindowsIdentity(IntPtr, String, WindowsAccountType) 為指定的 Windows 帳戶标記、指定的身份驗證類型和指定的 Windows 帳戶類型表示的使用者初始化 WindowsIdentity 類的新執行個體。
WindowsIdentity(IntPtr, String, WindowsAccountType, Boolean) 為指定的 Windows 帳戶标記、指定的身份驗證類型、指定的 Windows 帳戶類型和指定的身份驗證狀态表示的使用者初始化 WindowsIdentity 類的新執行個體。
WindowsIdentity(SerializationInfo, StreamingContext) 初始化 SerializationInfo 流中的資訊所表示的使用者的 WindowsIdentity 類的新執行個體。
WindowsIdentity(String) 初始化以指定使用者主名稱 (UPN) 表示的使用者的 WindowsIdentity 類的新執行個體。
WindowsIdentity(String, String) 初始化以指定使用者主名稱 (UPN) 和指定身份驗證類型共同表示的使用者的 WindowsIdentity 類的新執行個體。
WindowsIdentity(WindowsIdentity) 使用指定的 WindowsIdentity 對象初始化 WindowsIdentity 類的新執行個體。

屬性

安全性-身份驗證和授權(一)之Principal1.概述2.身份驗證和授權
安全性-身份驗證和授權(一)之Principal1.概述2.身份驗證和授權

方法

安全性-身份驗證和授權(一)之Principal1.概述2.身份驗證和授權
安全性-身份驗證和授權(一)之Principal1.概述2.身份驗證和授權

字段

安全性-身份驗證和授權(一)之Principal1.概述2.身份驗證和授權

顯式接口實作

安全性-身份驗證和授權(一)之Principal1.概述2.身份驗證和授權
protected void Page_Load(object sender, EventArgs e)
        {
            AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

            var principal = WindowsPrincipal.Current as WindowsPrincipal;

            var identity = principal.Identity as WindowsIdentity;
            Console.WriteLine("IdentityType:{0}",identity.ToString());
            Console.WriteLine("Name:{0}", identity.Name);
            Console.WriteLine("'user'?:{0}", principal.IsInRole(WindowsBuiltInRole.User));

            Console.WriteLine("'administrtors'?:{0}", principal.IsInRole(WindowsBuiltInRole.Administrator));

            Console.WriteLine("'authenticated'?:{0}",identity.IsAuthenticated);

            Console.WriteLine("'authtype'?:{0}", identity.AuthenticationType);

            Console.WriteLine("'anonymoues'?:{0}", identity.IsAnonymous);

            Console.WriteLine("'token'?:{0}", identity.Token);

        }
           
安全性-身份驗證和授權(一)之Principal1.概述2.身份驗證和授權

很顯然使用者可以很容易通路目前使用者及其角色的詳細資訊,然後使用那些資訊決定允許或拒絕使用者執行某些動作,這就非常有好處。利用角色和windows使用者組,管理者可以完成标準使用者管理工具所能完成的工作,這樣在使用者的角色改變時,通常可以避免代碼的更改。

繼續閱讀