OAuth2 Básico no Discourse

:discourse2: Resumo Discourse OAuth2 Basic suporta provedores OAuth2 básicos, assumindo que eles tenham um endpoint de API JSON onde os detalhes do usuário podem ser recuperados por token.
:open_book: Guia de Instalação Este plugin está incluído no núcleo do Discourse. Não há necessidade de instalá-lo separadamente.

Recursos

Este plugin permite que você use um provedor OAuth2 básico como autenticação para o Discourse. Deve funcionar com muitos provedores, com a ressalva de que eles devem fornecer um endpoint JSON para recuperar informações sobre o usuário que está fazendo login.

Isso é principalmente útil para pessoas que estão usando provedores de login que não são muito populares. Se você quiser usar Google, Facebook ou Twitter, eles já estão incluídos e você não precisa deste plugin. Você também pode procurar outros provedores de login em nosso Repositório no Github.

Configuração

Configuração Básica

  1. Primeiro, registre sua aplicação Discourse com seu provedor OAuth2. Será necessário um URI de Redirecionamento que será:

    http://DISCOURSE_HOST/auth/oauth2_basic/callback

:information_source: Substitua DISCOURSE_HOST pelo valor apropriado e certifique-se de estar usando https se estiver habilitado. O provedor OAuth2 deve fornecer um client ID e secret, bem como alguns URLs.

  1. Acesse AdminConfiguraçõesLogin OAuth2 e preencha a configuração básica para o provedor OAuth2:
  • oauth2_enabled - marque esta opção para habilitar o recurso
  • oauth2_client_id - o client ID do seu provedor
  • oauth2_client_secret - o client secret do seu provedor
  • oauth2_authorize_url - URL de autorização do seu provedor
  • oauth2_token_url - URL de token do seu provedor.

:information_source: Se você não conseguir descobrir os valores das configurações acima, consulte a documentação de desenvolvedor do seu provedor ou entre em contato com o suporte ao cliente deles.

Configurando o Endpoint de Usuário JSON

O Discourse agora é capaz de receber um token de autorização do seu provedor OAuth2. Infelizmente, o Discourse precisa de mais informações para completar a autenticação.

Precisamos de um endpoint de API que possa ser acessado para recuperar informações sobre o usuário com base no token.

Por exemplo, o provedor OAuth2 SoundCloud fornece tal URL. Se você tiver um token OAuth2 para o SoundCloud, pode fazer uma solicitação GET para https://api.soundcloud.com/me?oauth_token=A_VALID_TOKEN e receberá um objeto JSON contendo informações sobre o usuário.

Para configurar isso no Discourse, precisamos definir o valor da configuração oauth2_user_json_url. Neste caso, inseriremos o valor:

https://api.soundcloud.com/me?oauth_token=:token

A parte com :token informa ao Discourse que ele precisa substituir esse valor pelo token de autorização recebido quando a autenticação foi concluída.

Há um último passo para completar. Precisamos informar ao Discourse quais atributos estão disponíveis no JSON recebido. Aqui está uma resposta de exemplo do 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": "Alemanha",
  "full_name": "Johannes Wagener",
  "city": "Berlim"
}

As variáveis oauth2_json_user_id_path, oauth2_json_username_path, oauth2_json_name_path e oauth2_json_email_path devem ser configuradas para apontar para os atributos apropriados no JSON.

O único atributo obrigatório é id - precisamos dele para que, quando o usuário fizer login no futuro, possamos recuperar a conta correta. Os outros são ótimos se disponíveis — eles tornarão o processo de cadastro mais rápido para o usuário, pois serão pré-preenchidos no formulário.

Veja como configurei as configurações de caminho JSON:

  oauth2_json_user_id_path: 'id'
  oauth2_json_username_path: 'permalink'
  oauth2_json_name_path: 'full_name'

Usei permalink porque parece mais semelhante ao que o Discourse espera para um nome de usuário do que o username em seu JSON. Note que omiti o caminho do e-mail: o SoundCloud não fornece um e-mail, então o usuário terá que fornecer e verificar isso quando se cadastrar pela primeira vez no Discourse.

Se as propriedades que você deseja do seu objeto JSON estiverem aninhadas, você pode usar pontos. Por exemplo, se a API retornasse uma estrutura diferente como esta:

{
  "user": {
    "id": 1234,
    "email": {
      "address": "test@example.com"
    }
  }
}

Você poderia usar user.id para o oauth2_json_user_id_path e user.email.address para oauth2_json_email_path.

Se a própria chave incluir pontos, você precisará colocá-la entre aspas duplas ou escapar os pontos com uma barra invertida. Por exemplo, dado este JSON:

{
  "example.com/uid": "myuid"
}

Você especificaria o caminho como example\.com/uid ou "example.com/uid".

:warning: Se você definir oauth2_json_email_path, o provedor OAuth2 deve confirmar que o usuário é o dono desse endereço de e-mail. Não fazer isso pode resultar em tomada de conta no Discourse!

:discourse2: Hospedado por nós? Este plugin está disponível em nossos planos Business e Enterprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion

:spiral_notepad: Precisa automatizar cadastros de usuários? Veja Auto-provisioning user accounts when SSO is enabled

28 curtidas
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