OAuth2 di base per Discourse

:discourse2: 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.
:open_book: 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

  1. 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

:information_source: Sostituisci DISCOURSE_HOST con il valore appropriato e assicurati di utilizzare https se abilitato. Il provider OAuth2 dovrebbe fornirti un client ID e un secret, oltre a un paio di URL.

  1. Visita AdminImpostazioniLogin 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 provider
  • oauth2_client_secret - il client secret fornito dal tuo provider
  • oauth2_authorize_url - l’URL di autorizzazione del tuo provider
  • oauth2_token_url - l’URL del token del tuo provider.

:information_source: 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".

:warning: 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!

:discourse2: Ospitato da noi? Questo plugin è disponibile nei nostri piani Business e Enterprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion

:spiral_notepad: Devi automatizzare le registrazioni degli utenti? Consulta Auto-provisioning user accounts when SSO is enabled

28 Mi Piace
Keycloak with Discourse
Discourse SSO with OAuth2
Login from another user database
Shopify Integration
How can we enable Auth0 SSO in Discourse
OAuth2 integration with Drupal
OAuth connection of discourse
Login flow (Flask -> Discourse -> Flask) with OAuth
How to use Oauth2 service provided by discourse?
How to login to discourse from external website
Is "partial" SSO possible?
Set up Salesforce auth using OAuth2 basic support plugin
How to force users link phone number when they using Discourse?
OAuth2 Custom Redirects Plugin
Custom Login / Registration from another API
Login on discourse using mastodon credentials
Open source will support customized provider SSO
Oauth2 with fusionauth cert issues
Auto-provisioning user accounts when SSO is enabled
Configure sign up and log in with Auth0 using the OAuth2 Basic Plugin
SSO with TownNews CMS
What is supposed to go in “DISCOURSE_HOST”?
Custom Provider log-in with OAuth only sign-up/log-in
Discord, Google and Microsoft login, is oAuth2 enough?
Populating email field on login page
CodeBerg support
Gate our community to just members of our Shopify site?
Intergrate Discourse with keycloak
Integration into custom auth system where emails are not unique?
Twitter login doesn't work on meta
Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)
Question about Docker Manager?
Discourse OpenID Connect (OIDC)
🧩 How to Build an Android App User Community with Discourse? [HeyApks Project]
Bundling more popular plugins with Discourse core
Drupal 8 and Discourse shared SSO
Discourse for self hosting
Discourse + Intercom (Current User Id)
Error during SSO integration - Wholistic Minds
ADFS Authentication
Pulling user auth0 sub from OAuth2.0 plugin
Suggestion for improving Integrated Authentication development
Github and Twitter Login/Sign-Up Functionality?
Automatically creating a user when logging in with Webflow/Memberspace
Switching out authentication for a passwordless alternative
Removing Yahoo login from Core, and deprecating OpenID 2.0
Shopify Integration
SSO and Auth0
Migrate a Jive Clearspace forum to Discourse