2011-01-26 77 views
1

我希望獲得從已用於訪問我的網頁的用戶帳戶 SID,但是......從只是一個域用戶名獲得的的SecurityIdentifier(SID)(C#)

在一些情況下,你訪問的HttpContext對象調用HttpContext.Current.Request.LogonUserIdentity.User.Value

所有靜態函數是能夠接受的是一個用戶名作爲字符串和域名爲字符串。

如果該域保留爲空,則令人感到有趣的是用戶帳戶名稱與進程正在執行的IIS服務器位於同一個域內。 :/

你的幫助將一如既往地受到高度讚賞。 乾杯。

+0

確實HttpContext.Current有時會爲空,但是當您特別遇到此問題時? –

+0

這是一個庫函數,應該可以在沒有HttpContext時使用 – Terry

回答

1

要獲得用戶的域名,就可以使用LookupAccountName。如果你需要一個pinvoke樣品,從pinvoke.net

你通過DOMAIN\UserName函數。 LookupAccountName函數將返回用戶SID和域名。

我懷疑你並不需要知道域SID。我認爲返回的域名對您來說應該足夠了。如果您確實想知道域SID,則可以直接從返回的用戶SID中提取它。

用戶SID始終以域SID開頭。有關SID結構如何以及如何提取域SID的詳細信息,請查看here

0

嘗試使用目錄服務?需要.Net 3.5爲此:

public UserPrincipal GetUserPrincipal(string userName) 
    {    
     PrincipalContext ctx = new PrincipalContext(ContextType.Domain, LDAPDomain, LDAPUser, LDAPPassword);      
     return UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, userName);    
    } 

然後,您可以使用具有.Sid方法的UserPrincipal類。

我設置從web.config我的域名和AD帳戶信息像這樣

private String LDAPDomain 
    { 
     get 
     { 
      return ConfigurationManager.AppSettings["LDAPDomain"]; 
     } 
    } 
相關問題