2011-09-20 24 views
6

Tôi đã cố gắng sử dụng LogonUser(...) để nhận mã thông báo truy cập cho tài khoản người dùng, như trong this MSDN sample.Tại sao LogonUser (...) không hoạt động cho tài khoản miền?

// 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); 

Khi tôi chạy mẫu (với quyền Administrator) nó hoạt động tốt khi đưa ra một lĩnh vực . và một tên tài khoản người dùng và mật khẩu của địa phương, nhưng không có vấn đề gì tôi làm tôi nhận được mã lỗi thất bại năm 1326 (Logon : tên người dùng hoặc mật khẩu không xác định) nếu tôi cố gắng sử dụng tài khoản miền. Tôi nhận được kết quả tương tự nếu tôi nhập rác cho tên miền, điều này khiến tôi tự hỏi liệu nó có thực sự liên lạc với DC hay không.

Điều gì có thể ngăn việc này hoạt động?

+1

Điều đó có thể là do nhiều điều không may. Máy có được kết nối với miền không? Người dùng miền có được phép đăng nhập vào máy đó không? Cài đặt DNS có được định cấu hình chính xác không? (Tôi đã nhìn thấy một bài báo Citrix cho rằng đây có thể là một vấn đề.). Bài viết sau có một số thông tin về những gì đang xảy ra khi bạn nhập rác cho tên miền - https://groups.google.com/group/microsoft.public.dotnet.languages.csharp/msg/dccfbf8b76120401?pli=1 –

+0

Có bạn xác nhận rằng điều này làm việc mà không có cuộc gọi Console.ReadLine() (ví dụ như cung cấp một mật khẩu như là một chuỗi trực tiếp)? –

+0

Nó không tạo ra sự khác biệt khi mật khẩu xuất phát - đó là một chuỗi khi nó được chuyển tới 'LogonUser'. – GraemeF

Trả lời

0

Sử dụng DOMAIN\LOGIN với một domainname trống cho trường hợp đó ...

+0

Tôi gặp lỗi tương tự cho cả 'DOMAIN \ USERNAME' và' USERNAME @ DOMAIN' với một tên miền rỗng được chuyển tới 'LogonUser'. – GraemeF

1

Trong trường hợp của tôi đó là một thực tế rằng, mặc dù tôi đã đăng nhập vào máy tính của tôi như một người dùng tên miền, máy tính của tôi không phải là bản thân một phần của miền. Sau khi được thêm vào miền, mẫu bắt đầu hoạt động.

+7

Làm cách nào để bạn đăng nhập vào máy tính của mình với tư cách là người dùng miền khi không tham gia vào miền? – WilfriedVS

1

Trong trường hợp của tôi vấn đề, tương tự như người hỏi câu hỏi, là tài khoản mà tôi đang cố gắng xác thực là nằm trong miền mà máy tính hiện tại của tôi không thuộc về. Không giống như poster gốc, máy của tôi không nên và không thể là một phần của miền khác này. Tuy nhiên, tôi muốn đăng nhập thực hiện tác vụ trên tài nguyên trên miền này.

Câu trả lời là sau

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

với các hằng số sau được xác định:

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

Hy vọng rằng điều này sẽ giúp những người khác đang bị mất trong một tình huống tương tự.

Các vấn đề liên quan