Invio di credenziali per ogni richiesta

2

Ho intenzione di utilizzare un bundle Symfony SMB come questo per esplorare un file system Windows tramite PHP.

Per fare ciò, creerò un'API Web che restituirà un elenco di file e directory in una directory in modo da poter esplorare i contenuti di una condivisione di rete.

Poiché dovrò autenticarmi con LDAP ogni volta che effettuo la connessione, qual è il modo migliore per inviare ogni volta il nome utente e la password LDAP dell'utente?

È sicuro memorizzare una chiave privata sul server in un database con il nome utente, che viene utilizzato per crittografare una stringa, ad es. (username: password: timestamp: ipaddress) e poi fare in modo che il client invii quella stringa crittografata con ogni richiesta utilizzando HTTPS per il server per poi decifrare e utilizzare le credenziali - dopo ogni richiesta la chiave privata verrà modificata. Se il timestamp è scaduto lo rifiuterà, se l'indirizzo IP non corrisponde lo rifiuterà ecc.

O c'è un modo migliore / più sicuro di autenticarsi con le credenziali ogni volta senza che l'utente debba reinserirsi per ogni richiesta?

    
posta Daniel Few 22.01.2018 - 21:08
fonte

2 risposte

3

La prima cosa che dovresti fare è controllare se esiste qualcosa che puoi usare invece di provare a lanciare il tuo framework di autenticazione / autorizzazione. Going web? Quindi guarda OAuth 2.0 o OpenID. Se devi tirare il tuo, allora:

Evita di inviare credenziali se puoi, invece di inviare un token che può essere utilizzato per verificare le credenziali. Token con un valore hash che può essere utilizzato per rappresentare il segreto.

Una volta generato il tuo token, memorizzalo nella cache sul client in un ambiente sicuro e invia per richiesta.

    
risposta data 22.01.2018 - 21:46
fonte
0

Credo che in teoria potresti ottenere un ticket Kerberos per le credenziali e utilizzarlo per accedere al servizio file, sebbene Microsoft stia adottando sempre più protocolli aperti, non tutte le API sono esposte e poca documentazione esiste utilizza una terminologia molto proprietaria. Quindi in pratica non funzionerà.

La creazione di un'istanza Daemon per mantenere aperta la sessione SMB tra richieste HTTP è un non-starter, sebbene l'utilizzo di socket Web per mantenere una connessione persistente sia praticabile, ma ciò richiede l'implementazione di molto più della tua app in JavaScript e richiede un molto codice personalizzato per gestire i server.

Mi piacerebbe andare con un buon vecchio http.

Quindi hai bisogno di un mezzo per recuperare il testo in chiaro della password SMB per ogni richiesta, ma per una buona sicurezza non vuoi che il testo in chiaro rimanga tra le richieste. Un modo per raggiungere tale obiettivo sarebbe quello di memorizzare la password crittografata sul server (facoltativamente impacchettata con altri metadati) utilizzando una chiave memorizzata sul client (ma inviata ad ogni richiesta - ad esempio un cookie). Questo è in realtà abbastanza facile da fare con un gestore di sessione personalizzato in PHP.

Ecco quello che ho preparato in precedenza.

    
risposta data 21.02.2018 - 23:13
fonte

Leggi altre domande sui tag