Discourse OpenID Connect (OIDC)

:discourse2: Resumo Discourse OpenID Connect permite que um provedor OpenID Connect seja usado como provedor de autenticação para o Discourse.
:open_book: Guia de Instalação Este plugin já vem incluído no núcleo do Discourse. Não há necessidade de instalá-lo separadamente.

Recursos

O plugin visa fornecer uma implementação mínima da especificação. Especificamente, ele suporta o “Fluxo de Código de Autorização”. Para começar, siga as instruções de instalação do plugin ou entre em contato com seu provedor de hospedagem.

Nosso plugin oauth2-basic pode ser usado para conectar-se a alguns provedores OpenID Connect (OpenID Connect é baseado em OAuth2). No entanto, este plugin exige muito menos configuração manual e pode utilizar o “ID Token” JWT caso uma API JSON não esteja disponível.

A configuração é realizada automaticamente usando um Documento de Descoberta OpenID Connect. De acordo com a especificação, ele deve estar localizado em <domínio do emissor>/.well-known/openid-configuration, mas o Discourse suporta qualquer caminho para permitir implementações não conformes (por exemplo, Azure B2C). O documento de descoberta é armazenado em cache por 10 minutos para melhorar o desempenho em sites de alto tráfego.

Se o documento de descoberta incluir um parâmetro userinfo_endpoint, o plugin o utilizará para coletar metadados do usuário. Caso contrário, o plugin extrairá metadados do id_token (um JWT) fornecido pelo endpoint de token. O plugin NÃO verifica a autenticidade da assinatura do JWT, pois isso aumentaria significativamente a complexidade. Essa decisão é respaldada pela especificação:

Se o ID Token for recebido por comunicação direta entre o Cliente e o Endpoint de Token (como ocorre neste fluxo), a validação do servidor TLS pode ser usada para validar o emissor no lugar de verificar a assinatura do token.

Para provedores de identidade que suportam autorização sem segredo usando o “Fluxo de Código de Autorização com Chave de Prova para Troca de Código” (PKCE), o PKCE deve ser ativado e a configuração client_secret pode ser omitida.

Configuração

Opções de Configuração Básica

  • openid_connect_enabled: Ativar autenticação OpenID Connect

  • openid_connect_discovery_document: URL do documento de descoberta OpenID Connect. Normalmente localizado em https://seu.dominio/.well-known/openid-configuration

  • openid_connect_client_id: ID do cliente OpenID Connect

  • openid_connect_client_secret: Segredo do cliente OpenID Connect

  • openid connect rp initiated logout: Redirecionar o usuário para o end_session_endpoint após o logout. Deve ser suportado pelo seu provedor de identidade e incluído no documento de descoberta.

  • openid connect rp initiated logout redirect: (opcional) O post_logout_redirect_uri que será passado para o endpoint de logout. Se fornecido, deve estar registrado no provedor de identidade.

  • openid_connect_authorize_scope: Os escopos enviados para o endpoint de autorização. Deve incluir ‘openid’

  • openid_connect_use_pkce: Ativar Proof Key for Code Exchange (PKCE) para autenticação OpenID Connect.

  • openid_connect_verbose_logging: Registrar informações detalhadas de autenticação openid-connect em /logs. Mantenha isso desativado durante o uso normal.

Opções de Configuração Avançada

  • openid_connect_token_scope: Os escopos enviados ao solicitar o endpoint de token. A especificação oficial não exige isso.

  • openid_connect_error_redirects: Se o error_reason do callback contiver o primeiro parâmetro, o usuário será redirecionado para a URL no segundo parâmetro. Usado para implementações incomuns que enviam erros em resposta a entradas do usuário (por exemplo, Azure B2C)

  • openid_connect_allow_association_change: Permitir que os usuários desconectem e reconectem suas contas do Discourse do provedor OpenID Connect

  • openid_connect_groups_claim: O nome da claim na resposta OIDC[1] que contém os grupos do usuário como um array de strings. Deixe em branco para desativar a sincronização de grupos. Veja Sincronização de Grupos abaixo.

  • openid_connect_user_field_mappings: Mapeamentos de claims OIDC[2] que serão armazenados nos Campos de Usuário do Discourse. Os campos de usuário são identificados pelo seu ID numérico, que pode ser encontrado na URL ao editá-los pelo painel administrativo.

