{"id":771,"date":"2019-05-21T14:45:37","date_gmt":"2019-05-21T10:15:37","guid":{"rendered":"http:\/\/www.enhisecure.com\/isecureblog\/?p=771"},"modified":"2019-05-21T14:45:37","modified_gmt":"2019-05-21T10:15:37","slug":"sailpoint-identity-attribute-configuration-challenges","status":"publish","type":"post","link":"https:\/\/www.enhisecure.com\/isecureblog\/2019\/05\/21\/sailpoint-identity-attribute-configuration-challenges\/","title":{"rendered":"SailPoint Identity Attribute &#8211;  Configuration Challenges"},"content":{"rendered":"\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">Identity <\/a>attributes in <a href=\"https:\/\/www.sailpoint.com\/\">SailPoint <\/a><a href=\"https:\/\/www.sailpoint.com\/products\/identityiq\/\">IdentityIQ<\/a> are central to any implementation. They usually comprise a lot of information useful for a user&#8217;s functioning in the <a href=\"https:\/\/dictionary.cambridge.org\/dictionary\/english\/enterprise\">enterprise<\/a>.<\/p>\n\n\n\n<p><strong>Purpose<\/strong>: The blog speaks about a rare way of configuring the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity <\/a>attributes in <a href=\"https:\/\/www.sailpoint.com\/\">SailPoint <\/a>which would lead to a few challenges.<\/p>\n\n\n\n<p><strong>Requirements Context:<\/strong> By nature, a few <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity <\/a>attributes need to point to another <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity<\/a>. 2 such use-cases would be:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>&#8220;<a href=\"https:\/\/simple.wikipedia.org\/wiki\/Manager\">manager<\/a>&#8221; is an <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity <\/a>attribute which refers to the <a href=\"https:\/\/simple.wikipedia.org\/wiki\/Manager\">manager <\/a>of the <a href=\"https:\/\/dictionary.cambridge.org\/dictionary\/english\/employee\">employee<\/a>\/<a href=\"https:\/\/en.wikipedia.org\/wiki\/Contractor\">contractor<\/a>.<\/li><li>&#8220;<a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant<\/a>&#8221; can be a custom attribute which refers to the <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant <\/a>of the <a href=\"https:\/\/dictionary.cambridge.org\/dictionary\/english\/employee\">employee<\/a>\/<a href=\"https:\/\/en.wikipedia.org\/wiki\/Contractor\">contractor<\/a>. Action items of an <a href=\"https:\/\/dictionary.cambridge.org\/dictionary\/english\/employee\">employee<\/a>\/<a href=\"https:\/\/en.wikipedia.org\/wiki\/Contractor\">contractor <\/a>can be delegated to this <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant<\/a> when <a href=\"https:\/\/dictionary.cambridge.org\/dictionary\/english\/employee\">employee<\/a>\/<a href=\"https:\/\/en.wikipedia.org\/wiki\/Contractor\">contractor <\/a>is on a vacation.<\/li><\/ol>\n\n\n\n<p>Any <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity <\/a>attribute in <a href=\"https:\/\/www.sailpoint.com\/products\/identityiq\/\">IdentityIQ<\/a> can be configured as either searchable or non-searchable attribute. A searchable attribute has a dedicated <a href=\"https:\/\/en.wikipedia.org\/wiki\/Database\">database <\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/Column_(database)\">column <\/a>for itself. In case of attributes like <a href=\"https:\/\/simple.wikipedia.org\/wiki\/Manager\">manager<\/a>, we would ideally need a lot of filtering capability on the attributes and this makes a perfect case for being searchable attribute. A few use-cases where having <a href=\"https:\/\/simple.wikipedia.org\/wiki\/Manager\">manager <\/a>as searchable attributes would help are.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Finding list of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identities <\/a>without <a href=\"https:\/\/simple.wikipedia.org\/wiki\/Manager\">managers<\/a>. <\/li><li>Finding a list of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identities <\/a>with inactive <a href=\"https:\/\/simple.wikipedia.org\/wiki\/Manager\">managers<\/a>.<\/li><\/ol>\n\n\n\n<p> However, usage of <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant <\/a>attribute is not quite similar. Not a lot of searching\/filtering would happen in a typical <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">IAM <\/a>implementation based on <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant <\/a>attribute. It would be preferable to have this attribute as a non-searchable attribute.<\/p>\n\n\n\n<p><strong>Implementation:<\/strong> <\/p>\n\n\n\n<p>As part of the implementation, an extended attribute is configured in the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">Identity <\/a>Configuration for <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant <\/a>attribute as follows.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"821\" height=\"128\" src=\"https:\/\/www.enhisecure.com\/isecureblog\/wp-content\/uploads\/2019\/05\/image.png\" alt=\"\" class=\"wp-image-775\" srcset=\"https:\/\/www.enhisecure.com\/isecureblog\/wp-content\/uploads\/2019\/05\/image.png 821w, https:\/\/www.enhisecure.com\/isecureblog\/wp-content\/uploads\/2019\/05\/image-300x47.png 300w\" sizes=\"auto, (max-width: 821px) 100vw, 821px\" \/><figcaption>Assistant identity attribute configuration<\/figcaption><\/figure>\n\n\n\n<p>The following configuration details are to be observed.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Type of attribute is &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">Identity<\/a>&#8220;.<\/li><li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">Identity <\/a>attribute is not configured to be searchable as there is no extended number that is configured on this attribute.<\/li><\/ol>\n\n\n\n<p>          <em style=\"font-size: inherit\"><strong>Attribute population logic<\/strong><\/em><strong style=\"font-size: inherit\">:<\/strong><span style=\"font-size: inherit\"> The attribute is configured to fetch the <\/span><a style=\"font-size: inherit\" href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant<\/a><span style=\"font-size: inherit\"> attribute from <\/span><a style=\"font-size: inherit\" href=\"https:\/\/en.wikipedia.org\/wiki\/Active_Directory\">Active Directory<\/a><span style=\"font-size: inherit\"> application and populate the <\/span><a style=\"font-size: inherit\" href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant<\/a><span style=\"font-size: inherit\"> attribute based on the <\/span><a style=\"font-size: inherit\" href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant <\/a><span style=\"font-size: inherit\">attribute from <\/span><a style=\"font-size: inherit\" href=\"https:\/\/en.wikipedia.org\/wiki\/Active_Directory\">Active Directory<\/a><span style=\"font-size: inherit\">.<\/span><\/p>\n\n\n\n<p><strong>Challenge faced<\/strong>: A specific challenge is faced when this type of configuration is used with <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity<\/a> attributes.<\/p>\n\n\n\n<p>         <em><strong>Scenario<\/strong><\/em><strong>:<\/strong> There will be certain situations where the assistant attribute in <a href=\"https:\/\/en.wikipedia.org\/wiki\/Active_Directory\">Active Directory<\/a> points to itself. For example,  John.Doe&#8217;s <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant <\/a>would be John.Doe himself. This configuration has lead to failure of a lot of operations\/tasks due to a <a href=\"https:\/\/www.sailpoint.com\/\">SailPoint <\/a>behavior described below.<\/p>\n\n\n\n<p class=\"secondLevel\"> <br \/>          <em><strong>Root Cause<\/strong><\/em><strong>:<\/strong> <a href=\"https:\/\/www.sailpoint.com\/\">SailPoint <\/a>uses a <a href=\"https:\/\/hibernate.org\/\">hibernate <\/a>for <a href=\"https:\/\/hibernate.org\/orm\/\">object relational model<\/a>. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Table_(database)\">Tables <\/a>in <a href=\"https:\/\/www.sailpoint.com\/products\/identityiq\/\">IdentityIQ <\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/Database\">database <\/a>are represented by <a href=\"https:\/\/en.wikipedia.org\/wiki\/Java_(programming_language)\">java <\/a><a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/lang\/Class.html\">classes <\/a>in <a href=\"https:\/\/www.sailpoint.com\/products\/identityiq\/\">Identity IQ<\/a>. In this case, spt_Identity <a href=\"https:\/\/en.wikipedia.org\/wiki\/Table_(database)\">table <\/a>is represented by the class &#8220;sailpoint.object.Identity&#8221;. Objects of &#8220;sailpoint.object.Identity&#8221; <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/lang\/Class.html\">class <\/a>shall correspond to rows in the &#8220;spt_Identity&#8221; <a href=\"https:\/\/en.wikipedia.org\/wiki\/Table_(database)\">table<\/a>. <\/p>\n\n\n\n<p>SailPoint has to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Serialization\">serialize <\/a>this <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">Identity <\/a>objects in the process of storing them in the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Table_(database)\">tables<\/a>. Non searchable attributes are all stored in an <a href=\"https:\/\/docs.oracle.com\/javadb\/10.10.1.2\/ref\/rrefclob.html\">XML CLOB <\/a>in spt_Identity <a href=\"https:\/\/en.wikipedia.org\/wiki\/Table_(database)\">table<\/a>. As per the <a href=\"https:\/\/www.sailpoint.com\/\">SailPoint&#8217;s <\/a>default behavior, non-searchable attributes are going to be <a href=\"https:\/\/en.wikipedia.org\/wiki\/Serialization\">serialized <\/a>in a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Recursion\">recursive <\/a>fashion. Following the same, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Serialization\">serialization <\/a>shall be attempted on the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity<\/a> pointed by the <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant <\/a>attribute.<\/p>\n\n\n\n<p>In the scenario mentioned above where an <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity <\/a>is his\/her own <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant<\/a>, a sub-<a href=\"https:\/\/en.wikipedia.org\/wiki\/Serialization\">serialization <\/a>of same <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity <\/a>as part of <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/adschema\/c-user\">assistant <\/a>attribute <a href=\"https:\/\/en.wikipedia.org\/wiki\/Serialization\">serialization <\/a>is attempted as shown in below diagram. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"617\" height=\"402\" src=\"https:\/\/www.enhisecure.com\/isecureblog\/wp-content\/uploads\/2019\/05\/image-2.png\" alt=\"\" class=\"wp-image-781\" srcset=\"https:\/\/www.enhisecure.com\/isecureblog\/wp-content\/uploads\/2019\/05\/image-2.png 617w, https:\/\/www.enhisecure.com\/isecureblog\/wp-content\/uploads\/2019\/05\/image-2-300x195.png 300w\" sizes=\"auto, (max-width: 617px) 100vw, 617px\" \/><figcaption>Recursive Serialization of assistant attribute<\/figcaption><\/figure>\n\n\n\n<p><strong>Possible Solutions<\/strong>: Above problem can be solved in 2 ways.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><em>Adding checks to avoid self-references.<\/em><br \/>Logic to populate such type of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity <\/a>attribute shall include a check to avoid <a href=\"https:\/\/en.wikipedia.org\/wiki\/Self-reference#In_logic,_mathematics_and_computing\">self-referencing <\/a>of non-searchable <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity <\/a>attributes.<\/li><li><em>Using Searchable attributes.<\/em><br \/>Avoiding the use of non-searchable attributes for <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity <\/a>attributes of type <a href=\"https:\/\/en.wikipedia.org\/wiki\/Identity_management\">identity<\/a>.<\/li><\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Identity attributes in SailPoint IdentityIQ are central to any implementation. They usually comprise a lot of information useful for a user&#8217;s functioning in the enterprise. Purpose: The blog speaks about a rare way of configuring the identity attributes in SailPoint which would lead to a few challenges. Requirements Context: By nature, a few identity attributes [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":781,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,15,14,16],"tags":[40,11],"class_list":["post-771","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-identity-governance","category-implementation-problems","category-sailpoint","category-technology","tag-active-directory","tag-sailpoint"],"_links":{"self":[{"href":"https:\/\/www.enhisecure.com\/isecureblog\/wp-json\/wp\/v2\/posts\/771","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.enhisecure.com\/isecureblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.enhisecure.com\/isecureblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.enhisecure.com\/isecureblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.enhisecure.com\/isecureblog\/wp-json\/wp\/v2\/comments?post=771"}],"version-history":[{"count":22,"href":"https:\/\/www.enhisecure.com\/isecureblog\/wp-json\/wp\/v2\/posts\/771\/revisions"}],"predecessor-version":[{"id":807,"href":"https:\/\/www.enhisecure.com\/isecureblog\/wp-json\/wp\/v2\/posts\/771\/revisions\/807"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.enhisecure.com\/isecureblog\/wp-json\/wp\/v2\/media\/781"}],"wp:attachment":[{"href":"https:\/\/www.enhisecure.com\/isecureblog\/wp-json\/wp\/v2\/media?parent=771"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.enhisecure.com\/isecureblog\/wp-json\/wp\/v2\/categories?post=771"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.enhisecure.com\/isecureblog\/wp-json\/wp\/v2\/tags?post=771"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}