2011-09-20 16 views
6

Ho cercato di utilizzare LogonUser(...) per ottenere un token di accesso per un account utente, come in this MSDN sample.Perché LogonUser (...) non funziona per gli account di dominio?

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

Quando eseguo il campione (con privilegi di amministratore) funziona bene quando somministrato un dominio di . e un nome utente e la password locale, ma non importa quello che faccio ad avere il codice di errore errore 1326 (Logon : nome utente sconosciuto o password errata) se provo a utilizzare un account di dominio. Ottengo lo stesso risultato se inserisco la spazzatura per il dominio, il che mi fa pensare se stia effettivamente contattando la DC.

Cosa potrebbe impedirsi di funzionare?

+1

Questo potrebbe essere dovuto a un sacco di cose, purtroppo. La macchina è connessa al dominio? L'utente del dominio ha il permesso di accedere a quella macchina? Le impostazioni DNS sono configurate correttamente? (Ho visto un articolo di Citrix che suggeriva che questo potrebbe essere un problema.). Il seguente articolo contiene alcune informazioni su cosa sta accadendo quando si inserisce la spazzatura per il dominio: https://groups.google.com/group/microsoft.public.dotnet.languages.csharp/msg/dccfbf8b76120401?pli=1 –

+0

Hai convalidato che questo funziona senza la chiamata a Console.ReadLine() (ad esempio, fornendo una password direttamente come stringa)? –

+0

Non fa alcuna differenza da dove arriva la password - è una stringa quando viene passata a "LogonUser". – GraemeF

risposta

0

Usa DOMAIN\LOGIN con un nome dominio vuoto per quel caso ...

+0

Ottengo lo stesso errore sia per 'DOMAIN \ USERNAME' che per' USERNAME @ DOMAIN' con un nome di dominio nullo passato a 'LogonUser'. – GraemeF

1

Nel mio caso è stato il fatto che, anche se mi è stato collegato al mio computer come un utente di dominio, il mio computer non era di per sé parte del dominio. Una volta aggiunto al dominio, l'esempio ha iniziato a funzionare.

+7

Come si accede al proprio computer come utente del dominio quando non è collegato a un dominio? – WilfriedVS

1

Nel mio caso il problema, simile al richiedente domanda, era che l'account che stavo cercando di autenticare era in un dominio a cui la mia macchina corrente non apparteneva. A differenza del poster originale, la mia macchina non dovrebbe e non potrebbe far parte di questo altro dominio. Volevo che il login eseguisse un'azione su una risorsa su questo dominio.

La risposta è stata la seguente

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

con le seguenti costanti definite:

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

Speriamo che questo aiuterà gli altri che si sono persi in una situazione simile.

Problemi correlati