簡體   English   中英

如何從 .Net 中的 UserPrincipal 獲取下級登錄名

[英]How to get down-level logon name from UserPrincipal in .Net

我有以下使用用戶主體名稱標識的搜索查詢:

PrincipalContext principalContext = new PrincipalContext(ContextType.Domain);
var user = UserPrincipal.FindByIdentity(principalContext, IdentityType.UserPrincipalName, "user1@domain1.local"); //the searched UPN will be dynamic!

獲得UserPrincipal對象后,我必須創建下級登錄格式 ( domain1\\user1 )。

不幸的是,我有以下專有名稱:

CN=用戶一,OU=每位員工,DC=域1,DC=本地

看起來user.Context.Name是 null,它聲稱是域的名稱。 此外,如果所選用戶是本地用戶,我應該獲取machine1\\localuser1值。

SamAccountName包含用戶名,不包含上下文 ( user1 )。

從任何UserPrincipal對象獲取該格式的最佳方法是什么?

如果您需要為機器帳戶執行此操作,那么您的答案就是要走的路。

但另一種方法,嚴格用於 Active Directory(以防它在其他時候派上用場),是查看msDS-PrincipalName屬性,您可以通過底層DirectoryEntry對象獲取該屬性:

var de = (DirectoryEntry) user.GetUnderlyingObject();
de.RefreshCache(new [] { "msDS-PrincipalName" }); //retrieve it from AD

var domainUsername = de.Properties["msDS-PrincipalName"].Value;

由於它是一個構造屬性,除非您特別要求它,否則它不會返回,這就是您使用RefreshCache的目的。

下級登錄格式可以通過NTAccount對象獲得。 但是,需要進行一些轉換才能將PrincipalSID轉換為NTAccount

string downLevelLogonName =
       userPrincipal.Sid.Translate(typeof(System.Security.Principal.NTAccount)).ToString();

使用該代碼適用於兩種情況(域或本地計算機用戶)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM