Skip to content

Comments

fix: Fix account linking via SCIM#21099

Closed
SCBionicle wants to merge 15 commits intoopen-webui:devfrom
SCBionicle:scim-fixes
Closed

fix: Fix account linking via SCIM#21099
SCBionicle wants to merge 15 commits intoopen-webui:devfrom
SCBionicle:scim-fixes

Conversation

@SCBionicle
Copy link

Pull Request Checklist

Before submitting, make sure you've checked the following:

  • Target branch: Verify that the pull request targets the dev branch. Not targeting the dev branch will lead to immediate closure of the PR.
  • Description: Provide a concise description of the changes made in this pull request down below.
  • Changelog: Ensure a changelog entry following the format of Keep a Changelog is added at the bottom of the PR description.
  • Documentation: If necessary, update relevant documentation Open WebUI Docs like environment variables, the tutorials, or other documentation sources.
  • Dependencies: Are there any new dependencies? Have you updated the dependency versions in the documentation?
  • Testing: Perform manual tests to verify the implemented fix/feature works as intended AND does not break any other functionality. Take this as an opportunity to make screenshots of the feature/fix and include it in the PR description.
  • Agentic AI Code: Confirm this Pull Request is not written by any AI Agent or has at least gone through additional human review AND manual testing. If any AI Agent is the co-author of this PR, it may lead to immediate closure of the PR.
  • Code review: Have you performed a self-review of your code, addressing any coding standard issues and ensuring adherence to the project's coding standards?
  • Title Prefix: To clearly categorize this pull request, prefix the pull request title using one of the following:
    • BREAKING CHANGE: Significant changes that may affect compatibility
    • build: Changes that affect the build system or external dependencies
    • ci: Changes to our continuous integration processes or workflows
    • chore: Refactor, cleanup, or other non-functional code changes
    • docs: Documentation update or addition
    • feat: Introduces a new feature or enhancement to the codebase
    • fix: Bug fix or error correction
    • i18n: Internationalization or localization changes
    • perf: Performance improvement
    • refactor: Code restructuring for better maintainability, readability, or scalability
    • style: Changes that do not affect the meaning of the code (white space, formatting, missing semi-colons, etc.)
    • test: Adding missing tests or correcting existing tests
    • WIP: Work in progress, a temporary label for incomplete or ongoing work

Changelog Entry

Description

  • Refractored SCIM to be more conformant to the specification. Now, existing accounts should properly link to SCIM rather than generating a duplicate.

Added

  • Added ExternalId to be linked to the OIDC Subject Identifier
  • Added SCIM GetUsers endpoint to support eq filtering of both email and ExternalId

Fixed

  • SCIM no longer tries to match the username SCIM attribute to the email attribute of the User Model
  • SCIM now returns uniqueness conflict when creating account if the OIDC subject identifier already exists in the database
  • SCIM now sets the username in the User model of the DB

Additional Information

  • This was tested on my own Authentik instance.

Contributor License Agreement

By submitting this pull request, I confirm that I have read and fully agree to the Contributor License Agreement (CLA), and I am providing my contributions under its terms.

Note

Deleting the CLA section will lead to immediate closure of your PR and it will not be merged in.

@pr-validator-bot
Copy link

⚠️ Missing PR Title Prefix

@SCBionicle, your PR title is missing a prefix (e.g., feat:, fix:, docs:).

Please update your PR title to include one of the following prefixes:

  • BREAKING CHANGE: Significant changes that may affect compatibility
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to our continuous integration processes or workflows
  • chore: Refactor, cleanup, or other non-functional code changes
  • docs: Documentation update or addition
  • feat: Introduces a new feature or enhancement to the codebase
  • fix: Bug fix or error correction
  • i18n: Internationalization or localization changes
  • perf: Performance improvement
  • refactor: Code restructuring for better maintainability, readability, or scalability
  • style: Changes that do not affect the meaning of the code (white space, formatting, missing semi-colons, etc.)
  • test: Adding missing tests or correcting existing tests
  • WIP: Work in progress, a temporary label for incomplete or ongoing work

Example: feat: Add new authentication method


👋 Welcome and Thank You for Contributing!

We appreciate you taking the time to submit a pull request to Open WebUI!

⚠️ Important: Testing Requirements

We've recently seen an increase in PRs that have significant issues:

  • PRs that don't actually fix the bug they claim to fix
  • PRs that don't implement the feature they describe
  • PRs that break existing functionality
  • PRs that are clearly AI-generated without proper testing being done by the author
  • PRs that simply don't work as intended

