{"id":24569,"date":"2024-02-15T14:53:34","date_gmt":"2024-02-15T22:53:34","guid":{"rendered":"https:\/\/docs.extraview.com\/v25\/book\/ucloginauthenticateuser-1\/"},"modified":"2024-02-15T14:53:34","modified_gmt":"2024-02-15T22:53:34","slug":"ucloginauthenticateuser-1","status":"publish","type":"page","link":"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/","title":{"rendered":"ucLoginAuthenticateUser"},"content":{"rendered":"<h3>\n\tPurpose<\/h3>\n<p>Provides an exit to authenticate users outside of ExtraView,<\/p>\n<h3>\n\tApplies To<\/h3>\n<p>User Authentication Methods<\/p>\n<h3>\n\tSignature<\/h3>\n<pre class=\"code\">\r\n<code>public boolean ucLoginAuthenticateUser (\r\n      String id, \t\t\t\/\/ the User ID\r\n      String pswd)                      \/\/ the password<\/code>\r\n<\/pre>\n<h3>\n\tNotes<\/h3>\n<p>Typically used when interfacing with a directory service such as LDAP.<\/p>\n<h3>\n\tExample<\/h3>\n<p>ucLoginAuthenticateUser implements the following custom authentication routine:search the LDAP directory for the uid provided; if only one entry exists, then obtain the uniqueIdentifier attribute and perform the authentication; if multiple entries exist for the same uid, then write to the log and fail the authentication.<\/p>\n<pre class=\"code\">\r\n<code>    public boolean ucLoginAuthenticateUser (String id, String pswd) {\r\n        boolean authenticated = false;\r\n        Connection con = null;\r\n\r\n        \/\/ Use this for LDAP Authentication\r\n        SearchLDAP slap = new SearchLDAP();\r\n\r\n        try {\r\n            \/\/ Error check\r\n            if (id == null || id.trim().length() == 0)\r\n                throw new Exception(\"Empty user id!\");\r\n\r\n            if (pswd == null || pswd.trim().length() == 0)\r\n                throw new Exception(\"Empty user password!\");\r\n            \r\n            \/\/ For the Admin user configured for ADMIN_USER_ID parameter in \r\n            \/\/ Configuration.properties bypass the custom authentication and \r\n            \/\/ return false. If the CUSTOM_AUTHENTICATION behavior property \r\n            \/\/ is set to HYBRID, then extraview will use the inbuilt authentication\r\n            \/\/ after returning from this method.\r\n           \r\n            String adminUserId = Z.config.getConfigValue(\"ADMIN_USER_ID\");\r\n            if(adminUserId !=null &amp;&amp; adminUserId.equals(id)){\r\n            \treturn false;\r\n            }\r\n\r\n            \/\/ Search the directory for the id provided\r\n            String distinguishedName = searchForDistinguishedName(id);\r\n\r\n            \/\/ Authenticate user\r\n            DirContext ctx = getContext(distinguishedName.toString(), pswd);\r\n\r\n            if (ctx != null) {\r\n                \/\/ do a little test to see if we authenticated....\r\n                ctx.lookup(\"\");\r\n                authenticated = true;\r\n\r\n                try {\r\n                    \/\/ we connected  - upsert the data now\r\n                    con = Z.pool.getConnection();\r\n                    slap.doUpsert(con, ctx, id, true);\r\n                }\r\n                catch (Exception e) {\r\n                    Z.log.writeToLog(Z.log.ERROR, \"UPSERT FAILED: \" + e);\r\n                    ErrorWriter.write(e, ErrorWriter.ERR);\r\n                }\r\n                finally {\r\n                    ctx.close();\r\n                    if (con != null) Z.pool.close(con);\r\n                }\r\n            }\r\n        } catch (Exception e) {\r\n            Z.log.writeToLog(Z.log.ERROR, \"authentication error: \" + e);\r\n            ErrorWriter.write(e, ErrorWriter.LOGERR);\r\n        }\r\n        return authenticated;\r\n    }\r\n\r\n    \/**\r\n     * searchForDistinguishedName searches the LDAP directory for the \r\n     * given user id and returns the distinguishedName attribute value\r\n     * if only one exists; if multiple entries exist with the same uid, \r\n     * then write out the info to the log and throw an exception.\r\n     *\/\r\n\r\n    private String searchForDistinguishedName (String uid)\r\n    throws Exception {\r\n        \/\/ Get simple directory context for searching\r\n        Hashtable env = new Hashtable();\r\n        env.put(Context.PROVIDER_URL, Z.lu.getInitHost() );\r\n        env.put(Context.INITIAL_CONTEXT_FACTORY, initContextFactory);\r\n        env.put(Context.SECURITY_AUTHENTICATION, securityAuth);\r\n        env.put(Context.SECURITY_PRINCIPAL,Z.lu.getInitMgrDn());\r\n        env.put(Context.SECURITY_CREDENTIALS,Z.lu.getInitPswd());\r\n        DirContext ctx = new InitialDirContext(env);\r\n        \r\n        String primaryKeyAttr = \r\n               Z.config.getConfigValue(\"LDAP_PRIMARYKEY\");\r\n        String firstNameAttr = \r\n               Z.config.getConfigValue(\"LDAP_GIVENNAME\");\r\n        String lastNameAttr = \r\n               Z.config.getConfigValue(\"LDAP_SURNAME\");\r\n        String distinguishedNameAttr = \r\n               Z.config.getConfigValue(\"LDAP_DISTINGUISHEDNAME\");\r\n        String activeUserFilterAttr = \r\n               Z.config.getConfigValue(\"LDAP_USER_FILTER_ATTR\");\r\n        String activeUserFilterAttrCriteria = \r\n               Z.config.getConfigValue(\"LDAP_USER_FILTER_ATTR_CRITERIA\");\r\n\r\n        \/\/ Prepare for searching\r\n        String filter = \"(&amp;(\"+primaryKeyAttr+\"=\" + uid + \")(\"+firstNameAttr+\"=*)(\"\r\n        \t+lastNameAttr+\"=*)(\"+activeUserFilterAttr+\"=*\"\r\n                +activeUserFilterAttrCriteria+\"*))\";\r\n        SearchControls controls = new SearchControls();\r\n        controls.setSearchScope(SearchControls.SUBTREE_SCOPE);\r\n        \r\n        \/\/ Search directory and collect unique identifiers\r\n        ArrayList distinguishedNames = new ArrayList();\r\n        NamingEnumeration ne = ctx.search(Z.lu.getInitSearchBase(), filter, controls);\r\n        \r\n\r\n        while (ne.hasMore() ) {\r\n            SearchResult sr = (SearchResult) ne.next();\r\n            Attributes atts = sr.getAttributes();\r\n            Attribute att = atts.get(distinguishedNameAttr);\r\n            String distinguishedNameString = (String)att.get();\r\n       \t\tdistinguishedNames.add(distinguishedNameString);\r\n        }\r\n        ctx.close();\r\n        \/\/ Check how many entries were found\r\n        String msg = null;\r\n\r\n        if (distinguishedNames.isEmpty() ) {\r\n            msg = \"No entry found in LDAP for \"+primaryKeyAttr+\"=\" + uid;\r\n            Z.log.writeToLog(Z.log.WARN, msg);\r\n        }\r\n        else if (distinguishedNames.size() &gt; 1) {\r\n            msg = \"Multiple entries found in LDAP for \"+primaryKeyAttr+\"=\" + uid;\r\n            Z.log.writeToLog(Z.log.ERROR, msg);\r\n            Z.log.writeToLog(Z.log.ERROR, \r\n               \"distinguishedNames found: \" + distinguishedNames);\r\n        }\r\n\r\n        \/\/ Either throw exception or return unique identifier\r\n        if (msg != null)\r\n            throw new Exception(msg);\r\n\r\n        return (String) distinguishedNames.get(0);\r\n    }\r\n<\/code>\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Purpose Provides an exit to authenticate users outside of ExtraView, Applies To User Authentication Methods Signature public boolean ucLoginAuthenticateUser ( String id, \/\/ the User ID String pswd) \/\/ the password Notes Typically used when interfacing with a directory service such as LDAP. Example ucLoginAuthenticateUser implements the following custom authentication routine:search the LDAP directory for&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":24510,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_lmt_disableupdate":"","_lmt_disable":"","_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"class_list":["post-24569","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ucLoginAuthenticateUser - Product Documentation<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ucLoginAuthenticateUser - Product Documentation\" \/>\n<meta property=\"og:description\" content=\"Purpose Provides an exit to authenticate users outside of ExtraView, Applies To User Authentication Methods Signature public boolean ucLoginAuthenticateUser ( String id, \/\/ the User ID String pswd) \/\/ the password Notes Typically used when interfacing with a directory service such as LDAP. Example ucLoginAuthenticateUser implements the following custom authentication routine:search the LDAP directory for...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Product Documentation\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/\",\"url\":\"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/\",\"name\":\"ucLoginAuthenticateUser - Product Documentation\",\"isPartOf\":{\"@id\":\"https:\/\/docs.extraview.com\/v25\/#website\"},\"datePublished\":\"2024-02-15T22:53:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/docs.extraview.com\/v25\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ExtraView 25\",\"item\":\"https:\/\/docs.extraview.com\/v25\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"User Custom Guide\",\"item\":\"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Java Interface\",\"item\":\"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"User Custom Methods\",\"item\":\"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/\"},{\"@type\":\"ListItem\",\"position\":6,\"name\":\"ucLoginAuthenticateUser\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/docs.extraview.com\/v25\/#website\",\"url\":\"https:\/\/docs.extraview.com\/v25\/\",\"name\":\"ExtraView Product Documentation\",\"description\":\"ExtraView Documentation\",\"publisher\":{\"@id\":\"https:\/\/docs.extraview.com\/v25\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/docs.extraview.com\/v25\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/docs.extraview.com\/v25\/#organization\",\"name\":\"ExtraView Corporation\",\"url\":\"https:\/\/docs.extraview.com\/v25\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/docs.extraview.com\/v25\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/docs-stg.extraview.com\/wp-content\/uploads\/2024\/03\/favicon.png\",\"contentUrl\":\"https:\/\/docs-stg.extraview.com\/wp-content\/uploads\/2024\/03\/favicon.png\",\"width\":512,\"height\":512,\"caption\":\"ExtraView Corporation\"},\"image\":{\"@id\":\"https:\/\/docs.extraview.com\/v25\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ucLoginAuthenticateUser - Product Documentation","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:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/","og_locale":"en_US","og_type":"article","og_title":"ucLoginAuthenticateUser - Product Documentation","og_description":"Purpose Provides an exit to authenticate users outside of ExtraView, Applies To User Authentication Methods Signature public boolean ucLoginAuthenticateUser ( String id, \/\/ the User ID String pswd) \/\/ the password Notes Typically used when interfacing with a directory service such as LDAP. Example ucLoginAuthenticateUser implements the following custom authentication routine:search the LDAP directory for...","og_url":"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/","og_site_name":"Product Documentation","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/","url":"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/","name":"ucLoginAuthenticateUser - Product Documentation","isPartOf":{"@id":"https:\/\/docs.extraview.com\/v25\/#website"},"datePublished":"2024-02-15T22:53:34+00:00","breadcrumb":{"@id":"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/ucloginauthenticateuser-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/docs.extraview.com\/v25\/"},{"@type":"ListItem","position":2,"name":"ExtraView 25","item":"https:\/\/docs.extraview.com\/v25\/"},{"@type":"ListItem","position":3,"name":"User Custom Guide","item":"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/"},{"@type":"ListItem","position":4,"name":"Java Interface","item":"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/"},{"@type":"ListItem","position":5,"name":"User Custom Methods","item":"https:\/\/docs.extraview.com\/v25\/extraview-25\/user-custom-guide-1\/java-interface-1\/user-custom-methods-1\/"},{"@type":"ListItem","position":6,"name":"ucLoginAuthenticateUser"}]},{"@type":"WebSite","@id":"https:\/\/docs.extraview.com\/v25\/#website","url":"https:\/\/docs.extraview.com\/v25\/","name":"ExtraView Product Documentation","description":"ExtraView Documentation","publisher":{"@id":"https:\/\/docs.extraview.com\/v25\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/docs.extraview.com\/v25\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/docs.extraview.com\/v25\/#organization","name":"ExtraView Corporation","url":"https:\/\/docs.extraview.com\/v25\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/docs.extraview.com\/v25\/#\/schema\/logo\/image\/","url":"https:\/\/docs-stg.extraview.com\/wp-content\/uploads\/2024\/03\/favicon.png","contentUrl":"https:\/\/docs-stg.extraview.com\/wp-content\/uploads\/2024\/03\/favicon.png","width":512,"height":512,"caption":"ExtraView Corporation"},"image":{"@id":"https:\/\/docs.extraview.com\/v25\/#\/schema\/logo\/image\/"}}]}},"taxonomy_info":[],"featured_image_src_large":false,"author_info":{"display_name":"carl.koppel","author_link":"https:\/\/docs.extraview.com\/v25\/author\/carl-koppel\/"},"comment_info":0,"_links":{"self":[{"href":"https:\/\/docs.extraview.com\/v25\/wp-json\/wp\/v2\/pages\/24569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.extraview.com\/v25\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/docs.extraview.com\/v25\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/docs.extraview.com\/v25\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.extraview.com\/v25\/wp-json\/wp\/v2\/comments?post=24569"}],"version-history":[{"count":0,"href":"https:\/\/docs.extraview.com\/v25\/wp-json\/wp\/v2\/pages\/24569\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/docs.extraview.com\/v25\/wp-json\/wp\/v2\/pages\/24510"}],"wp:attachment":[{"href":"https:\/\/docs.extraview.com\/v25\/wp-json\/wp\/v2\/media?parent=24569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}