Hi,
A minor change in the PM class ServicesHandler in the method validateSuppliedPassword(...) would allow administrators to set up PM to generally validate users with NTLM (via pm_hive_params settings) and a few users to validate with database password (via pm_user_params).
The few users would likely be any special i2b2 accounts that sites don't want to have to put into their LDAP/AD systems (like the obfuscated service account). This could benefit sites that have larger user bases.
This would reduce the amount of configuration some sites need to perform. This would make i2b2's authentication system symmetrical and not care whether the admin wants to default to database or NTLM and have a few users do the opposite.
The change in validateSuppliedPassword(...) would be in the NLTLM branch to see if the user has pm_user_params and if so, to use them to authenticate rather than assuming NTLM as that branch currently does.
This suggestion comes out of the "Active Directory and i2b2 1.5" thread in the members.i2b2aug.org mailing list.
Thanks for listening.
{"report":{"fcp":4674.400000095367,"ttfb":492.69999980926514,"pageVisibility":"visible","entityId":10140,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":64,"apdex":0,"journeyId":"52900995-03e8-4870-9fb8-8bef2db5924d","navigationType":0,"readyForUser":4094.699999809265,"redirectCount":0,"resourceLoadedEnd":5135.099999904633,"resourceLoadedStart":776.6999998092651,"resourceTiming":[{"duration":1780.9000000953674,"initiatorType":"link","name":"https://community.i2b2.org/jira/s/7fd763ecdf5ed1f47fc4d22fa8382e97-CDN/-elaeo6/820011/16zrvj4/49fa3aa3d35a2cc689cbf274e66cc41a/_/download/contextbatch/css/_super/batch.css","startTime":776.6999998092651,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":776.6999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":2557.5999999046326,"responseStart":0,"secureConnectionStart":0},{"duration":2474.199999809265,"initiatorType":"link","name":"https://community.i2b2.org/jira/s/82f2fb30b5633c684844a0d68ad88dc3-CDN/-elaeo6/820011/16zrvj4/7155e23ca74fc11d9d92532ccfab76fb/_/download/contextbatch/css/project.issue.navigator,atl.general,atl.global,jira.view.issue,jira.global,-_super/batch.css?jira.create.linked.issue=true&richediton=true&whisper-enabled=true","startTime":776.9000000953674,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":776.9000000953674,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":3251.0999999046326,"responseStart":0,"secureConnectionStart":0},{"duration":2483.6000003814697,"initiatorType":"script","name":"https://community.i2b2.org/jira/s/781ab6b393dc602ff71cc36d4d8c1113-CDN/-elaeo6/820011/16zrvj4/49fa3aa3d35a2cc689cbf274e66cc41a/_/download/contextbatch/js/_super/batch.js?locale=en-US","startTime":777.1999998092651,"connectEnd":777.1999998092651,"connectStart":777.1999998092651,"domainLookupEnd":777.1999998092651,"domainLookupStart":777.1999998092651,"fetchStart":777.1999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":777.1999998092651,"responseEnd":3260.800000190735,"responseStart":3260.800000190735,"secureConnectionStart":777.1999998092651},{"duration":2577.2999997138977,"initiatorType":"script","name":"https://community.i2b2.org/jira/s/dd973057e68d891a3527336301218ca4-CDN/-elaeo6/820011/16zrvj4/7155e23ca74fc11d9d92532ccfab76fb/_/download/contextbatch/js/project.issue.navigator,atl.general,atl.global,jira.view.issue,jira.global,-_super/batch.js?jira.create.linked.issue=true&locale=en-US&richediton=true&whisper-enabled=true","startTime":777.4000000953674,"connectEnd":777.4000000953674,"connectStart":777.4000000953674,"domainLookupEnd":777.4000000953674,"domainLookupStart":777.4000000953674,"fetchStart":777.4000000953674,"redirectEnd":0,"redirectStart":0,"requestStart":777.4000000953674,"responseEnd":3354.699999809265,"responseStart":3354.699999809265,"secureConnectionStart":777.4000000953674},{"duration":2641.5,"initiatorType":"script","name":"https://community.i2b2.org/jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-elaeo6/820011/16zrvj4/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":777.5999999046326,"connectEnd":777.5999999046326,"connectStart":777.5999999046326,"domainLookupEnd":777.5999999046326,"domainLookupStart":777.5999999046326,"fetchStart":777.5999999046326,"redirectEnd":0,"redirectStart":0,"requestStart":777.5999999046326,"responseEnd":3419.0999999046326,"responseStart":3419.0999999046326,"secureConnectionStart":777.5999999046326},{"duration":2835.6000003814697,"initiatorType":"script","name":"https://community.i2b2.org/jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-elaeo6/820011/16zrvj4/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":777.6999998092651,"connectEnd":777.6999998092651,"connectStart":777.6999998092651,"domainLookupEnd":777.6999998092651,"domainLookupStart":777.6999998092651,"fetchStart":777.6999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":777.6999998092651,"responseEnd":3613.300000190735,"responseStart":3613.300000190735,"secureConnectionStart":777.6999998092651},{"duration":2951.7999997138977,"initiatorType":"link","name":"https://community.i2b2.org/jira/s/30748292e4ca68be6947d7969829384b-CDN/-elaeo6/820011/16zrvj4/4f66da484ef7d95a2a604d3ab014374c/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":777.8000001907349,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":777.8000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":3729.5999999046326,"responseStart":0,"secureConnectionStart":0},{"duration":2950.9000000953674,"initiatorType":"script","name":"https://community.i2b2.org/jira/rest/api/1.0/shortcuts/820011/6e923b53f106eb58ccbc528d8fc61f4a/shortcuts.js?context=issuenavigation&context=issueaction","startTime":778,"connectEnd":778,"connectStart":778,"domainLookupEnd":778,"domainLookupStart":778,"fetchStart":778,"redirectEnd":0,"redirectStart":0,"requestStart":778,"responseEnd":3728.9000000953674,"responseStart":3728.9000000953674,"secureConnectionStart":778},{"duration":3027.199999809265,"initiatorType":"link","name":"https://community.i2b2.org/jira/s/3ac36323ba5e4eb0af2aa7ac7211b4bb-CDN/-elaeo6/820011/16zrvj4/efa42a25652b26dfd802540c024826b3/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.css?jira.create.linked.issue=true&richediton=true","startTime":778.3000001907349,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":778.3000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":3805.5,"responseStart":0,"secureConnectionStart":0},{"duration":3027.0999999046326,"initiatorType":"script","name":"https://community.i2b2.org/jira/s/f14169fffa5f44f0d2568634b30ee425-CDN/-elaeo6/820011/16zrvj4/efa42a25652b26dfd802540c024826b3/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.js?jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":778.4000000953674,"connectEnd":778.4000000953674,"connectStart":778.4000000953674,"domainLookupEnd":778.4000000953674,"domainLookupStart":778.4000000953674,"fetchStart":778.4000000953674,"redirectEnd":0,"redirectStart":0,"requestStart":778.4000000953674,"responseEnd":3805.5,"responseStart":3805.5,"secureConnectionStart":778.4000000953674},{"duration":4266,"initiatorType":"script","name":"https://community.i2b2.org/jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-elaeo6/820011/16zrvj4/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":779.1999998092651,"connectEnd":779.1999998092651,"connectStart":779.1999998092651,"domainLookupEnd":779.1999998092651,"domainLookupStart":779.1999998092651,"fetchStart":779.1999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":779.1999998092651,"responseEnd":5045.199999809265,"responseStart":5045.199999809265,"secureConnectionStart":779.1999998092651},{"duration":4355.799999713898,"initiatorType":"script","name":"https://community.i2b2.org/jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-elaeo6/820011/16zrvj4/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":779.3000001907349,"connectEnd":779.3000001907349,"connectStart":779.3000001907349,"domainLookupEnd":779.3000001907349,"domainLookupStart":779.3000001907349,"fetchStart":779.3000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":779.3000001907349,"responseEnd":5135.099999904633,"responseStart":5135.099999904633,"secureConnectionStart":779.3000001907349},{"duration":1267.6000003814697,"initiatorType":"xmlhttprequest","name":"https://community.i2b2.org/jira/rest/webResources/1.0/resources","startTime":3565.699999809265,"connectEnd":3565.699999809265,"connectStart":3565.699999809265,"domainLookupEnd":3565.699999809265,"domainLookupStart":3565.699999809265,"fetchStart":3565.699999809265,"redirectEnd":0,"redirectStart":0,"requestStart":3565.699999809265,"responseEnd":4833.300000190735,"responseStart":4833.300000190735,"secureConnectionStart":3565.699999809265}],"fetchStart":0,"domainLookupStart":365,"domainLookupEnd":365,"connectStart":365,"connectEnd":384,"secureConnectionStart":374,"requestStart":384,"responseStart":492,"responseEnd":577,"domLoading":575,"domInteractive":5166,"domContentLoadedEventStart":5166,"domContentLoadedEventEnd":5294,"domComplete":6458,"loadEventStart":6458,"loadEventEnd":6461,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":5149.400000095367},{"name":"bigPipe.sidebar-id.end","time":5150.300000190735},{"name":"bigPipe.activity-panel-pipe-id.start","time":5150.5},{"name":"bigPipe.activity-panel-pipe-id.end","time":5154.300000190735},{"name":"activityTabFullyLoaded","time":5303}],"measures":[],"correlationId":"863377854a06d5","effectiveType":"4g","downlink":10,"rtt":0,"serverDuration":84,"dbReadsTimeInMs":9,"dbConnsTimeInMs":12,"applicationHash":"0629dd8d260e3954ece49053e565d01dabe11609","experiments":[]}}