autenticazione web Kerberos

4

Ho sviluppato una web-app interna per le singole pagine (unix, apache e postgresql) protetta da una semplice pagina di accesso. Attualmente, gli utenti hanno il proprio ruolo di login con una password.

Questo sta iniziando a diventare scomodo per un paio di motivi:

  1. Gli utenti hanno più password (per la mia web-app e Active Directory, la rete aziendale è Windows).

  2. Archiviazione delle informazioni dell'utente in due luoghi diversi (vorrei centralizzare).

Ho esaminato Kerberos al punto, ho configurato un KDC e sono in grado di connettermi al database tramite l'autenticazione GSSAPI (solo dalla riga di comando).

Da quanto ho capito dovrei essere in grado di utilizzare il mio KDC che si integrerà con Active Directory.

Il mio problema al momento è l'autenticazione web-app tramite kerberos:

Se un utente è sul Web - come posso ottenere / verificare le credenziali di kerberos? Posso memorizzare le credenziali in un cookie? Ho         ricorrere a OAuth, Webauth o qualcosa di simile?

Per chiarire, quello che voglio fare è:

Se un utente non ha credenziali valide, dai loro la pagina di login per ottenere le credenziali (via kinit, ma come attraverso il browser?) e restituire credenziali valide.          (come posso memorizzare le credenziali nel browser, posso creare un cookie dalle credenziali Kerberos?).

Ho cercato su Google e ho letto un po 'di pdf e risorse web, ma sfortunatamente nessuno di loro è stato in grado di ridurlo abbastanza da permettermi di capire bene come realizzare l'autenticazione web Kerberos.

Se non l'hai notato, sono confuso su come mettere tutto insieme e apprezzerei una visione concettuale di come tutto si concilia.

    
posta fbynite 28.12.2013 - 01:33
fonte

3 risposte

1

Il modo usuale di fare questo, è proprio quando si elaborano le richieste di autenticazione nella propria applicazione Web, si autentica contro Kerberos per verificare l'accesso / password validi.

Non penso che troverai un altro modo per verificare i dettagli di autenticazione dell'utente corrente, ad es. Sessione di Windows, in quanto non sarebbe sicuro dalla progettazione. Se si memorizzasse la combinazione utente / password, si dovrà archiviarla in forma accessibile, e ciò renderebbe anche aperto il dirottamento.

    
risposta data 20.04.2014 - 19:53
fonte
1
  1. Se l'utente non ha un ID valido nel proprio cookie, viene reindirizzato a una pagina di accesso.
  2. Presentano credenziali in un modulo / posta ajax al server che verifica che siano valide tramite qualsiasi mezzo (Kerberos, database, ecc.)
  3. Se sono validi, imposta il loro nome utente nella loro sessione (che dovrebbe avere un ID univoco) e rimanda l'id di sessione in un cookie.

Per quanto riguarda il contenuto del cookie, NON si desidera MAI memorizzare le credenziali in esso o altre informazioni sensibili. Hai solo bisogno di memorizzare un identificatore univoco e casuale. Quando l'utente fa un'altra richiesta alla tua pagina, usi questo identificatore per accedere ai loro dati di sessione. Può assomigliare a questo

auth-id: abc123

Se sono autenticati, i loro dati di sessione dovrebbero contenere il nome utente con cui sono stati autenticati. Inoltre, non è necessario memorizzare le credenziali di kerberos sul lato server, ma solo per verificare se sono valide, quindi memorizzare il nome utente nella sessione.

Ancora una volta è importante capire che il modo in cui l'autenticazione viene eseguita sul server è irrilevante rispetto al modo in cui si mantiene la propria sessione / stato autenticato.

    
risposta data 20.04.2014 - 20:51
fonte
0

Semplifica. Hai considerato di utilizzare l'interfaccia LDAP di AD e di eseguire un ldap_bind contro l'utente con la password specificata? Questo è un modo molto semplice per convalidare le credenziali dell'utente contro un server AD senza memorizzare la password o aggiungere livelli aggiuntivi.

Apache ha anche un plugin auth che fa questo per te: link o link

Kerberos è ottimo per quelle volte in cui non si desidera chiedere all'utente la propria password (si richiede invece un token dal daemon in esecuzione nel proprio ambiente). Non ho mai visto questo funzionare con le app Web precedenti; Immagino che richiederebbe l'app per uscire dalla sandbox del browser.

    
risposta data 22.04.2014 - 08:39
fonte

Leggi altre domande sui tag