SSO / OIDC: Differentiated JIT Provisioning (Staff vs. Portal), Profile Attribute Sync & Role Fallbacks #155
Replies: 4 comments
|
Hi Sandy @srinivasansanthosh, Thank you - this is a really thoughtful piece of work, and it solves a problem a lot of people will have when one company sign-in is used for both staff and customers. I've read through the whole branch and I'd love to get it into FreeITSM. Before it can go in, there are a few things to change. Most of them are about people who are upgrading - their existing settings need to keep working exactly as before until they choose to use the new options. 1. Existing "auto-create" settings need carrying over 2. Profile sync should start as "Never" 3. Check who the person is before updating their details 4. Please leave out the login page restyle and the reworded text There are also a few smaller bits. I've written everything up in full on a wiki page, file by file, with the code changes and the reasons, plus a list of checks to run at the end. It's written so you can point your coding tool straight at it: 👉 SSO - JIT roles and profile sync: review notes Don't worry about catching up with 2.8.0 - a few things have changed since 2.7.1 and there are a couple of small overlaps, but I'm happy to handle all of that myself. Just make the changes on your existing branch, and once you're done, open the PR against it as it is and I'll take care of the merge. The "Analyst console" link in the portal menu is a lovely touch and fills a gap I'd missed. Thanks again - really appreciate the time you've put into this, and just shout if anything above doesn't make sense. Ed |
|
Hi Ed, Thank you for the thorough review notes on the wiki. Every single point made total sense, especially regarding upgrade safety and data preservation. Regarding hiding Password Change / MFA (Fix 8): I had initially added this thinking specifically of my own single-tenant SSO deployment where end-users don't have local passwords and was wondering why you wanted it removed. However, your points about forced password resets ( I have addressed all 10 review items in a clean commit on top of the branch: Summary of adjustments made:
What I tested & Environment Limitations:Tested on my environment:
Limitations & Areas to verify before merging:
The branch is ready on my fork: Thanks again! |
|
Hi Sandy @srinivasansanthosh, It's merged! 🎉 Your branch is in I've written it up properly on the wiki, with the code and a plain-English explanation of each part, and you're credited at the top: 👉 SSO auto-create and profile sync - Developer Guide How I tested it. Since you didn't have multi-tenant or CardDAV setups, I built a clean room: a copy of the merged code on a throwaway database loaded from the 2.9.0 schema (so, an upgraded install), plus a small mock OpenID Connect provider that signs real ID tokens. That meant your callback ran all of its real checks. About 70 checks passed, covering the upgrade before and after Database Verification, all three fallback modes, all three sync modes, the userinfo top-up, locking, and - the one I cared about most - that a refused sign-in writes nothing at all, including across providers. A few things I adjusted while merging (all listed in the "What changed at merge time" section of the guide):
None of that takes anything away from the work - the design is yours: the two switches, the three fallback modes, the three sync modes, the claim mapping across Entra, Okta and Keycloak, and the confirm screen. On hiding password / MFA for SSO users - thanks for being open to that. I'll pick it up separately, so the No need to open a PR now - it's all in. Thanks again, and if you spot anything once 2.10.0 is out, just shout. Ed |
|
Hi Ed, Thank you so much for merging the branch and for the follow-up refinements! Looking forward to continuing to contribute to FreeITSM! |
Uh oh!
There was an error while loading. Please reload this page.
Hi Ed,
Following up on our SSO/OIDC setup, we ran into a few common enterprise onboarding requirements when using a single corporate Identity Provider (e.g. Microsoft Entra ID / Okta) across an organization:
I have implemented and tested this on my fork, keeping strictly to FreeITSM's database schema rules, translation keys, and house style. The branch is organized into four atomic, independent commits so you can review, cherry-pick individual parts, or ignore anything that doesn't align with your roadmap.
What's in the branch
1. Differentiated JIT Provisioning & Role Separation (
feat(auth))Auto-create self-service usersandAuto-create IT analystsper provider.2. Profile Attribute Sync & Directory Authority (
feat(auth))Always (Every sign-in),Initial only (First sign-in),Never).userinfo_endpointwhen claims likedepartment,job_title/title, orphone_numberare not embedded directly in the ID token.Always, fields (preferred_name,job_title,office,phone,mobile) are locked with a tooltip and notice in both Self-Service (My Account) and Analyst Preferences (System → Preferences → My details), preventing local drift.3. Analyst Console Launcher in Portal Menu (
feat(portal))4. Help Documentation & IdP Claim Guidance (
docs(sso))system/help/sso.phpand updatedportal-profile.phpwith step-by-step guidance for configuring optional claims in Microsoft Entra ID (Azure AD), Okta, and Keycloak, as well as clarifying Scopes vs. Claims.Compatibility & Baseline
801019c9).Screenshots
Provider modal showing Differentiated JIT toggles, Default Modules, and Fallback options

SSO Provider table with "Profile sync" column pill and sync mode selector

Analyst Preferences / Portal My Account with locked fields & notice

Self-service avatar menu showing the Analyst Console shortcut with pop-out icon

Branch & Commits
I have tested this thoroughly in our environment across the key identity provider scenarios, but please do review it from your broader architectural perspective. If there are any edge cases, design adjustments, or house style tweaks you would like addressed, I would be very happy to iterate on them. Alternatively, feel free to pull the branch directly and adapt anything as you see fit.
If this looks good to you in principle, let me know and I will be glad to open a formal PR!
🔗 Branch:
feat/differentiated-jit-ssoCommit breakdown:
4dc92600feat(auth): add differentiated JIT provisioning, role separation, and profile attribute syncb302112dfeat(portal): add analyst console launcher in user account menu90cafb1bstyle(auth): standardize login footer links across analyst and portal5cab6417docs(sso): document differentiated JIT rules, profile sync modes, and claim mappingsAll reactions