Sincronização de Grupos

O plugin pode sincronizar automaticamente as associações de grupos do seu provedor OpenID Connect para os grupos do Discourse. A cada login, o plugin lerá a claim configurada do token OIDC e atualizará as associações de grupos do usuário conforme necessário. Para ativar a sincronização de grupos:

  1. Configure seu provedor de identidade para retornar um array de grupos em uma das claims. Isso deve ser um array de strings.

  2. Defina openid_connect_groups_claim como o nome da claim no token OIDC que contém os grupos do usuário (por exemplo, cognito:groups). Uma vez definido, a sincronização das informações para o sistema de “Grupos Associados” do Discourse começará.

  3. Encontre o Grupo do Discourse que deseja vincular. Vá em „Configurações


  1. token ou payload de userinfo ↩︎

  2. do token ou payload de userinfo ↩︎

52 curtidas
Native SSO with Azure AD
How to setup okta authentication with discourse
Discourse Login using external API
OpenIdAuthenticator plugin fails
Sign in to Discourse using ORCID
Discourse, Keycloak, SAML vs OAuth
OpenID Connect support in selfhosted Discourse instance
OpenID connect plugin
Keycloak SSO and logout issue
How can you connect firebase to discourse?
Tutorial for OpenID Connect / Azure AD
Installing own gem in plugin
Is "partial" SSO possible?
CodeBerg support
SSO Login page not showing up
Availability of OpenID Connect in hosted plans
Azure OpenID Connect Authentication Plugin
Auto-sign-in with the OpenId Connect Plugin and AWS Cognito
Enabling Okta for employees only through OpenID Connect Authentication Plugin
Official support for Microsoft Azure AD?
Account already in discourse
Having trouble setting up AWS Cognito passwordless login
Discourse ID fails to activate on my instance
OIDC users not associating with existing Discourse users
Bundling more popular plugins with Discourse core
OpenID Connect Plugin Refactor (OIDC Implicit Flow)
Managing group membership via authentication
Removing Yahoo login from Core, and deprecating OpenID 2.0
Auto-provisioning user accounts when SSO is enabled
SSO with TownNews CMS
OpenID Connect Plugin Refactor (OIDC Implicit Flow)
OpenIdAuthenticator plugin fails
User (patron) getting authorization error message
Error of Discourse OpenID Connect
How to set-up Discourse with Atricore Josso CE
ADFS Authentication
Using OpenID Connect with User Flows in Azure B2C
Can I include website analytics in trust data?
SAML Plugin on Self Hosted Discourse
Anyone have a working AWS Cognito configuration w/ ouath2, openid or sso?
OAuth connection of discourse
Failed to bootstrap due to out of memory killer
How to configure the OIDC to set the Username as the email account name or a username like value returned from my auth providers?
Availability of OpenID Connect in hosted plans
OpenID Connect Plugin not creating new users with AWS Cognito
Restrict Office 365 Login to certain Group
AAD integration with Discourse
Custom Login Flow: AWS Cognito SSO (via Passwordless Signin) - Is this possible?
Azure AD Authentication and Creation of User Account
Intergrate Discourse with keycloak
IndieAuth login
Intergrate Discourse with keycloak
Can we use the default atlassian id to login to discourse
How can add 2 or more discovery documents?
OpenID with line.biz - email in JWT , missing in userinfo
Map oidc fields to custom user fields
CSRF problem in development with 'Discourse OpenID Connect' plug-in
Azure B2C SSO to Discourse?
./launcher rebuild app fails hard 'bundle exec rake db:migrate' possible issue with github/master repo removal of auth/oath2_authenticator
Memberstack + Webflow + Discourse OpenID Connect
How can add 2 or more discovery documents?
Memberstack + Webflow + Discourse OpenID Connect
Possible to create a Sign in with Ghost plugin for Discourse?