Algoritmo di hash della password

Vorrei poter utilizzare gli hash delle password memorizzati in Discourse in un file htpassword per un’altra applicazione.

Quale algoritmo di hashing delle password utilizza Discourse?

Scusa se ho frainteso, ma stai dicendo che vuoi effettivamente copiare l’algoritmo di hashing di Discourse nella tua applicazione per poter confrontare gli hash generati dalla tua app con quelli archiviati da Discourse? Questo non richiederebbe di sincronizzare regolarmente le password da Discourse al tuo file htpasswd, gestire i sali che Discourse potrebbe avere ora o in futuro, e mantenere la tua implementazione dell’algoritmo di hashing sincronizzata con quella di Discourse per sempre?

Di nuovo, scusa se ho frainteso completamente, ma dovevo chiedere chiarimenti per la mia curiosità.

Solo per verificare che una combinazione di nome utente e password sia valida.

Un utente fornisce un nome utente e una password. Verifichiamo che la password fornita sia valida in base all’hash di Discourse. Non genereremo alcun hash.

Con “genera” non intendevo salvare, ma validare che la password sia corretta.


Mi chiedo se Discourse abbia un SSO nella direzione opposta, in modo che le persone possano accedere ad altre app direttamente tramite Discourse.

Sì, Discourse può essere autorevole per l’accesso e questo è il percorso corretto @csmu: tentare di duplicare il metodo di hashing significherebbe che il tuo metodo di accesso si interromperebbe ogni volta che cambia.

Inoltre, non terrebbe conto degli utenti che non hanno una password locale.

Se non sei disposto o non sei in grado di leggere il codice sorgente per trovare la risposta alla tua domanda, potrebbe essere meglio fare un passo indietro e descrivere quale problema stai cercando di risolvere.

Riesco a leggere il codice sorgente una volta che lo trovo. Ho cercato nel codice sorgente - per user.password - e mi sono concentrato principalmente su user_controller. Non mi è saltato subito all’occhio nulla. Apprezzerei qualsiasi indicazione su dove guardare.

Ciò che mi farebbe comodo sarebbe poter validare un utente/password tramite Discourse senza dover aggiungere un accesso SSO / login. Forse tramite l’API o una chiamata diretta a qualche codice Ruby.

Oh, sì. Rails ha senso solo quando sai dove si trovano le cose. Ecco questo

Ma ti consiglio comunque di fare un passo indietro e descrivere il problema, invece di iniziare subito con la tua soluzione.

Grazie Jay -

Dopo aver letto

 def confirm_password?(password)
    return false unless password_hash && salt
    self.password_hash == hash_password(password, salt)
  end

in user.rb

questo funziona per una validazione Ruby pura

user = User.find_by_email('some.email.address')
user.confirm_password?'valid-password'
=> true

Stavo sperimentando con un file .htaccess per un server e stavo cercando un modo per validare un nome utente e una password tramite Discourse per quel server, senza conoscere le password per generare il file .htaccess. L’approccio SSO è migliore e sapere come validare un nome utente e una password senza usare SSO mi sarà utile.

Ciao,
Sarei interessato a sapere quale funzione di hash delle password e quali parametri associati (lunghezza dell’hash, salt, nome della libreria effettiva) vengono utilizzati per l’accesso locale. La lettura del file Ruby menzionato in precedenza non mi ha aiutato. Ho bisogno di queste informazioni per motivi di conformità: le migliori pratiche relative al GDPR (e, in generale, alla sicurezza dei sistemi) richiedono che io documenti tali informazioni.

Modifica: ho trovato la risposta qui: Export password hashes in the PHC formatdiscourse/docs/SECURITY.md at main · discourse/discourse · GitHub