Come utilizzare le credenziali LDAP offline?
-
06-09-2019 - |
Domanda
Vorrei utilizzare un server LDAP (probabilmente Apache directory ) per gestire gli account di accesso e le credenziali per un applicazione. Di tanto in tanto l'applicazione ha bisogno di lavorare offline (su un computer portatile) senza una connessione al server LDAP.
Qual è il modo migliore per replicare le credenziali localy?
ho già pensato:
-
Mitosis di replicare il server LDAP sul computer portatile.
Ma sarebbe una soluzione piuttosto "pesante" e complicata. Inoltre mitosi sembra non essere essere ancora finito.
-
L'esportazione le credenziali in un file LDIF che possono essere memorizzati sul computer portatile.
Ma avrei bisogno di un modo per verificare che il file LDIF proviene effettivamente dal server LDAP (Il file dovrebbe includere una sorta di firma). Inoltre vorrei respingere file LDIF che non sono essere aggiornato da più di una settimana. Sarebbe bello se potessi evitare di attuare la firma e l'età controllare me stesso.
Tutte le altre idee o strumenti che mi potrebbero aiutare?
Modifica Modificato: Ho dato un'occhiata al Kerberos perché il documentazione della Java-Kerberos-API sembra dire che è possibile utilizzare un biglietto nella cache in un locale cache e ho pensato che questo potrebbe essere una soluzione per me. Inoltre Kerberos può essere aggiunto come plugin per directory di Apache. Ma i negozi di cache Kerberos decifrati biglietti (che mira a condividerli con altre applicazioni). Avrei bisogno la versione criptata del biglietto per essere in grado di controllare la password utente durante una sessione in linea. Conclusione:. Kerberos non offre una soluzione semplice per il mio problema
Soluzione 2
Ecco la soluzione ho deciso di usare (ho già descritto in una modifica alla mia domanda, ma vorrei in grado di accettare una risposta a "chiudere" la questione):
Non ho trovato un'altra soluzione, ho deciso di utilizzare un'esportazione LDIF, aggiungere un timestamp come commento all'inizio del file e poi firmare il file. Per firmare il file a calcolare un valore hash (SHA-1) del file di una chiave segreta +. La firma viene aggiunto come commento all'inizio del file. Per controllare la firma tolgo la prima riga del file firmato e ricalcolare il valore di hash.
Altri suggerimenti
Sapendo che sarà probabilmente ok se l'utente deve accedere una volta on-line prima di poter accedere offline , si consideri il seguente algoritmo:
- utente fornisce l'applicazione con un
(username + password)
- applicazione tenta di contattare
LDAP
per l'autenticazione- di lavoro on-line? (Ad esempio connessione riuscita)
- applicazione l'autenticazione contro LDAP utilizzando
(username + password)
- di autenticazione successo?
- application store o aggiornamenti
hash(password)
come(cached_credentials)
per(username)
in deposito locale sicura
procede - applicazioni come autenticato
[[STOP]]
- application store o aggiornamenti
- di autenticazione fallita?
-
procede
- applicazioni come (credenziali non corrette) non autenticati
[[STOP]]
- applicazioni come (credenziali non corrette) non autenticati
- di autenticazione successo?
- applicazione l'autenticazione contro LDAP utilizzando
- lavoro off-line? (Ad esempio errore di rete)
- applicazione tenta di recuperare
(cached_credentials)
per(username)
dallo storage locale sicura-
(cached_credentials)
esisteAND
più recente rispetto(1 week)
?- applicazione confronta
(cached_credentials)
controhash(password)
- partita?
-
procede
- applicazioni come autenticato
[[STOP]]
- applicazioni come autenticato
- non può competere?
-
procede
- applicazioni come (credenziali non corrette) non autenticati
[[STOP]]
- applicazioni come (credenziali non corrette) non autenticati
- partita?
- applicazione confronta
-
(cached_credentials)
non esisteOR
meno recente di(1 week)
?- applicazione procede come non autenticato (errore di rete)
[[STOP]]
- applicazione procede come non autenticato (errore di rete)
-
- applicazione tenta di recuperare
- di lavoro on-line? (Ad esempio connessione riuscita)
Questa è (o era, IIRC), tra l'altro, lo stesso modello impiegato da Windows NT + per l'autenticazione degli utenti contro i controller di dominio. Al momento del login viene effettuato un tentativo per autenticare contro il controller di dominio e creare o aggiornare la versione locale (cache) del profilo utente. Se il controller di dominio non è disponibile, all'utente viene richiesto di procedere con l'autenticazione contro le credenziali catturati nel (cache) del profilo locale (se ne esiste uno.)
Modifica
- Sì, questo è, nello spirito, la stessa soluzione come copiare un file LDIF a livello locale, tranne che non c'è bisogno di analizzare ldif quando sei offline. :)
- Si è capito che è possibile memorizzare eventuali attributi aggiuntivi (permessi, ecc) nella cache
- E 'inoltre inteso che 'archiviazione sicura' è almeno firmato. :) È possibile farlo abbastanza facilmente con un hash SHA-1 e un segreto, oppure è possibile utilizzare provider di crittografia a tutti gli effetti disponibili sulla piattaforma (o in Java, se si utilizza Java.) Non è necessario per criptare il più a lungo come nessuna informazione segreta viene memorizzato all'interno.