ForumsConnects directly

Sign in with NobleID on Discourse

Add Sign in with NobleID to a Discourse forum with its bundled OpenID Connect support.

Written for
Discourse 2026.10 or later. The OpenID Connect plugin has been part of core since July 2025; the email verified claim fallback and email claim settings arrived in 2026.10. On older sites, update Discourse first.
Tested
Written from the platform's documentation and source code. Not yet run against NobleID.

Register on NobleID

  1. In Dashboard → OAuth apps, register a confidential app. You need two-step login on your NobleID to do this.
  2. Add this redirect URI, with your own host:
    https://forum.example.org/auth/oidc/callback
    Your forum's base URL, including any subfolder, followed by /auth/oidc/callback.
  3. Tick these scopes: OpenID (always on), Profile profile, Email email. The platform asks for these, and sign-in stops if it asks for a scope the app does not have.
  4. Copy the client ID and the client secret. The secret is shown once.

The app works at once. Until NobleID verifies it, people see a “not verified” notice on the consent screen.

Settings

Admin → Login & authentication → OIDC, or search all site settings for openid connect:

SettingValue
openid connect enabledon
openid connect discovery documenthttps://id.nobleid.org/.well-known/openid-configuration
openid connect client idnbcl_your_client_id
openid connect client secretnbcs_your_client_secret
openid connect authorize scopeopenid profile email (the default, openid alone, gives no name or email)
openid connect token scopeempty
openid connect use pkceon
openid connect match by emailon (the default; safe, see below)
openid connect email verified claim fallbackoff (the default)
openid connect email claimemail (the default)
openid connect overrides emailoff (see below)
openid connect rp initiated logoutoff to end only the Discourse session, or on to end the NobleID session too (see below)
openid connect rp initiated logout redirectempty, or the forum page to return to after sign-out
openid connect authorize parametersempty
openid connect claimsempty

Discourse reads every endpoint from the discovery document, including the authorization endpoint on www.nobleid.org.

How Discourse behaves with NobleID

  • It authenticates with client_secret_basic, chosen from discovery.
  • It checks the ID token's iss, aud, exp and nonce, but not its signature: it trusts the token because it came straight from NobleID's token endpoint. It then calls userinfo and refuses the sign-in if the two sub values differ.
  • Accounts are keyed on sub. Changing the NobleID email or username does not create a second Discourse account.
  • It links to an existing account by email only when email_verified is true. Keep email verified claim fallback off, so a missing claim counts as unconfirmed.
  • If the person unticks email, Discourse asks them for an email and confirms it itself.

openid connect overrides email: when on, every sign-in replaces the Discourse email with the one NobleID sends. Turn it on only if NobleID is the only way into the forum.

With rp initiated logout off, logging out of Discourse ends the Discourse session only, and the person stays signed in at nobleid.org. With it on, Discourse also sends the person to NobleID, which asks them to confirm. To bring them back to the forum, set rp initiated logout redirect and add that exact URL to the app's sign-out return URLs in the NobleID dashboard.

Fill the profile from NobleID

NobleID claimDiscourse fieldScope
given_name and family_name, or else nameNameprofile
preferred_usernameUsername (suggested)profile
emailEmailemail
pictureAvatarprofile

Discourse uses these when it creates the account. Later sign-ins change the email only with openid connect overrides email on (see above).

Every claim, and how to fill a profile without overwriting what people edit: Fill your app's profile from NobleID.

Before you go live

  • Sign in once with your own NobleID. People need a first and last name on their NobleID profile to sign in; NobleID asks for it if it is missing.
  • Key accounts on sub. Link to an existing account by email only when email_verified is true.
  • Remove any localhost redirect URIs from the app.
  • Keep the client secret out of version control.

NobleID values

Issuer
https://id.nobleid.org
Discovery URL
https://id.nobleid.org/.well-known/openid-configuration
Authorization endpoint
https://www.nobleid.org/oauth/authorize
Token endpoint
https://id.nobleid.org/oauth/token
Userinfo endpoint
https://id.nobleid.org/oauth/userinfo
JWKS URL
https://id.nobleid.org/.well-known/jwks.json
Revocation endpoint
https://id.nobleid.org/oauth/revoke
End-session endpoint
https://www.nobleid.org/oauth/logout
ID token signingES256

Sources

Something here does not match what you see? Email info@nobleid.org.

    ByNobleID