2009-04-17 9 views
28

La mia azienda sviluppa e vende un'applicazione SaaS con centinaia di clienti. Alcuni dei nostri clienti ci hanno chiesto di supportare l'integrazione LDAP per l'autenticazione degli account utente rispetto ai loro sistemi esistenti invece di dover creare un altro account di accesso per ciascuno dei loro dipendenti. Sembra che questo si chiami Single Sign On (SSO) in molti posti? Naturalmente il nostro sistema ha già un meccanismo per la gestione dei profili degli account utente e l'autenticazione di tali account utente dalla nostra pagina di accesso.Come creare l'integrazione LDAP per la mia app Web?

Siamo un po 'ignoranti su LDAP e siamo confusi su alcune cose. Per favore, scusate il possibile uso di termini errati (ricordate, siamo un po 'ignoranti su questo).

pensiamo di capire le basi di come questo potrebbe funzionare:

  • Il nostro cliente configura il proprio account per "attivare" la funzione "autenticazione remota" per il proprio account. Forniscono l'URL remoto che autentificherà i propri utenti.
  • Gli utenti accedono alla nostra pagina di accesso e tentano un accesso utilizzando il nome utente e la password forniti dal sistema LDAP dell'azienda.
  • La nostra pagina di accesso inoltrerà in modo sicuro le credenziali di accesso (presumibilmente crittografate e hash in un formato concordato) all'URL "autenticazione remota" fornita dal nostro cliente.
  • Lo script del cliente autenticherà l'utente e quindi lo reindirizzerà al nostro sito con lo "stato di autenticazione".
  • La nostra pagina analizzerà lo "stato di autenticazione" e accetterà l'utente come connesso o meno.

Supponendo che le informazioni di cui sopra siano anche parzialmente corrette, avremo comunque bisogno che ogni utente abbia un account nel nostro sistema. Non avremo bisogno di un modo per sincronizzare i profili dei nostri account utente con i profili utente nella directory LDAP? Si tratta semplicemente di un "ID esterno" che fa riferimento all'ID dell'utente nel sistema LDAP? Verrà quindi richiesto che lo script di "autenticazione remota" del cliente fornisca tale ID al nostro sistema in modo da sapere quale account utente nel nostro sistema associare al login?

Cosa ci manca?

A proposito, la nostra piattaforma è IIS, ASP.Net 2.0 e SQL Server 2005.

risposta

9

Ci sono diverse opzioni. Se si intende realmente LDAP, al contrario di solo Active Directory, probabilmente utilizzerei System.DirectoryServices.Protocols per eseguire un binding LDAP utilizzando le credenziali fornite tramite un canale sicuro.

Strictly, questo non è Single Sign-On. SSO significa solo dover inviare i tuoi crediti una volta al primo accesso. Ciò sta semplicemente riducendo la complessità per gli utenti con un solo ID. Di solito, per i client Windows in un ambiente aziendale con una combinazione di piattaforme e tecnologie, SSO viene realizzato da un client aggiunto al desktop che gestisce l'autenticazione su vari sistemi. In un ambiente solo MS, potresti ottenere SSO se tutte le tue app Web sono su IIS, utilizzi IE e utilizzi Autenticazione integrata di Windows, rappresentazione e tutte queste cose.

È possibile considerare la registrazione automatica di un utente autenticato nel sistema, a meno che non sia necessario preconfigurare i dati del tipo di profilo. Se si richiede la pre-configurazione degli utenti, si potrebbe considerare di importare regolarmente (tutti o un sottoinsieme filtrato di) utenti dalla directory LDAP e di averli in uno stato non configurato, in modo tale che gli amministratori selezionino da un elenco esistente di non -gli utenti configurati invece di digitare ID. Altrimenti, rischi che i tuoi amministratori digitino l'ID utente sbagliato e che non corrispondano.

È possibile fornire un'API in modo tale che le soluzioni di Identity and Access Management (dato il proprio punto di vista Microsoft, vedere ILM2 007 come un esempio) possano integrarsi con il proprio sistema e fare tutta la gestione dell'account utente.

1

È necessario decidere come si prevede di collegare un utente LDAP a un account all'interno dell'applicazione.

Ad esempio, è possibile richiedere che il nome utente all'interno del sistema LDAP corrisponda al nome utente all'interno della propria app, oppure si potrebbe richiedere che qualcuno specifichi esplicitamente un nome utente LDAP all'interno di ciascun account utente nella propria app.

Una volta individuato il collegamento, è possibile eseguire semplicemente un binding LDAP per verificare le credenziali dell'utente.

3

Come sempre ricordarsi di convalidare il test di autenticazione per assicurarsi che la password inviata non sia vuota.

Un binding con un nome utente e nessuna password è considerato un binding anonimo, in base allo standard, e sembra che sia riuscito! Quando in realtà non lo era davvero.

Questo è un problema per l'applicazione da gestire, poiché il server LDAP sta solo seguendo lo standard, uno standard fastidioso, ma comunque uno standard.

2

considerare Forse Authentication Authorization Vs

Authentication - quale utente è questo? Autorizzazione: chi dovrebbe essere in grado di utilizzare l'applicazione, gli utenti specificati, i gruppi?

Attualmente si sta implicando l'autorizzazione tramite l'autenticazione perché solo coloro che sono registrati alla propria app possono utilizzarlo.

Se si utilizza una directory al posto del tuo datastore personalizzato poi

  • utilizzare il metodo di connessione di directory per autenticare l'utente
  • si (può) ottenere l'autenticazione gratis - l'utente è noto per Windows, Windows in grado di identificare iis e sqlserver, forse non è necessario chiedere all'utente chi sono.
  • saprai di più utenti che avere l'autorizzazione e hai bisogno di applicare restrizioni - limitare le connessioni ad un particolare gruppo.
  • potrebbe memorizzare i dati utente nella directory, piuttosto che con i dati dell'app nel server sql.

Se gli utenti vogliono davvero LDAP generico, poi si vuole guardare in (C) ldap_connect, ldap_bind_s (C#) LDAPConnection System.DirectoryServices.Protocols

O ancora tornare a AD questa Demystified .Net App single sign on potrebbe aiutare

1

Il modo in cui funziona in il nostro sistema:

  • Quando un utente accede alla web app, la variabile del server REMOTE_USER si presume essere l'utente del token
  • Il codice di accesso si connette alla directory LDAP con un account specifico per ricerca
  • Il codice di accesso cerca un LDAP account che "le partite" la REMOTE_USER
  • Il codice di accesso poi cerca di far corrispondere tale account con un account nel nostro sistema
  • Se corrispondenza è possibile tutto il percorso attraverso, assumere l'utente connesso come account abbinato, continuerà normalmente

questo modo l'utente può riutilizzare la loro autenticazione di Windows di dominio all'interno della nostra applicazione.

1

Ecco un po 'di utile software che consente directory LDAP a cui accedere attraverso il web, utilizzando JSON-RPC: Json2Ldap

Problemi correlati