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
- In Dashboard → OAuth apps, register a confidential app. You need two-step login on your NobleID to do this.
- Add this redirect URI, with your own host:Your forum's base URL, including any subfolder, followed by
https://forum.example.org/auth/oidc/callback/auth/oidc/callback. - Tick these scopes: OpenID (always on), Profile
profile, Emailemail. The platform asks for these, and sign-in stops if it asks for a scope the app does not have. - 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:
| Setting | Value |
|---|---|
| openid connect enabled | on |
| openid connect discovery document | https://id.nobleid.org/.well-known/openid-configuration |
| openid connect client id | nbcl_your_client_id |
| openid connect client secret | nbcs_your_client_secret |
| openid connect authorize scope | openid profile email (the default, openid alone, gives no name or email) |
| openid connect token scope | empty |
| openid connect use pkce | on |
| openid connect match by email | on (the default; safe, see below) |
| openid connect email verified claim fallback | off (the default) |
| openid connect email claim | email (the default) |
| openid connect overrides email | off (see below) |
| openid connect rp initiated logout | off to end only the Discourse session, or on to end the NobleID session too (see below) |
| openid connect rp initiated logout redirect | empty, or the forum page to return to after sign-out |
| openid connect authorize parameters | empty |
| openid connect claims | empty |
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,expandnonce, 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 twosubvalues 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_verifiedistrue. 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 claim | Discourse field | Scope |
|---|---|---|
given_name and family_name, or else name | Name | profile |
preferred_username | Username (suggested) | profile |
email | email | |
picture | Avatar | profile |
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 whenemail_verifiedis 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 signing | ES256 |
Sources
Something here does not match what you see? Email info@nobleid.org.