tgstation-server icon indicating copy to clipboard operation
tgstation-server copied to clipboard

OIDC Strict cannot handle existing users if OIDC connection is mismatched

Open Drulikar opened this issue 7 months ago • 1 comments

Describe the bug As explained on discord, OIDC strict mode prevents all user editing, and aborts logins if it ever tries to create a user that already exists.

To Reproduce Steps to reproduce the behavior:

  1. Start TGS in non-strict OIDC
  2. Create a user with a CanonicalName that will be a future OIDC connection (but either have no OIDC connection or have something that isn't the new OIDC connection exactly)
  3. Restart TGS in strict OIDC
  4. Attempt to log in as the previously created user

Expected behavior User is able to log in (existing entry is trampled/edited)

Logs error.txt

Server State: (please complete the following information):

  • OS: Linux (Manjaro)
  • Version: v6.18.0 https://discord.com/channels/484170914754330625/653425022966169620/1370758808657199156
  • Database Type/Version: Mysql 8.4.5
  • BYOND Version Used: N/A
  • git Repository Used: N/A
  • Origin Commit hash Used: N/A
  • Active Test Merges: N/A
  • Client Version: v6.10.0 (GITHUB)

Additional context https://discord.com/channels/484170914754330625/653425022966169620/1373802880577966182

Solutions:

  • If an OIDC connection exists but needs to be renamed: update OidcConnections set ExternalUserId='NEWOIDC' where ExternalUserId='OLDOIDC';
  • If it doesn't, either drop back to non-strict and add it, or create the entire row in OidcConnections
  • Allow users to be deleted
  • Allow users to have OIDC connections edited
  • Allow TGS to edit an existing user on login that collides

Drulikar avatar May 19 '25 00:05 Drulikar

Also of note, it seems it will write a new entry to db when attempting to create a new user, and this will also break all future attempts for that user to log in because they don't have an OIDC connection set, and the username can collide.

Drulikar avatar May 29 '25 04:05 Drulikar