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