Applicazione ASP.NET per l'autenticazione in Active Directory o SQL tramite autenticazione di Windows o moduli

StackOverflow https://stackoverflow.com/questions/306652

Domanda

Sto scrivendo un'applicazione che richiederà più forme di autenticazione.

L'applicazione dovrà supportare l'autenticazione in Active Directory, ma sarà in grado di eseguire il failback su un provider di appartenenze SQL se l'utente non si trova in Active Directory. Siamo in grado di gestire il fallimento del provider SQL nel codice basato sul nome utente fornito perché il nome utente avrà un formato diverso dal nome utente di Active Directory.

È anche possibile? Ciò che intendo è: posso utilizzare l'appartenenza e utilizzare sia ActiveDirectoryMembershipProvider che SqlMembershipProvider insieme o dovrò presentare il mio?

Un'altra ulteriore complessità aggiunta è che vorrei autenticare automaticamente i miei utenti interni in base all'Autenticazione di Windows su AD, ma utilizzare Autenticazione moduli per utenti non presenti sulla nostra rete interna o utenti che utilizzano il provider SQL.

Molto probabilmente saranno server separati, uno interno e l'altro esterno, quindi ho molte cose da fare per capire la replica dei dati e come autenticare gli utenti AD se colpiscono il server esterno ecc.

Mi chiedo quali siano i pensieri là fuori mentre inizio su questa strada. Ciò che voglio fare è anche possibile senza che io rotoli il mio, o c'è un modo per metterli insieme?


Grazie per la risposta.

Il motivo per cui l'ho chiesto originariamente era perché sono stato in grado di far funzionare questo senerio specifico circa 7 anni fa usando IIS per autenticare e quindi restituire le credenziali a un'app Web Lotus Domino Server. Se l'utente non è stato autenticato tramite l'autenticazione / ISS di Windows, Domino gestirà l'autenticazione. Questo era quello che stavo cercando di fare qui, ma davvero non riuscivo a pensare a un modo per farlo funzionare in IIS.

Per quanto riguarda il resto della tua risposta, penso che tu sia sulla strada che dovrò prendere. Ci ho pensato e me lo sono buttato in testa un sacco. L'applicazione sarà comunque leggermente diversa sui due server poiché ci sarà comunque un accesso limitato ai dati sul server esterno. Il fatto che così tanto sarà già diverso, potrei semplicemente trattarli come due applicazioni, annullando così la necessità di utilizzare comunque due tipi di autenticazione nella stessa applicazione.

Sto già scherzando con l'idea di scrivere la mia finestra di autenticazione / accesso per il server esterno e se l'utente tenta di accedere con le proprie credenziali AD sul server esterno sarò in grado di rilevarlo e reindirizzarli al server interno. Se non si trovano sulla rete locale o su VPN, semplicemente non avranno accesso. Questa parte ha ancora qualche processo di pensiero da seguire, quindi non ne sono sicuro.

Come ulteriore pensiero: esiste un modo per inserire una quantità di AD sufficiente in un database SQL per consentirmi di autenticare gli utenti nel database SQL dal server esterno usando le loro credenziali AD, senza creare problemi di sicurezza? Spero di scrivere chiaramente quello che sto pensando ....

Grazie ancora!

Tim

È stato utile?

Soluzione

Questo è il modo in cui ho gestito una situazione simile basata su queste informazioni :

  1. Ha configurato l'applicazione per l'utilizzo dell'autenticazione basata su moduli.
  2. Imposta LoginUrl su una pagina chiamata WinLogin.aspx.
  3. In WinLogin.aspx, utilizzare Request.ServerVariables [" LOGON_USER "] per ottenere il nome utente, quindi chiamare FormsAuthentication.RedirectFromLoginPage (authorizedUserName, false) per accedere. Immagino che sia possibile controllare manualmente Active Directory anche da questo punto .
  4. Crea una pagina html che reindirizza a una pagina chiamata Login.aspx
  5. Login.aspx è il tuo login standard nome utente / password.
  6. In IIS, abilita Autenticazione integrata e Anonimo su tutto il sito, ma nega l'accesso anonimo a WinLogin.aspx.
  7. In IIS, imposta i tuoi errori 401 sulla pagina creata nel passaggio 3.

Ciò che accade sostanzialmente è che quando un utente non autorizzato accede al sito, viene reindirizzato a WinLogin.aspx. Poiché l'anonimo è disattivato, la sicurezza integrata effettua un controllo. In tal caso, è possibile eseguire il codice personalizzato in WinLogin. Se il controllo di sicurezza integrato fallisce, si verifica un errore 401. La tua pagina 401 personalizzata reindirizza a Login.aspx dove l'utente può accedere utilizzando il proprio nome utente e password con il provider SQL.

Altri suggerimenti

Per quanto ne so, le applicazioni Web sono configurate per utilizzare l'autenticazione di Windows o autenticazione moduli, ma non entrambe. Pertanto, non credo che sia possibile autenticare automaticamente gli utenti interni mentre si richiede agli altri di inserire un nome utente / password.

È possibile eseguire l'autenticazione in Active Directory o in un archivio utenti SQL tramite l'autenticazione Form utilizzando un provider personalizzato. Tuttavia, gli utenti di AD dovrebbero comunque inserire il loro nome utente e password. Sebbene non abbia mai combinato questi due metodi, ho usato l'autenticazione Forms per eseguire l'autenticazione su entrambe le fonti una volta o l'altra.

Detto questo, penso che potresti voler considerare di ridurre la "flessibilità" del tuo sistema. Se si dispone di un server esterno e di un server interno, è possibile modificare semplicemente la configurazione del provider su ciascuna copia dell'applicazione per passare a una fonte diversa. Quindi, è possibile configurare quello interno per utilizzare l'autenticazione (automatica) di Windows e quello esterno per utilizzare l'autenticazione tramite moduli.

IMHO, credo che gli utenti interni non dovrebbero usare il server esterno per accedere all'applicazione. Se lo sono, dovrebbero avere un account utente archiviato in SQL, completamente separato dal loro account AD. Fondamentalmente, quando qualcuno accede all'applicazione esternamente, agisce come un utente esterno, indipendentemente dalla sua posizione fisica.

Bene, è possibile usare ActiveDirectoryMembershipProvider e SqlMembershipProvider, ma questo richiede di progettare la pagina di accesso con il proprio codice anziché con i controlli di accesso.

Informazioni sull'autenticazione mix (Windows e Form), per quanto ne so solo IIS 7 lo rende facile e pulito. Vedi questo post per i dettagli,

http://mvolo.com/blogs/serverside/archive/2008/02/11/IIS-7.0-Two_2D00_Level-Authentication-with-Forms-Authentication-and-Windows-Authentication.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top