2011-09-20 50 views
6

我一直在嘗試使用LogonUser(...)來獲取用戶帳戶的訪問令牌,如this MSDN sample爲什麼LogonUser(...)不適用於域帳戶?

// Call LogonUser to obtain a handle to an access token. 
bool returnValue = LogonUser(userName, domainName, Console.ReadLine(), 
    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, 
    out safeTokenHandle); 

當我運行示例(具有管理員權限)給出的.域和本地用戶帳戶名和密碼時,它工作正常,但無論我做什麼,我得到錯誤代碼1326(登錄失敗:未知的用戶名或密碼錯誤)如果我嘗試使用域帳戶。如果我爲域輸入垃圾,我會得到相同的結果,這讓我懷疑它是否實際上與DC聯繫。

有什麼可以阻止這個工作?

+1

這可能是由於一堆事情不幸的緣故。機器是否連接到域?域用戶是否允許登錄到該機器? DNS設置配置是否正確? (我看過一篇Citrix文章,認爲這可能是一個問題。)。下面的文章有一些信息,當你爲域輸入垃圾時發生了什麼 - https://groups.google.com/group/microsoft.public.dotnet.languages.csharp/msg/dccfbf8b76120401?pli=1 –

+0

你有沒有驗證這可以在沒有Console.ReadLine()調用的情況下工作(例如直接提供密碼作爲字符串)? –

+0

密碼來自哪裏並沒有什麼區別 - 當它傳遞給LogonUser時,它是一個字符串。 – GraemeF

回答

0

使用DOMAIN\LOGIN與這種情況下,一個空的域名...

+0

對於'域名\用戶名'和'用戶名@域名',傳遞給'LogonUser'的域名爲空,我得到同樣的錯誤。 – GraemeF

1

對我來說,這是一個事實,雖然我是登錄到我的計算機作爲域用戶,我的電腦是不是本身的一部分域。一旦添加到域中,示例就開始工作。

+7

如何在未加入域的情況下以域用戶的身份登錄到計算機? – WilfriedVS

1

在我的情況下,類似於問題提問者的問題是,我試圖驗證的帳戶位於我當前的計算機不屬於的域中。與原始海報不同,我的機器不應該也不可能成爲其他域的一部分。我希望登錄對此域上的資源執行操作。

答案是以下

bool success = LogonUser(
       userName, 
       domain, 
       password, 
       (int)LOGON32_LOGON_NEW_CREDENTIALS, //9 
       (int)LOGON32_PROVIDER_DEFAULT, //0 
       out userToken); 

與定義的以下常量:

public const int LOGON32_LOGON_NEW_CREDENTIALS = 9; 
public const int LOGON32_PROVIDER_DEFAULT = 0; 

希望這將有助於其他人誰是在類似情況下丟失。

相關問題