Skip to content

OIDC_IDENTITY_REJECTED: unable to determine Stable OIDC subject when using Tinyauth #208

Description

@kuzabi

Hello,
I am trying to integrate WebSSH with Tinyauth as an OIDC provider, but I cannot complete the login process because WebSSH requires a Stable OIDC subject to link the external identity to an existing local account.

The OIDC discovery endpoint is reachable and TLS verification works correctly. The login flow redirects to Tinyauth, authentication succeeds, and the browser returns to WebSSH. However, WebSSH rejects the identity with:
2026-09-07T19:18:26.367Z [webssh] ⚠️ [19:18:26] OIDC_IDENTITY_REJECTED | ip=192.xxxxx | issuer=https://auth.example.home | reason=unlinked_or_locked
I understand that WebSSH links identities using:
issuer + sub → local WebSSH account
However, I am unable to determine the exact sub claim generated by Tinyauth for the WebSSH OIDC client. I tried to inspect the browser/network traffic and container logs, but the token is not exposed there. The WebSSH log only reports unlinked_or_locked.
WebSSH configuration

environment:
DEPLOYMENT_PROFILE: homelab
CORS_ORIGINS: https://ssh.example.home
TRUSTED_PROXIES: "1"
SESSION_COOKIE_SECURE: "true"
OIDC_ENABLED: "true"
OIDC_ISSUER: https://auth.example.home
OIDC_CLIENT_ID: <clinetid same webssh&tinyauth>
OIDC_CLIENT_SECRET_FILE: /run/secrets/webssh_oidc_client_secret
OIDC_REDIRECT_URI: https://ssh.example.home/oidc/callback

The OIDC client is configured in Tinyauth with:

oidc:
clients:
webssh:
clientId: <clinetid same webssh&tinyauth>
clientSecret:
trustedRedirectUris:
- https://ssh.example.home/oidc/callback
name: WebSSH

The Tinyauth user is:

username: user1
email:
There is an active local WebSSH account named user1.

How can I obtain or display the exact OIDC sub claim received by WebSSH?
Is there a CLI command, admin action, or debug endpoint that can show the external issuer and subject before linking the identity?
Can WebSSH provide more detailed OIDC debug logging, for example:

  • whether discovery succeeded;
  • whether the authorization code was exchanged successfully;
  • the received iss;
  • the received sub;
  • the selected local account;
  • the exact reason why the identity was considered unlinked?
    Is unlinked_or_locked caused by the missing identity mapping only, or could it also indicate a locked/inactive local account?

For security reasons, I do not expect the complete token or client secret to be logged. A redacted diagnostic such as the following would be sufficient:

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions