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":952.8000001907349,"ttfb":189.60000038146973,"pageVisibility":"visible","entityId":10140,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":64,"apdex":0.5,"journeyId":"68defd5f-735a-4d0c-a530-b5934d4490e9","navigationType":0,"readyForUser":1018.5,"redirectCount":0,"resourceLoadedEnd":1601.9000000953674,"resourceLoadedStart":200.7000002861023,"resourceTiming":[{"duration":340.59999990463257,"initiatorType":"link","name":"https://community.i2b2.org/jira/s/7fd763ecdf5ed1f47fc4d22fa8382e97-CDN/-elaeo6/820011/16zrvj4/49fa3aa3d35a2cc689cbf274e66cc41a/_/download/contextbatch/css/_super/batch.css","startTime":200.7000002861023,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":200.7000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":541.3000001907349,"responseStart":0,"secureConnectionStart":0},{"duration":340.7000002861023,"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":201,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":201,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":541.7000002861023,"responseStart":0,"secureConnectionStart":0},{"duration":446.40000009536743,"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":201.40000009536743,"connectEnd":567.1000003814697,"connectStart":546.1000003814697,"domainLookupEnd":546.1000003814697,"domainLookupStart":546.1000003814697,"fetchStart":201.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":567.2000002861023,"responseEnd":647.8000001907349,"responseStart":582.9000000953674,"secureConnectionStart":556.9000000953674},{"duration":459.40000009536743,"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":201.80000019073486,"connectEnd":567.2000002861023,"connectStart":546.7000002861023,"domainLookupEnd":546.7000002861023,"domainLookupStart":546.7000002861023,"fetchStart":201.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":567.5,"responseEnd":661.2000002861023,"responseStart":591.3000001907349,"secureConnectionStart":557.3000001907349},{"duration":390.40000009536743,"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":202,"connectEnd":573.4000000953674,"connectStart":549.7000002861023,"domainLookupEnd":549.7000002861023,"domainLookupStart":549.7000002861023,"fetchStart":202,"redirectEnd":0,"redirectStart":0,"requestStart":573.6000003814697,"responseEnd":592.4000000953674,"responseStart":589.8000001907349,"secureConnectionStart":563},{"duration":409.7999997138977,"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":202.2000002861023,"connectEnd":591.1000003814697,"connectStart":562.5,"domainLookupEnd":562.5,"domainLookupStart":562.5,"fetchStart":202.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":593.2000002861023,"responseEnd":612,"responseStart":609.2000002861023,"secureConnectionStart":573.7000002861023},{"duration":350.90000009536743,"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":202.40000009536743,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":202.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":553.3000001907349,"responseStart":0,"secureConnectionStart":0},{"duration":408.3999996185303,"initiatorType":"script","name":"https://community.i2b2.org/jira/rest/api/1.0/shortcuts/820011/6e923b53f106eb58ccbc528d8fc61f4a/shortcuts.js?context=issuenavigation&context=issueaction","startTime":202.60000038146973,"connectEnd":591.2000002861023,"connectStart":565.8000001907349,"domainLookupEnd":565.8000001907349,"domainLookupStart":565.8000001907349,"fetchStart":202.60000038146973,"redirectEnd":0,"redirectStart":0,"requestStart":593.4000000953674,"responseEnd":611,"responseStart":608.2000002861023,"secureConnectionStart":575.7000002861023},{"duration":427.2999997138977,"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":232.10000038146973,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":232.10000038146973,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":659.4000000953674,"responseStart":0,"secureConnectionStart":0},{"duration":472.40000009536743,"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":232.30000019073486,"connectEnd":689.1000003814697,"connectStart":665.9000000953674,"domainLookupEnd":665.9000000953674,"domainLookupStart":665.9000000953674,"fetchStart":232.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":689.4000000953674,"responseEnd":704.7000002861023,"responseStart":703.7000002861023,"secureConnectionStart":677.3000001907349},{"duration":1356.3000001907349,"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":242.30000019073486,"connectEnd":1583.7000002861023,"connectStart":1563.7000002861023,"domainLookupEnd":1563.7000002861023,"domainLookupStart":1563.7000002861023,"fetchStart":242.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":1584.5,"responseEnd":1598.6000003814697,"responseStart":1596.9000000953674,"secureConnectionStart":1573.2000002861023},{"duration":1354.0999999046326,"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":247.80000019073486,"connectEnd":1588.1000003814697,"connectStart":1564.4000000953674,"domainLookupEnd":1564.4000000953674,"domainLookupStart":1564.4000000953674,"fetchStart":247.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":1588.2000002861023,"responseEnd":1601.9000000953674,"responseStart":1601.1000003814697,"secureConnectionStart":1575.6000003814697},{"duration":706.6999998092651,"initiatorType":"xmlhttprequest","name":"https://community.i2b2.org/jira/rest/webResources/1.0/resources","startTime":875.6000003814697,"connectEnd":1565.2000002861023,"connectStart":1536.2000002861023,"domainLookupEnd":1536.2000002861023,"domainLookupStart":1536.2000002861023,"fetchStart":875.6000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":1566,"responseEnd":1582.3000001907349,"responseStart":1581.7000002861023,"secureConnectionStart":1555}],"fetchStart":0,"domainLookupStart":56,"domainLookupEnd":128,"connectStart":128,"connectEnd":160,"secureConnectionStart":138,"requestStart":160,"responseStart":190,"responseEnd":248,"domLoading":193,"domInteractive":1626,"domContentLoadedEventStart":1626,"domContentLoadedEventEnd":1670,"domComplete":1872,"loadEventStart":1872,"loadEventEnd":1872,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":1603.6000003814697},{"name":"bigPipe.sidebar-id.end","time":1604.4000000953674},{"name":"bigPipe.activity-panel-pipe-id.start","time":1604.7000002861023},{"name":"bigPipe.activity-panel-pipe-id.end","time":1605.5},{"name":"activityTabFullyLoaded","time":1687.1000003814697}],"measures":[],"correlationId":"1a194002cb4802","effectiveType":"4g","downlink":9.7,"rtt":0,"serverDuration":76,"dbReadsTimeInMs":7,"dbConnsTimeInMs":13,"applicationHash":"0629dd8d260e3954ece49053e565d01dabe11609","experiments":[]}}