{"id":41752,"date":"2025-12-06T19:47:00","date_gmt":"2025-12-06T18:47:00","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=41752"},"modified":"2026-02-25T21:16:12","modified_gmt":"2026-02-25T20:16:12","slug":"dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/","title":{"rendered":"Dctm &#8211; OTDS SSO with sAMAccountName AD\/LDAP attribute and Azure"},"content":{"rendered":"\n<p>The OpenText Directory Services (OTDS) is a pretty interesting piece of software, and it works quite well out-of-the-box. If you are starting to use the OTDS from scratch (when you have nothing internally), then there isn&#8217;t much problem, you can just use what they provide OOTB and that&#8217;s fine. But for big companies or if you already have a lot of specific use-cases and specific configurations that wouldn&#8217;t be considered &#8220;standard&#8221; usually, then it can quickly become (much) more complex.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-default-configuration-amp-behavior\">Default configuration &amp; behavior<\/h2>\n\n\n\n<p>In a previous blog, I talked about ways to configure OTDS to allow the login to Documentum with something else than the default &#8220;<strong><em>oTExternalID3<\/em><\/strong>&#8221; (c.f. <a href=\"https:\/\/www.dbi-services.com\/blog\/documentum-login-through-otds-without-otexternalid3\/\" target=\"_blank\" rel=\"noreferrer noopener\">this blog<\/a> &#8211; mapped to &#8220;<strong><em>userPrincipalName<\/em><\/strong>&#8221; by default). That blog was on the Resource side of things, to populate the accounts in Documentum as well as perform a simple username\/password login through OTDS. I also mentioned in that publication that the simplest way to achieve that would be to change the &#8220;<strong><em>AD\/LDAP attribute<\/em><\/strong>&#8221; property of the Partition directly, but that&#8217;s only IF (and that&#8217;s a big IF) it doesn&#8217;t mess with other systems that you might have (e.g. other than Documentum).<\/p>\n\n\n\n<p>But what about Single Sign-On if you aren&#8217;t using the default\u2026? That&#8217;s what I will talk about in this new blog. I will use OTDS integrated with Azure OAuth 2 \/ OpenID Connect for that example. For my demo environment, I already setup the following things:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A Partition, named &#8220;<strong><em>APP1<\/em><\/strong>&#8220;, with its &#8220;<strong><em>AD\/LDAP attribute<\/em><\/strong>&#8221; property set to &#8220;<strong><em>sAMAccountName<\/em><\/strong>&#8220;. That means that &#8220;<strong><em>oTExternalID3<\/em><\/strong>&#8221; will have as value &#8220;<strong><em>MYUSERID<\/em><\/strong>&#8221; instead of the default &#8220;<strong><em>MYUSERID@DOMAIN-NAME.COM<\/em><\/strong>&#8221; (which it would have had with the default &#8220;<strong><em>userPrincipalName<\/em><\/strong>&#8220;)<\/li>\n\n\n\n<li>An Auth Handler, named &#8220;<strong><em>SSO<\/em><\/strong>&#8220;, configured with OAuth 2.0 \/ OpenID Connect with its client ID, client secret, etc\u2026 So that all needed fields of the &#8220;<strong><em>Parameters<\/em><\/strong>&#8221; page are properly set for communications \/ exchanges. On the &#8220;<strong><em>Configuration<\/em><\/strong>&#8221; page, you can reduce the priority value from 10 to 5 (i.e. higher priority) and then there is a single field &#8220;<strong><em>Authentication principal attribute<\/em><\/strong>&#8220;. Based on the name only, you would probably set that to oTExternalID3, right?<\/li>\n<\/ol>\n\n\n\n<p>With the above setup, the following will happen when you login through the SSO (with DEBUG enabled, to see the messages, otherwise you will have no clue why it fails):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; highlight: [2,5,9,10,12,15,16,19]; title: ; notranslate\" title=\"\">\n==&gt; otds.log &lt;==\n2025-07-28 09:05:24.070|DEBUG |&#x5B;https-jsse-nio-8080-exec-33]|OtdsAuthenticationManager||Authentication attempt with handler SSO result {CLIENT_CONTINUE_NEEDED, null, null, null}\n\n==&gt; access.2025-07-28.log &lt;==\n2025-07-28 09:05:24,074 UTC code:302 thread:https-jsse-nio-8080-exec-33 user:- ip:172.1.1.1 req:&#039;POST \/otdsws\/login HTTP\/1.1&#039; bytes:- session:- time-taken-ms:8\n\n==&gt; otds.log &lt;==\n2025-07-28 09:05:27.740|DEBUG |&#x5B;https-jsse-nio-8080-exec-35]|OAuth2Handler||fetchURL received response code 200\n2025-07-28 09:05:27.742|DEBUG |&#x5B;https-jsse-nio-8080-exec-35]|OAuth2Handler||Obtained access token: eyJ0eXAiOiJKV1QiLCJub25jZSI...Kuj4re_gei97mSMsLGXcXZ3Os3g\n2025-07-28 09:05:27.743|DEBUG |&#x5B;https-jsse-nio-8080-exec-35]|OAuth2Handler||Obtained id_token: eyJ0eXAiOiJKV1QiCJhbGciOiJS...VTd_jsBFlPcxQLCOxKk85wdywQQ\n2025-07-28 09:05:27.842|DEBUG |&#x5B;https-jsse-nio-8080-exec-35]|OAuth2Handler||fetchURL received response code 200\n2025-07-28 09:05:27.842|DEBUG |&#x5B;https-jsse-nio-8080-exec-35]|OAuth2Handler||Obtained user object: {&quot;@odata.context&quot;:&quot;https:\/\/graph.microsoft.com\/v1.0\/$metadata#users\/$entity&quot;,&quot;businessPhones&quot;:&#x5B;&quot;+41 123456789&quot;],&quot;displayName&quot;:&quot;Patou Morgan&quot;,&quot;givenName&quot;:&quot;Morgan&quot;,&quot;jobTitle&quot;:&quot;Technology Leader ECM&quot;,&quot;mail&quot;:&quot;morgan.patou@domain-name.com&quot;,&quot;mobilePhone&quot;:null,&quot;officeLocation&quot;:&quot;CH&quot;,&quot;preferredLanguage&quot;:null,&quot;surname&quot;:&quot;Patou&quot;,&quot;userPrincipalName&quot;:&quot;MYUSERID@DOMAIN-NAME.COM&quot;,&quot;id&quot;:&quot;77021...54e5c&quot;}\n2025-07-28 09:05:27.909|DEBUG |&#x5B;https-jsse-nio-8080-exec-35]|ReplayCache||OTDS Replay Cache Cleaner started\n2025-07-28 09:05:27.909|DEBUG |&#x5B;https-jsse-nio-8080-exec-35]|ReplayCache||uuid added to replay cache: OIDC_https:\/\/login.microsoftonline.com\/9b5...918\/v2.0_bfb...d49\n2025-07-28 09:05:27.909|DEBUG |&#x5B;https-jsse-nio-8080-exec-35]|OtdsAuthenticationManager||Authentication attempt with handler SSO result {SUCCESS, null, null, MYUSERID@DOMAIN-NAME.COM}\n2025-07-28 09:05:27.921|DEBUG |&#x5B;https-jsse-nio-8080-exec-35]|OtdsAuthenticationManager||Search for MYUSERID@DOMAIN-NAME.COM using attributes &#x5B;oTExternalID3] returned: null\n\n==&gt; directory-access.log &lt;==\n2025-07-28 09:05:27.921|WARN  ||0|0|Authentication Service|Failure Access|28,Initial authentication failed|172.1.1.1|&quot;&quot;||&quot;MYUSERID@DOMAIN-NAME.COM&quot;|&quot;Authentication failure &#x5B;ACCOUNT_NOT_EXIST]: MYUSERID@DOMAIN-NAME.COM for resource __OTDS_AS__&quot;\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-azure-user-details\">Azure user details<\/h2>\n\n\n\n<p>The SSO isn&#8217;t working\u2026 But why exactly? In the logs, we can see that the request is initiated on OTDS side, and a communication is sent to the OAuth 2 \/ OIDC provider. There is a response received by OTDS which includes the &#8220;<strong><em>access token<\/em><\/strong>&#8221; and &#8220;<strong><em>id_token<\/em><\/strong>&#8220;. You can check the exact content of these tokens with a JWT Decoder. So, if you have issues with setting up the OTDS-OAuth2 communications, that will probably tell you what is going on. In this case, I do receive the correct information, and my user object is retrieved properly (c.f. the &#8220;<strong><em>User Info Endpoint<\/em><\/strong>&#8221; field on the Auth Handler Parameters page, which is set to &#8220;<a href=\"https:\/\/graph.microsoft.com\/v1.0\/me\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/graph.microsoft.com\/v1.0\/me<\/a>&#8221; for Azure). It contains fields such as &#8220;<strong><em>businessPhones<\/em><\/strong>&#8220;, &#8220;<strong><em>displayName<\/em><\/strong>&#8220;, &#8220;<strong><em>givenName<\/em><\/strong>&#8220;, &#8220;<strong><em>jobTitle<\/em><\/strong>&#8220;, &#8220;<strong><em>mail<\/em><\/strong>&#8220;, &#8220;<strong><em>surname<\/em><\/strong>&#8221; or &#8220;<strong><em>userPrincipalName<\/em><\/strong>&#8220;. Unfortunately, &#8220;<strong><em>sAMAccountName<\/em><\/strong>&#8221; isn&#8217;t part of the user details provided by Azure.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-it-s-not-working\">Why it&#8217;s not working<\/h2>\n\n\n\n<p>In above example, the Auth Handler &#8220;<strong><em>SSO<\/em><\/strong>&#8221; result was actually &#8220;<strong><em>SUCCESS<\/em><\/strong>&#8220;. The problem comes after that\u2026 As you can see on the logs, once Azure confirmed the user details, it&#8217;s now up to OTDS to find that same account in its users list. Therefore, OTDS will look at the Auth Handler &#8220;<strong><em>User Identifier Field<\/em><\/strong>&#8221; field (Parameters page) and it will use that parameter from the received details. Then OTDS will look at the Auth Handler &#8220;<strong><em>Authentication principal attribute<\/em><\/strong>&#8221; (Configuration page) and it will try to find some accounts in its database that would match for both values.<\/p>\n\n\n\n<p>Most Azure fields might not be very reliable so you will probably end-up using &#8220;<strong><em>userPrincipalName<\/em><\/strong>&#8220;\u2026 Indeed, multiple people can technically have the same first name or last name (or even both), the same job title and sometimes some of these fields might be empty like the phone number, etc. Therefore, &#8220;<strong><em>userPrincipalName<\/em><\/strong>&#8221; is most probably the one you will configure for the Auth Handler &#8220;<strong><em>User Identifier Field<\/em><\/strong>&#8221; field (Parameters page).<\/p>\n\n\n\n<p>I don&#8217;t know if it&#8217;s possible to configure the fields that Microsoft returns but since I have no control over that, I can only impact the second part of the matching\/searching process. With our example, the Auth Handler &#8220;<strong><em>Authentication principal attribute<\/em><\/strong>&#8221; (Configuration page) uses &#8220;<strong><em>oTExternalID3<\/em><\/strong>&#8221; as the one and only parameter that OTDS will use for that mapping. Again, in an out-of-the-box OTDS, where you kept the default Partition configuration, then oTExternalID3 would have had the value from the AD&#8217;s &#8220;<strong><em>userPrincipalName<\/em><\/strong>&#8220;. Therefore, by default, it would have worked. But in this example, since we changed the &#8220;<strong><em>AD\/LDAP attribute<\/em><\/strong>&#8221; property of the Partition, then it doesn&#8217;t match anymore and therefore, OTDS isn&#8217;t able to find the user &#8220;<strong><em>MYUSERID@DOMAIN-NAME.COM<\/em><\/strong>&#8220;, as in its user registry, this account has a value of &#8220;<strong><em>MYUSERID<\/em><\/strong>&#8220;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-updated-configuration-to-fix-the-issue\">Updated configuration to fix the issue<\/h2>\n\n\n\n<p>The solution in this case is then pretty simple once you understand how OTDS works. The first thing to do is to update the Partition so that OTDS can fill at least one of its properties with the value from the AD&#8217;s &#8220;<strong><em>userPrincipalName<\/em><\/strong>&#8220;. Therefore, on the Partition User Mappings page, you can define that a parameter like &#8220;<strong><em>oTExtraAttr0-9<\/em><\/strong>&#8221; or &#8220;<strong><em>oTUserID1-4<\/em><\/strong>&#8221; would take the value as needed. In this example, I will use &#8220;<strong><em>oTUserID1<\/em><\/strong>&#8220;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [9]; title: ; notranslate\" title=\"\">\nOTDS Attribute(s)  ||  Active Directory Attribute(s)  ||  Format\naudio              ||                                 ||  %s\nbirthDate          ||                                 ||  %s\n...                ||  ...                            ||  ...\ncn                 ||  cn                             ||  %s\n...                ||  ...                            ||  ...\noTSAMAccountName   ||  sAMAccountName                 ||  %s\n...                ||  ...                            ||  ...\noTUserID1          ||  userPrincipalName              ||  %s\n...                ||  ...                            ||  ...\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"908\" height=\"43\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png\" alt=\"OTDS SSO with sAMAccountName - Partition configuration\" class=\"wp-image-41753\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png 908w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1-300x14.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1-768x36.png 768w\" sizes=\"auto, (max-width: 908px) 100vw, 908px\" \/><\/figure>\n\n\n\n<p>After a Partition consolidation, all OTDS users will have their parameter &#8220;<strong><em>oTUserID1<\/em><\/strong>&#8221; set to the value of the AD&#8217;s &#8220;<strong><em>userPrincipalName<\/em><\/strong>&#8220;. The second step is then to configure the Auth Handler to use that same parameter for the user search:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select the checkbox of the current value set and remove it<\/li>\n\n\n\n<li>Using the dropdown list, select the new parameter you want to use (&#8220;<strong><em>oTUserID1<\/em><\/strong>&#8221; in this case) and add it<\/li>\n\n\n\n<li>Note: there can be multiple parameters if you want, just make sure it&#8217;s unique enough\u2026<\/li>\n\n\n\n<li>Save the Auth Handler<\/li>\n<\/ul>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69de5fb029bf6&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69de5fb029bf6\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"913\" height=\"362\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_2.png\" alt=\"OTDS SSO with sAMAccountName - Auth Handler configuration\" class=\"wp-image-41754\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_2.png 913w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_2-300x119.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_2-768x305.png 768w\" sizes=\"auto, (max-width: 913px) 100vw, 913px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p>With the updated details, trying to login again through SSO will now generate these logs:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; highlight: [8,9,12,13]; title: ; notranslate\" title=\"\">\n==&gt; otds.log &lt;==\n2025-07-28 09:19:53.940|DEBUG |&#x5B;https-jsse-nio-8080-exec-25]|OAuth2Handler||fetchURL received response code 200\n2025-07-28 09:19:53.941|DEBUG |&#x5B;https-jsse-nio-8080-exec-25]|OAuth2Handler||Obtained access token: eyJ0eXAiOiJKV1QiLCJub25jZSI...CypMuiNm3njnvRxjWGMF29pzwfx\n2025-07-28 09:19:53.942|DEBUG |&#x5B;https-jsse-nio-8080-exec-25]|OAuth2Handler||Obtained id_token: eyJ0eXAiOiJKV1QiLCJhbGciOiJ...EqlQtTgGqW3svHBV1fhyxOnTuYQ\n2025-07-28 09:19:54.058|DEBUG |&#x5B;https-jsse-nio-8080-exec-25]|OAuth2Handler||fetchURL received response code 200\n2025-07-28 09:19:54.058|DEBUG |&#x5B;https-jsse-nio-8080-exec-25]|OAuth2Handler||Obtained user object: {&quot;@odata.context&quot;:&quot;https:\/\/graph.microsoft.com\/v1.0\/$metadata#users\/$entity&quot;,&quot;businessPhones&quot;:&#x5B;&quot;+41 123456789&quot;],&quot;displayName&quot;:&quot;Patou Morgan&quot;,&quot;givenName&quot;:&quot;Morgan&quot;,&quot;jobTitle&quot;:&quot;Technology Leader ECM&quot;,&quot;mail&quot;:&quot;morgan.patou@domain-name.com&quot;,&quot;mobilePhone&quot;:null,&quot;officeLocation&quot;:&quot;CH&quot;,&quot;preferredLanguage&quot;:null,&quot;surname&quot;:&quot;Patou&quot;,&quot;userPrincipalName&quot;:&quot;MYUSERID@DOMAIN-NAME.COM&quot;,&quot;id&quot;:&quot;77021...54e5c&quot;}\n2025-07-28 09:19:54.059|DEBUG |&#x5B;https-jsse-nio-8080-exec-25]|ReplayCache||uuid added to replay cache: OIDC_https:\/\/login.microsoftonline.com\/9b5...918\/v2.0_f41...e95\n2025-07-28 09:19:54.059|DEBUG |&#x5B;https-jsse-nio-8080-exec-25]|OtdsAuthenticationManager||Authentication attempt with handler SSO result {SUCCESS, null, null, MYUSERID@DOMAIN-NAME.COM}\n2025-07-28 09:19:54.182|DEBUG |&#x5B;https-jsse-nio-8080-exec-25]|OtdsAuthenticationManager||Search for MYUSERID@DOMAIN-NAME.COM using attributes &#x5B;oTUserID1] returned: oTPerson=779...bf4,orgunit=users,partition=APP1,dc=identity,dc=opentext,dc=net\n\n==&gt; directory-access.log &lt;==\n2025-07-28 09:19:54.193|INFO  ||0|0|Authentication Service|Success Access|27,Initial authentication successful|172.1.1.1|&quot;&quot;|APP1|&quot;MYUSERID&quot;|&quot;Authentication success: MYUSERID using authentication handler SSO for resource __OTDS_AS__&quot;\n2025-07-28 09:19:54.226|INFO  ||0|0|Authentication Service|Success Access|71,OAuth access token issued|172.1.1.1|&quot;&quot;|APP1|&quot;MYUSERID&quot;|&quot;Issued access_token with ID 952...c0e for session 95c...501 issued to client dctm-demo-d2 for grant_type implicit&quot;\n<\/pre><\/div>\n\n\n<p>The SSO is now fully working, as OTDS can find a matching user by using the attribute &#8220;<strong><em>oTUserID1<\/em><\/strong>&#8220;. In some cases, you might be able to use the &#8220;<strong><em>mail<\/em><\/strong>&#8221; attribute instead, but you need to make sure that it is really unique for the users and partitions that you import into OTDS (right now, and in the future too). It can be a rather common practice for some customers to have multiple users with the same email, because there could be standard vs admin\/high-privilege users (or different AD like lower environments, which might re-use the same email, etc\u2026). So, use and configure OTDS as you need, but with caution!<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The OpenText Directory Services (OTDS) is a pretty interesting piece of software, and it works quite well out-of-the-box. If you are starting to use the OTDS from scratch (when you have nothing internally), then there isn&#8217;t much problem, you can just use what they provide OOTB and that&#8217;s fine. But for big companies or if [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[525],"tags":[1338,2609,3202,3203,3500,3758,445,3759],"type_dbi":[],"class_list":["post-41752","post","type-post","status-publish","format-standard","hentry","category-enterprise-content-management","tag-azure","tag-documentum-2","tag-oauth2","tag-openid-connect","tag-otds","tag-samaccountname","tag-sso","tag-userprincipalname"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Dctm - OTDS SSO with sAMAccountName AD\/LDAP attribute and Azure - dbi Blog<\/title>\n<meta name=\"description\" content=\"Let&#039;s go through a quick and simple way to configure OTDS SSO with sAMAccountName AD\/LDAP attribute when using Azure OAuth2 \/ OpenID Connect.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dctm - OTDS SSO with sAMAccountName AD\/LDAP attribute and Azure\" \/>\n<meta property=\"og:description\" content=\"Let&#039;s go through a quick and simple way to configure OTDS SSO with sAMAccountName AD\/LDAP attribute when using Azure OAuth2 \/ OpenID Connect.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-06T18:47:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-25T20:16:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"908\" \/>\n\t<meta property=\"og:image:height\" content=\"43\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Morgan Patou\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@MorganPatou\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Morgan Patou\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/\"},\"author\":{\"name\":\"Morgan Patou\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8\"},\"headline\":\"Dctm &#8211; OTDS SSO with sAMAccountName AD\/LDAP attribute and Azure\",\"datePublished\":\"2025-12-06T18:47:00+00:00\",\"dateModified\":\"2026-02-25T20:16:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/\"},\"wordCount\":1152,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png\",\"keywords\":[\"Azure\",\"Documentum\",\"OAUTH2\",\"OpenID Connect\",\"OTDS\",\"sAMAccountName\",\"SSO\",\"userPrincipalName\"],\"articleSection\":[\"Enterprise content management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/\",\"name\":\"Dctm - OTDS SSO with sAMAccountName AD\/LDAP attribute and Azure - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png\",\"datePublished\":\"2025-12-06T18:47:00+00:00\",\"dateModified\":\"2026-02-25T20:16:12+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8\"},\"description\":\"Let's go through a quick and simple way to configure OTDS SSO with sAMAccountName AD\/LDAP attribute when using Azure OAuth2 \/ OpenID Connect.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png\",\"width\":908,\"height\":43},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dctm &#8211; OTDS SSO with sAMAccountName AD\/LDAP attribute and Azure\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8\",\"name\":\"Morgan Patou\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g\",\"caption\":\"Morgan Patou\"},\"description\":\"Morgan Patou has over 12 years of experience in Enterprise Content Management (ECM) systems, with a strong focus in recent years on platforms such as Alfresco, Documentum, and M-Files. He specializes in the architecture, setup, customization, and maintenance of ECM infrastructures in complex &amp; critical environments. Morgan is well-versed in both engineering and operations aspects, including high availability design, system integration, and lifecycle management. He also has a solid foundation in open-source and proprietary technologies - ranging from Apache, OpenLDAP or Kerberos to enterprise-grade systems like WebLogic. Morgan Patou holds an Engineering Degree in Computer Science from ENSISA (\u00c9cole Nationale Sup\u00e9rieure d'Ing\u00e9nieurs Sud Alsace) in Mulhouse, France. He is Alfresco Content Services Certified Administrator (ACSCA), Alfresco Content Services Certified Engineer (ACSCE) as well as OpenText Documentum Certified Administrator. His industry experience spans the Public Sector, IT Services, Financial Services\/Banking, and the Pharmaceutical industry.\",\"sameAs\":[\"https:\/\/blog.dbi-services.com\/author\/morgan-patou\/\",\"https:\/\/x.com\/MorganPatou\"],\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/morgan-patou\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dctm - OTDS SSO with sAMAccountName AD\/LDAP attribute and Azure - dbi Blog","description":"Let's go through a quick and simple way to configure OTDS SSO with sAMAccountName AD\/LDAP attribute when using Azure OAuth2 \/ OpenID Connect.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/","og_locale":"en_US","og_type":"article","og_title":"Dctm - OTDS SSO with sAMAccountName AD\/LDAP attribute and Azure","og_description":"Let's go through a quick and simple way to configure OTDS SSO with sAMAccountName AD\/LDAP attribute when using Azure OAuth2 \/ OpenID Connect.","og_url":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/","og_site_name":"dbi Blog","article_published_time":"2025-12-06T18:47:00+00:00","article_modified_time":"2026-02-25T20:16:12+00:00","og_image":[{"width":908,"height":43,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png","type":"image\/png"}],"author":"Morgan Patou","twitter_card":"summary_large_image","twitter_creator":"@MorganPatou","twitter_misc":{"Written by":"Morgan Patou","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/"},"author":{"name":"Morgan Patou","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8"},"headline":"Dctm &#8211; OTDS SSO with sAMAccountName AD\/LDAP attribute and Azure","datePublished":"2025-12-06T18:47:00+00:00","dateModified":"2026-02-25T20:16:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/"},"wordCount":1152,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png","keywords":["Azure","Documentum","OAUTH2","OpenID Connect","OTDS","sAMAccountName","SSO","userPrincipalName"],"articleSection":["Enterprise content management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/","url":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/","name":"Dctm - OTDS SSO with sAMAccountName AD\/LDAP attribute and Azure - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png","datePublished":"2025-12-06T18:47:00+00:00","dateModified":"2026-02-25T20:16:12+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8"},"description":"Let's go through a quick and simple way to configure OTDS SSO with sAMAccountName AD\/LDAP attribute when using Azure OAuth2 \/ OpenID Connect.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/12\/OTDS_SSO_1.png","width":908,"height":43},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/dctm-otds-sso-with-samaccountname-ad-ldap-attribute-and-azure\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Dctm &#8211; OTDS SSO with sAMAccountName AD\/LDAP attribute and Azure"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8","name":"Morgan Patou","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g","caption":"Morgan Patou"},"description":"Morgan Patou has over 12 years of experience in Enterprise Content Management (ECM) systems, with a strong focus in recent years on platforms such as Alfresco, Documentum, and M-Files. He specializes in the architecture, setup, customization, and maintenance of ECM infrastructures in complex &amp; critical environments. Morgan is well-versed in both engineering and operations aspects, including high availability design, system integration, and lifecycle management. He also has a solid foundation in open-source and proprietary technologies - ranging from Apache, OpenLDAP or Kerberos to enterprise-grade systems like WebLogic. Morgan Patou holds an Engineering Degree in Computer Science from ENSISA (\u00c9cole Nationale Sup\u00e9rieure d'Ing\u00e9nieurs Sud Alsace) in Mulhouse, France. He is Alfresco Content Services Certified Administrator (ACSCA), Alfresco Content Services Certified Engineer (ACSCE) as well as OpenText Documentum Certified Administrator. His industry experience spans the Public Sector, IT Services, Financial Services\/Banking, and the Pharmaceutical industry.","sameAs":["https:\/\/blog.dbi-services.com\/author\/morgan-patou\/","https:\/\/x.com\/MorganPatou"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/morgan-patou\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/41752","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=41752"}],"version-history":[{"count":3,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/41752\/revisions"}],"predecessor-version":[{"id":43171,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/41752\/revisions\/43171"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=41752"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=41752"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=41752"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=41752"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}