Operate

OpenID Connect sign-in

Connect an OIDC provider with PKCE, exact issuer/subject bindings, controlled enrollment, and recovery planning.

v0.3.0 referenceReviewed

On this page

OIDC authenticates a user; Hopya retains its own account, sessions, workspace memberships, and roles. A provider that supports OIDC does not need SAML for this connection.

Test your exact provider/version/HTTPS topology. Keep a tested local administrator account for recovery.

Provider Requirements

Provider Requirements: reference table
RequirementValue
DiscoveryStandards-compliant OIDC metadata
FlowAuthorization Code with ID tokens
PKCES256
Confidential client authclient_secret_post
Scopesopenid, profile, email
IdentityStable iss + sub; exact (issuer, subject) binding
JIT provisioningValid email + boolean email_verified:true; optional name
Production URLsHTTPS for Hopya, issuer, and every discovered endpoint

Register Hopya

  1. Create a confidential client named Hopya.
  2. Register the exact callback:
https://tasks.example.com/api/v1/auth/sso/callback
  1. Enable Authorization Code, PKCE S256, and openid profile email.
  2. Restrict access to intended users/groups; prefer an allowlisted group when supported.
  3. Store client ID/secret privately as operator configuration.

Issuer must match exactly: use discovery’s issuer value, not its discovery-document URL. Preserve paths, case, and trailing slash.

Configure Hopya

Configure Hopya: reference table
VariableSet to
APP_URLExact public HTTPS origin, e.g. https://tasks.example.com
OIDC_ISSUERExact discovery issuer, e.g. https://id.example.com
OIDC_CLIENT_IDRegistered client ID
OIDC_CLIENT_SECRETPrivately supplied client secret
OIDC_AUTO_PROVISIONTrue only for deliberate verified non-admin enrollment; false otherwise
OIDC_ALLOW_INSECURE_HTTPFalse for normal deployment

After supplying those values privately, recreate the deployment:

docker compose up -d --build --force-recreate

Compose sends provider variables only to the API. Never expose the secret through PUBLIC_*.

Open the instance’s /login and choose Continue with single sign-on. First login can create a non-admin account only with valid verified non-colliding email and enabled provisioning. Repeat logins use (issuer, sub), not email.

Grant Access

  1. Restrict the client to intended users/groups.
  2. Deliberately enable OIDC_AUTO_PROVISION=true; let users sign in once.
  3. Add each Hopya account to the intended workspace and role.
  4. Optionally disable provisioning again and recreate the API; existing identity bindings continue working.
Grant Access: reference table
Enrollment caseResult
Verified new email + provisioning enabledNew non-admin account, no existing workspace membership
Email already belongs to a local accountNo automatic linking; admin must independently verify issuer/subject and explicitly link in OIDC identities
Same linked issuer/subject, changed emailStable identity binding, not email matching

Email alone is not proof of identity. Workspace access always follows Hopya membership rules.

Provider Notes

Provider Notes: reference table
Provider / topologyCheck
Pocket IDConfigure Allowed User Groups; new client initially permits no groups; issuer normally public base URL
Separate login/authorization servicesUse discovery issuer, not account-management URL
Other providersVerify discovery, client auth, claims, HTTPS; no blanket certification

Lifecycle Limits

Lifecycle Limits: reference table
ActionLimit / required follow-up
Provider creates/deletes userNot directory synchronization; no automatic immediate Hopya create/disable/remove; no SCIM endpoint
Remove upstream accessBlocks future authorization, not an already-issued Hopya session
Immediate deprovisioningAlso remove Hopya workspace memberships or disable account
Local logoutNot a promise of provider-wide logout

Sources: