2009-06-15 11 views
6

Ho due domini di Active Directory, A e B. Gli utenti nel dominio A devono eseguire un'applicazione sui loro desktop per visualizzare e manipolare una risorsa situata su un server nel dominio B. Ogni utente ha anche un account nel dominio B. È è possibile impersonare l'identità del dominio B di ciascun utente per eseguire le operazioni sulla risorsa del dominio B in modo programmatico?Posso impersonare un utente su un diverso dominio di Active Directory in .NET?

Esempio del flusso di lavoro:

  1. utente accede al dominio A.
  2. utente lancia un'applicazione desktop.
  3. L'utente specifica la risorsa nel dominio B.
  4. L'applicazione richiede all'utente le credenziali del dominio B.
  5. L'applicazione rappresenta l'identità del dominio B dell'utente per accedere alla risorsa specificata.
  6. L'utente manipola la risorsa del dominio B utilizzando l'applicazione.

risposta

2

Ho intenzione di parlare in termini di API Win32, ma sono abbastanza sicuro che è possibile p/invocare a questi da .NET. Controllare http://pinvoke.net.

È necessario chiamare l'API LogonUser per creare un token di accesso che rappresenti le credenziali del dominio B dell'utente.

Quindi si chiama ImpersonateLoggedOnUser, passando il token di accesso. Il thread chiamante impersonerà le credenziali del dominio B finché non impersonerai un diverso set di credenziali o chiamerai l'API RevertToSelf.

Credo che va da sé che, per la chiamata LogonUser per avere successo, la macchina si sta eseguendo sulla dovrà fidarsi di dominio B.

+0

Non è il contrario. Voglio dire, il Dominio B non deve fidarsi del Dominio A? –

+0

No, non la penso così. Nessuna relazione di trust deve esistere tra i domini A e B. Ma a seconda del dominio a cui appartiene la macchina, potrebbe esserci qualche altra necessità di fiducia che non abbiamo menzionato. – Martin

+0

È a mia conoscenza che LogonUser non autentica gli utenti remoti. Ho provato a utilizzare questo metodo con WindowsImpersonationContext senza successo. LogonUser: http://msdn.microsoft.com/en-us/library/aa378184(VS.85).aspx Se questo non è il caso, allora comincio a pensare che i miei problemi potrebbero trovarsi altrove. Potrebbe trattarsi di un problema di affidabilità tra i due domini. Lo controllerò. –

1

Check out this question, che copre i problemi di impersonificazione necessari.

+0

Ho visto quella domanda e i collegamenti che fornisce. Non hanno risposto adeguatamente alla mia domanda. La maggior parte degli esempi da trovare dipendono dal metodo LogonUser che, come comprendo, non verrà autenticato da un computer remoto. –

7

Se il computer (quello che fa la rappresentazione) è un membro di un dominio che non si fida del dominio dell'account utente che si sta tentando di impersonare, quindi la rappresentazione fallirà. Chiunque dica il contrario, mi piacerebbe vedere le prove.

+0

Esattamente. Quello che devi fare è stabilire un trust tra i due domini AD. Questo non è difficile da fare, ma "apre" la sicurezza tra i due in modo significativo, e non è una decisione "neutrale" da prendere. Ha molte implicazioni. Ora non so se hai bisogno di avere una relazione di fiducia per impersonare, ma sarei molto sorpreso se non lo facessi. Ma so che funziona se hai fiducia (è qualcosa che ho dovuto codificare nelle ultime due settimane). –