| Sintesi | Discourse OAuth2 Basic supporta provider OAuth2 di base, assumendo che dispongano di un endpoint API JSON dove è possibile recuperare i dettagli dell’utente tramite token. | |
| Guida all’installazione | Questo plugin è incluso nel nucleo di Discourse. Non è necessario installarlo separatamente. |
Funzionalità
Questo plugin ti consente di utilizzare un provider OAuth2 di base come metodo di autenticazione per Discourse. Dovrebbe funzionare con molti provider, con la precisazione che devono fornire un endpoint JSON per recuperare informazioni sull’utente che sta effettuando il login.
Ciò è principalmente utile per chi utilizza provider di login non molto diffusi. Se desideri utilizzare Google, Facebook o Twitter, questi sono già inclusi e non hai bisogno di questo plugin. Puoi anche cercare altri provider di login nel nostro repository Github.
Configurazione
Configurazione di base
- Prima di tutto, registra la tua applicazione Discourse presso il tuo provider OAuth2. Ti verrà richiesto un Redirect URI che sarà:
http://DISCOURSE_HOST/auth/oauth2_basic/callback
Sostituisci
DISCOURSE_HOSTcon il valore appropriato e assicurati di utilizzarehttpsse abilitato. Il provider OAuth2 dovrebbe fornirti unclient IDe unsecret, oltre a un paio di URL.
- Visita Admin → Impostazioni → Login OAuth2 e compila la configurazione di base per il provider OAuth2:
oauth2_enabled- seleziona questa opzione per abilitare la funzionalitàoauth2_client_id- il client ID fornito dal tuo provideroauth2_client_secret- il client secret fornito dal tuo provideroauth2_authorize_url- l’URL di autorizzazione del tuo provideroauth2_token_url- l’URL del token del tuo provider.
Se non riesci a determinare i valori per le impostazioni sopra indicate, consulta la documentazione per sviluppatori del tuo provider o contatta il loro supporto clienti.
Configurazione dell’endpoint JSON per l’utente
Discourse è ora in grado di ricevere un token di autorizzazione dal tuo provider OAuth2. Purtroppo, Discourse richiede ulteriori informazioni per completare l’autenticazione.
È necessario un endpoint API a cui è possibile contattare per recuperare informazioni sull’utente in base al token.
Ad esempio, il provider OAuth2 SoundCloud fornisce un URL del genere. Se disponi di un token OAuth2 per SoundCloud, puoi effettuare una richiesta GET a https://api.soundcloud.com/me?oauth_token=A_VALID_TOKEN e riceverai un oggetto JSON contenente informazioni sull’utente.
Per configurare ciò su Discourse, dobbiamo impostare il valore dell’impostazione oauth2_user_json_url. In questo caso, inseriremo il valore:
https://api.soundcloud.com/me?oauth_token=:token
La parte con :token indica a Discourse che deve sostituire quel valore con il token di autorizzazione ricevuto al termine dell’autenticazione.
C’è un ultimo passo da completare. Dobbiamo indicare a Discourse quali attributi sono disponibili nel JSON ricevuto. Ecco un esempio di risposta da SoundCloud:
{
"id": 3207,
"permalink": "jwagener",
"username": "Johannes Wagener",
"uri": "https://api.soundcloud.com/users/3207",
"permalink_url": "http://soundcloud.com/jwagener",
"avatar_url": "http://i1.sndcdn.com/avatars-000001552142-pbw8yd-large.jpg?142a848",
"country": "Germany",
"full_name": "Johannes Wagener",
"city": "Berlin"
}
Le variabili oauth2_json_user_id_path, oauth2_json_username_path, oauth2_json_name_path e oauth2_json_email_path devono essere impostate per puntare agli attributi appropriati nel JSON.
L’unico attributo obbligatorio è id - ne abbiamo bisogno affinché, quando l’utente effettuerà il login in futuro, possiamo recuperare l’account corretto. Gli altri sono utili se disponibili: accelereranno il processo di registrazione per l’utente poiché verranno precompilati nel modulo.
Ecco come ho configurato le impostazioni dei percorsi JSON:
oauth2_json_user_id_path: 'id'
oauth2_json_username_path: 'permalink'
oauth2_json_name_path: 'full_name'
Ho utilizzato permalink perché sembra più simile a ciò che Discourse si aspetta per un nome utente rispetto al campo username nel loro JSON. Notate che ho omesso il percorso email: SoundCloud non fornisce un’email, quindi l’utente dovrà fornirla e verificarla al momento della prima registrazione su Discourse.
Se le proprietà che desideri dal tuo oggetto JSON sono nidificate, puoi utilizzare i punti. Quindi, ad esempio, se l’API restituisse una struttura diversa come questa:
{
"user": {
"id": 1234,
"email": {
"address": "test@example.com"
}
}
}
Potresti utilizzare user.id per oauth2_json_user_id_path e user.email.address per oauth2_json_email_path.
Se la chiave stessa include punti, dovrai racchiuderla tra virgolette doppie o escapare i punti con una barra rovesciata. Ad esempio, dato questo JSON:
{
"example.com/uid": "myuid"
}
Dovresti specificare il percorso come example\.com/uid o "example.com/uid".
Se imposti
oauth2_json_email_path, il provider OAuth2 deve confermare che l’utente possiede quell’indirizzo email. Il mancato rispetto di questa regola può portare al takeover dell’account su Discourse!
Ospitato da noi? Questo plugin è disponibile nei nostri piani Business e Enterprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
Devi automatizzare le registrazioni degli utenti? Consulta Auto-provisioning user accounts when SSO is enabled