Come usare un certificato client nella pagina degli inviti

Ciao,

Abbiamo un’installazione di Discourse ‘solo su invito’. Quando inviamo un invito, il destinatario dovrebbe poter accettare l’invito solo se è presente un determinato certificato client nel browser.

Avete qualche suggerimento su come realizzarlo?

Saluti, Harmstra

Per la configurazione di nginx è necessario inserire qualcosa di simile a questo:

ssl_client_certificate /path/to/ca.pem;
ssl_verify_client on;

Se deve essere presente solo per gli inviti, dovrai farlo all’interno di un blocco location che contiene la rotta di accettazione dell’invito.

Ciao @michaeld,

È anche possibile utilizzare un campo certificato e salvarlo nell’istanza dell’utente come campo utente? Quindi, ad esempio, se vogliamo salvare la data di scadenza, possiamo farlo?

Sembra bizzarramente complicato. Qual è il tuo caso d’uso?

Concordo sul fatto che lo sia.

Il caso d’uso è che qui c’è un’organizzazione che esegue l’autenticazione delle aziende utilizzando quei certificati client. Stiamo cercando di creare un’istanza di Discourse a cui abbiano accesso solo quelle aziende. Sembra abbastanza semplice, basandosi sul frammento nginx fornito da @michaeld.

In quel certificato è presente anche un numero aziendale; vorremmo recuperarlo e renderlo disponibile nell’istanza di Discourse. In questo modo, le aziende potranno facilmente trovarsi e saranno identificabili semplicemente in base al loro numero aziendale.

Spero che ora sia chiaro; in caso contrario, non esitate a chiedere.

Wow. Sembra meno assurdo di quanto mi sarei immaginato!

Puoi contare sul fatto che le persone di quelle aziende utilizzino un indirizzo email aziendale? Sarebbe molto più semplice di un plugin in grado di leggere il certificato. Potresti anche mapparlo al numero di azienda, se quel numero è in qualche modo molto importante.

Potresti passare il certificato a Discourse utilizzando una riga come

proxy_set_header X-Cert-DN: $ssl_client_s_dn;

e poi implementare un plugin per leggere il valore dall’intestazione.