These untested PRs consume significant time from maintainers and volunteer contributors who review and test PRs in their free time.
Time that could be spent testing other PRs or improving Open WebUI in other ways.

Before marking your PR as "Ready for Review":

Please explicitly confirm:

  1. ✅ You have personally tested ALL changes in this PR
  2. How you tested it (specific steps you took to verify it works)
  3. Visual evidence where applicable (screenshots or videos showing the feature/fix working) - if applicable to your specific PR

If you're not certain your PR works exactly as intended, please leave it in DRAFT mode until you've thoroughly tested it.

Thank you for helping us maintain quality and respecting the time of our community! 🙏

@SCBionicle SCBionicle changed the title **fix** SCIM Fixes fix SCIM Fixes Feb 2, 2026
@SCBionicle SCBionicle changed the title fix SCIM Fixes fix: SCIM Fixes Feb 2, 2026
@pr-validator-bot
Copy link

⚠️ Warning: Possible Non-Atomic / Scope Creep PR Detected

Your PR was subjected to automated review by AI to determine if it could fall under Open WebUI's non-atomicity ruleset or scope creep.

This PR appears to contain multiple unrelated changes that could be split into separate pull requests.

🔍 AI Analysis Summary

Primary Intent: Enhance SCIM user provisioning by integrating OIDC 'sub' (externalId) mapping and improving user lookup logic.

Secondary Changes Detected:

  • Refactoring 'get_user_by_email' to support case-insensitive lookups.
  • Modifying 'insert_new_user' signature to support optional 'username' field.
  • Updating SCIM filter logic to support 'emails eq' and a custom 'emails eq_ci' (case-insensitive) filter.
  • Adding a helper method 'get_oauth_sub' to the UserModel.
📝 Detailed Analysis and Full Report (click to expand)

This PR violates atomicity by bundling core model refactoring with feature implementation. Specifically: 1. The modification to 'get_user_by_email' to support case-insensitivity is a general utility enhancement that should have been a separate PR. 2. The addition of the 'username' parameter to 'insert_new_user' is a schema/signature change distinct from the SCIM externalId logic. 3. The SCIM router changes introduce multiple new filtering capabilities (externalId eq, emails eq_ci) alongside the primary fix for externalId mapping. Following the 'Refactor First, Feature Second' protocol, the database layer enhancements (case-insensitivity and model helpers) should have preceded the SCIM logic changes in a separate submission.

Why Atomic PRs With Narrow Scopes Matter

Atomic PRs (single-purpose PRs) are:

  • Easier to review - Reviewers can focus on one thing at a time
  • Easier to test - Each change can be verified independently
  • Easier to revert - If something breaks, we can revert just the problematic change
  • Faster to merge - Smaller, focused PRs get reviewed and merged quicker

What Makes a PR Atomic / Narrow in Scope?

An atomic PR should contain one semantic change:

  • ✅ Just one bug fix (even if it touches multiple files)
  • ✅ Just one feature (even if it requires changes across multiple files)
  • ✅ Just i18n/translation updates
  • ✅ Just documentation updates
  • ✅ Just refactoring of one specific thing
  • ✅ Just one performance improvement

What To Do

This is an automated analysis. If you believe this assessment is incorrect and your PR is actually atomic (all changes serve one unified purpose), please explain in a comment below.

Consider splitting this PR into separate, focused pull requests. Each PR should address one specific thing.

For example, if you have a bug fix and a new feature, submit them as two separate PRs.

@SCBionicle
Copy link
Author

The modification to get_user_by_email and the addition of username to the user model was necessary to enable SCIM providers to link existing accounts to Open WebUI via Filtering and conflict detection.

@SCBionicle SCBionicle changed the title fix: SCIM Fixes fix: Fix account linking via SCIM Feb 2, 2026
@SCBionicle SCBionicle marked this pull request as draft February 2, 2026 16:31
@SCBionicle
Copy link
Author

Just noticed a bug with the External ID logic and am looking to fix it.

@SCBionicle
Copy link
Author

The force push is to rebase my branch on the dev branch rather than the main branch.

@SCBionicle SCBionicle marked this pull request as ready for review February 2, 2026 17:37
@SCBionicle
Copy link
Author

Fixed issue that manifested with provisioning accounts and fixed the filtering rules due to related syntax issues. This is ready for review again.

@tjbck
Copy link
Contributor

tjbck commented Feb 13, 2026

Addressed in dev

@tjbck tjbck closed this Feb 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants