2013-02-28 204 views
1

我有一個獨特的困惑。驗證用戶憑證

我正在開發一個將測試用戶帳戶權限的類,我已經介紹了大部分基礎。但是我最關心的是針對NullSID進行測試。

的原因,我所關心的是:

if(user != null) 
{ 
    role.IsInRole(WindowsBuiltInRole.Administrator); 
} 

顯然,一個簡單的實現來證明,但將WindowsBuiltInRole檢查嚴格基於個人計算機上或對域?如果用戶的域帳戶確實是Administrator,它會成功測試嗎?

或者更好的方法來測試五個或六個域名SID令牌?其他用戶帳戶(如網絡服務帳戶)是否也會以相同方式操作?什麼是確保令牌值真實性的最佳方法。

任何輸入將是了不起的。

回答

1

的WindowsBuiltInRole枚舉正好對應到Windows SIDs,並精確地與Windows內置的組相關精心kwown SIDS:Well-known security identifiers in Windows operating systems,所有SID以 'S-1-5-32-'。

枚舉值的整數值對應於sid中的最後一個數字,所以,因爲WindowsBuiltInRole.Administrator是544,它對應於S-1-5-32-544。所以你正在使用此代碼檢查是真的,如果用戶屬於管理員組:

SID:S-1-5-32-544

名稱:管理員

說明:內置組。 初始安裝操作系統後,組中唯一的 成員是管理員帳戶。當計算機 加入域時,域管理員組將被添加到管理員組 組中。當服務器成爲域控制器時,管理員組也會添加到企業管理員組中。

+0

這是一篇很棒的文章,所以默認情況下,'BuiltInRole'比較* Local Machine,Workgroup或Domain *來查看哪些默認的'Roles'屬於哪個?但它實際上使用'SID令牌'。 – Greg 2013-04-01 21:04:35

+0

該檢查在管理員組上完成,因此它完全取決於您正在運行代碼的計算機在該組中的內容。而已。使用的底層Windows API僅僅是CheckTokenMembership http://msdn.microsoft.com/en-us/library/windows/desktop/aa376389.aspx和相應的SID。 – 2013-04-02 06:03:35

+0

謝謝,我不知道我是如何錯過的,當時我正在尋找有關處理它的理想方式的答案。你雖然賺了。 – Greg 2013-04-02 15:13:28

1

通過WindowsBuiltInRole枚舉的定義,發現了在:

WindowsBuiltInRole Enumeration

的WindowsBuiltInRole.Administrator作用確實適用於計算機和域沒有任何限制。

WindowsBuiltInRole.PowerUser將能夠運行應用程序,但無法安裝或卸載的東西。

WindowsBuiltInRole.AccountAdministrator可能會管理帳戶甚至更改權限,但不會進行域範圍的更改(如在分佈式部署中)。

WindowsBuiltInRole.BackupOperator可以替代安全限制,僅用於備份或還原文件的唯一目的。

WindowsBuiltInRole.Replicator支持域中的文件複製。

這些不同的角色可能看起來很模糊,但可以推斷除Administrator之外的所有人都可以完成一些管理員任務,但不是全部。

+0

但是另一個'BuiltInRole'帳戶呢?他們是否跨越「域名」? – Greg 2013-03-29 15:36:15

+0

我擴大了答案,希望它是令人滿意的。其他角色有一些類似管理員的權限,不是全部。 – 2013-03-30 00:07:19