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:
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_lockedI understand that WebSSH links identities using:
issuer + sub → local WebSSH accountHowever, 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
The OIDC client is configured in Tinyauth with:
The Tinyauth user is:
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:
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: