<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Configuring keycloak backend db which is postgreSQL with nuxeo as user/group directory in Nuxeo Forum</title>
    <link>https://connect.hyland.com/t5/nuxeo-forum/configuring-keycloak-backend-db-which-is-postgresql-with-nuxeo/m-p/315687#M2688</link>
    <description>&lt;P&gt;I wanted to point  nuxeo to keycloak's backend db which is PostgreSQL for user/group directory
For this I defined below extensions&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;sql datasource&lt;/LI&gt;
&lt;/OL&gt;
&lt;PRE&gt;&lt;CODE class="language-xml"&gt;&amp;lt;?xml version="1.0"?&amp;gt;
 &amp;lt;component name="postgre.keycloak.datasource.config" version = "1.0"&amp;gt;
 &amp;lt;require&amp;gt;org.nuxeo.runtime.datasource.server.contrib&amp;lt;/require&amp;gt;
 &amp;lt;extension target="org.nuxeo.runtime.datasource"
    point="datasources"&amp;gt;
	&amp;lt;datasource name="jdbc/testdb"
          driverClassName="org.postgresql.Driver"
          maxPoolSize="20" minPoolSize="5" blockingTimeoutMillis="10000"&amp;gt;
          &amp;lt;property name="url"&amp;gt;jdbc:postgresql://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/testdb
          &amp;lt;/property&amp;gt;
          &amp;lt;property name="username"&amp;gt;user&amp;lt;/property&amp;gt;
          &amp;lt;property name="password"&amp;gt;*****&amp;lt;/property&amp;gt;
        &amp;lt;/datasource&amp;gt;
	&amp;lt;/extension&amp;gt;
 &amp;lt;/component&amp;gt;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;SQL directory configuration for user as well group&lt;/LI&gt;
&lt;/OL&gt;
&lt;PRE&gt;&lt;CODE class="language-xml"&gt;&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;component name="custom.directory.sql.config" version = "1.0"&amp;gt;
	&amp;lt;require&amp;gt;org.nuxeo.ecm.directory.sql.SQLDirectoryFactory&amp;lt;/require&amp;gt;
	&amp;lt;require&amp;gt;postgre.keycloak.datasource.config&amp;lt;/require&amp;gt;
	&amp;lt;extension target="org.nuxeo.ecm.directory.sql.SQLDirectoryFactory" point="directories"&amp;gt;
		&amp;lt;directory name="demoUserSQLDirectory"&amp;gt;
			&amp;lt;schema&amp;gt;user&amp;lt;/schema&amp;gt;
			&amp;lt;dataSource&amp;gt;testdb&amp;lt;/dataSource&amp;gt;
			&amp;lt;table&amp;gt;keycloak_user&amp;lt;/table&amp;gt;
			&amp;lt;idField&amp;gt;username&amp;lt;/idField&amp;gt;
			&amp;lt;autoincrementIdField&amp;gt;false&amp;lt;/autoincrementIdField&amp;gt;
			&amp;lt;dataFile&amp;gt;&amp;lt;/dataFile&amp;gt;
			&amp;lt;createTablePolicy&amp;gt;never&amp;lt;/createTablePolicy&amp;gt;
			&amp;lt;querySizeLimit&amp;gt;15&amp;lt;/querySizeLimit&amp;gt;
			&amp;lt;references&amp;gt;
				&amp;lt;inverseReference directory="demoGroupSQLDirectory" dualReferenceField="members" field="groups"/&amp;gt;
			&amp;lt;/references&amp;gt;
		&amp;lt;/directory&amp;gt;
		&amp;lt;directory name="demoGroupSQLDirectory"&amp;gt;
			&amp;lt;schema&amp;gt;group&amp;lt;/schema&amp;gt;
			&amp;lt;dataSource&amp;gt;testdb&amp;lt;/dataSource&amp;gt;
			&amp;lt;table&amp;gt;keycloak_group&amp;lt;/table&amp;gt;
			&amp;lt;idField&amp;gt;groupname&amp;lt;/idField&amp;gt;
			&amp;lt;dataFile&amp;gt;&amp;lt;/dataFile&amp;gt;
			&amp;lt;createTablePolicy&amp;gt;never&amp;lt;/createTablePolicy&amp;gt;
			&amp;lt;autoincrementIdField&amp;gt;false&amp;lt;/autoincrementIdField&amp;gt;
			&amp;lt;references&amp;gt;
				&amp;lt;tableReference dataFile="" directory="demoUserSQLDirectory" field="members" schema="user2group" sourceColumn="groupId" table="keycloak_user_group" targetColumn="userId"/&amp;gt;
				&amp;lt;!--&amp;lt;tableReference directory="demoGroupSQLDirectory" field="subGroups" schema="group2group" sourceColumn="child_role" table="composite_role" targetColumn="composite"/&amp;gt;&amp;lt;inverseReference directory="demoGroupSQLDirectory" dualReferenceField="subGroups" field="parentGroups"/&amp;gt; --&amp;gt;
			&amp;lt;/references&amp;gt;
		&amp;lt;/directory&amp;gt;
	&amp;lt;/extension&amp;gt;
	&amp;lt;extension target="org.nuxeo.ecm.platform.usermanager.UserService" point="userManager"&amp;gt;
		&amp;lt;userManager&amp;gt;
			&amp;lt;users&amp;gt;
				&amp;lt;directory&amp;gt;demoUserSQLDirectory&amp;lt;/directory&amp;gt;
			&amp;lt;/users&amp;gt;
			&amp;lt;groups&amp;gt;
				&amp;lt;directory&amp;gt;demoGroupSQLDirectory&amp;lt;/directory&amp;gt;
			&amp;lt;/groups&amp;gt;
			&amp;lt;defaultAdministratorId&amp;gt;administrator&amp;lt;/defaultAdministratorId&amp;gt;
			&amp;lt;defaultGroup&amp;gt;custom_group&amp;lt;/defaultGroup&amp;gt;
		&amp;lt;/userManager&amp;gt;
	&amp;lt;/extension&amp;gt;
&amp;lt;/component&amp;gt;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;UL&gt;
&lt;LI&gt;Here I tried to execute search query on user using username, I faced below exception
org.postgresql.util.PSQLException: ERROR: column "firstName" does not exist&lt;/LI&gt;
&lt;LI&gt;And when I went through the code of org.nuxeo.ecm.directory.sql.SQLSQLDirectory, nuxeo looks for schema attributes in database table (e.g select username, email, firstName, lastName from ....).
But as here, the column names are different in keycloak from nuxeo schema attributes, the search is failing.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Can any please suggest how I handle the above scenario where schema of user/group differs in nuxeo and database tables?&lt;/P&gt;
&lt;P&gt;P.S.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;In ldap directory configuration, the mapping between ldap attribute and nuxeo schema attribute can be added using tag &lt;CODE&gt;&amp;lt;fieldMapping&amp;gt;&lt;/CODE&gt;&lt;/LI&gt;
&lt;LI&gt;e.g for username, &lt;CODE&gt;&amp;lt;fieldMapping name="username"&amp;gt;cn&amp;lt;/fieldMapping&amp;gt; &lt;/CODE&gt;
Such tag is not supported in SQLDirectoryDescriptor&lt;/LI&gt;
&lt;/UL&gt;
&lt;PRE&gt;&lt;CODE class="language-xml"&gt;&amp;lt;users&amp;gt;
	&amp;lt;directory&amp;gt;demoUserSQLDirectory&amp;lt;/directory&amp;gt;
&amp;lt;/users&amp;gt;
&amp;lt;groups&amp;gt;
	&amp;lt;directory&amp;gt;demoGroupSQLDirectory&amp;lt;/directory&amp;gt;
&amp;lt;/groups&amp;gt;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;UL&gt;
&lt;LI&gt;I overrode the user and group schema using contributions and the schema is getting overridden successfully&lt;/LI&gt;
&lt;LI&gt;But during initialization of nuxeo, the SQLDirectory is picking up the default directory definition and failing as default schema is changed&lt;/LI&gt;
&lt;/UL&gt;</description>
    <pubDate>Mon, 01 Jul 2019 05:12:13 GMT</pubDate>
    <dc:creator>Ravindra_Nalavd</dc:creator>
    <dc:date>2019-07-01T05:12:13Z</dc:date>
    <item>
      <title>Configuring keycloak backend db which is postgreSQL with nuxeo as user/group directory</title>
      <link>https://connect.hyland.com/t5/nuxeo-forum/configuring-keycloak-backend-db-which-is-postgresql-with-nuxeo/m-p/315687#M2688</link>
      <description>&lt;P&gt;I wanted to point  nuxeo to keycloak's backend db which is PostgreSQL for user/group directory
For this I defined below extensions&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;sql datasource&lt;/LI&gt;
&lt;/OL&gt;
&lt;PRE&gt;&lt;CODE class="language-xml"&gt;&amp;lt;?xml version="1.0"?&amp;gt;
 &amp;lt;component name="postgre.keycloak.datasource.config" version = "1.0"&amp;gt;
 &amp;lt;require&amp;gt;org.nuxeo.runtime.datasource.server.contrib&amp;lt;/require&amp;gt;
 &amp;lt;extension target="org.nuxeo.runtime.datasource"
    point="datasources"&amp;gt;
	&amp;lt;datasource name="jdbc/testdb"
          driverClassName="org.postgresql.Driver"
          maxPoolSize="20" minPoolSize="5" blockingTimeoutMillis="10000"&amp;gt;
          &amp;lt;property name="url"&amp;gt;jdbc:postgresql://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/testdb
          &amp;lt;/property&amp;gt;
          &amp;lt;property name="username"&amp;gt;user&amp;lt;/property&amp;gt;
          &amp;lt;property name="password"&amp;gt;*****&amp;lt;/property&amp;gt;
        &amp;lt;/datasource&amp;gt;
	&amp;lt;/extension&amp;gt;
 &amp;lt;/component&amp;gt;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;SQL directory configuration for user as well group&lt;/LI&gt;
&lt;/OL&gt;
&lt;PRE&gt;&lt;CODE class="language-xml"&gt;&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;component name="custom.directory.sql.config" version = "1.0"&amp;gt;
	&amp;lt;require&amp;gt;org.nuxeo.ecm.directory.sql.SQLDirectoryFactory&amp;lt;/require&amp;gt;
	&amp;lt;require&amp;gt;postgre.keycloak.datasource.config&amp;lt;/require&amp;gt;
	&amp;lt;extension target="org.nuxeo.ecm.directory.sql.SQLDirectoryFactory" point="directories"&amp;gt;
		&amp;lt;directory name="demoUserSQLDirectory"&amp;gt;
			&amp;lt;schema&amp;gt;user&amp;lt;/schema&amp;gt;
			&amp;lt;dataSource&amp;gt;testdb&amp;lt;/dataSource&amp;gt;
			&amp;lt;table&amp;gt;keycloak_user&amp;lt;/table&amp;gt;
			&amp;lt;idField&amp;gt;username&amp;lt;/idField&amp;gt;
			&amp;lt;autoincrementIdField&amp;gt;false&amp;lt;/autoincrementIdField&amp;gt;
			&amp;lt;dataFile&amp;gt;&amp;lt;/dataFile&amp;gt;
			&amp;lt;createTablePolicy&amp;gt;never&amp;lt;/createTablePolicy&amp;gt;
			&amp;lt;querySizeLimit&amp;gt;15&amp;lt;/querySizeLimit&amp;gt;
			&amp;lt;references&amp;gt;
				&amp;lt;inverseReference directory="demoGroupSQLDirectory" dualReferenceField="members" field="groups"/&amp;gt;
			&amp;lt;/references&amp;gt;
		&amp;lt;/directory&amp;gt;
		&amp;lt;directory name="demoGroupSQLDirectory"&amp;gt;
			&amp;lt;schema&amp;gt;group&amp;lt;/schema&amp;gt;
			&amp;lt;dataSource&amp;gt;testdb&amp;lt;/dataSource&amp;gt;
			&amp;lt;table&amp;gt;keycloak_group&amp;lt;/table&amp;gt;
			&amp;lt;idField&amp;gt;groupname&amp;lt;/idField&amp;gt;
			&amp;lt;dataFile&amp;gt;&amp;lt;/dataFile&amp;gt;
			&amp;lt;createTablePolicy&amp;gt;never&amp;lt;/createTablePolicy&amp;gt;
			&amp;lt;autoincrementIdField&amp;gt;false&amp;lt;/autoincrementIdField&amp;gt;
			&amp;lt;references&amp;gt;
				&amp;lt;tableReference dataFile="" directory="demoUserSQLDirectory" field="members" schema="user2group" sourceColumn="groupId" table="keycloak_user_group" targetColumn="userId"/&amp;gt;
				&amp;lt;!--&amp;lt;tableReference directory="demoGroupSQLDirectory" field="subGroups" schema="group2group" sourceColumn="child_role" table="composite_role" targetColumn="composite"/&amp;gt;&amp;lt;inverseReference directory="demoGroupSQLDirectory" dualReferenceField="subGroups" field="parentGroups"/&amp;gt; --&amp;gt;
			&amp;lt;/references&amp;gt;
		&amp;lt;/directory&amp;gt;
	&amp;lt;/extension&amp;gt;
	&amp;lt;extension target="org.nuxeo.ecm.platform.usermanager.UserService" point="userManager"&amp;gt;
		&amp;lt;userManager&amp;gt;
			&amp;lt;users&amp;gt;
				&amp;lt;directory&amp;gt;demoUserSQLDirectory&amp;lt;/directory&amp;gt;
			&amp;lt;/users&amp;gt;
			&amp;lt;groups&amp;gt;
				&amp;lt;directory&amp;gt;demoGroupSQLDirectory&amp;lt;/directory&amp;gt;
			&amp;lt;/groups&amp;gt;
			&amp;lt;defaultAdministratorId&amp;gt;administrator&amp;lt;/defaultAdministratorId&amp;gt;
			&amp;lt;defaultGroup&amp;gt;custom_group&amp;lt;/defaultGroup&amp;gt;
		&amp;lt;/userManager&amp;gt;
	&amp;lt;/extension&amp;gt;
&amp;lt;/component&amp;gt;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;UL&gt;
&lt;LI&gt;Here I tried to execute search query on user using username, I faced below exception
org.postgresql.util.PSQLException: ERROR: column "firstName" does not exist&lt;/LI&gt;
&lt;LI&gt;And when I went through the code of org.nuxeo.ecm.directory.sql.SQLSQLDirectory, nuxeo looks for schema attributes in database table (e.g select username, email, firstName, lastName from ....).
But as here, the column names are different in keycloak from nuxeo schema attributes, the search is failing.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Can any please suggest how I handle the above scenario where schema of user/group differs in nuxeo and database tables?&lt;/P&gt;
&lt;P&gt;P.S.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;In ldap directory configuration, the mapping between ldap attribute and nuxeo schema attribute can be added using tag &lt;CODE&gt;&amp;lt;fieldMapping&amp;gt;&lt;/CODE&gt;&lt;/LI&gt;
&lt;LI&gt;e.g for username, &lt;CODE&gt;&amp;lt;fieldMapping name="username"&amp;gt;cn&amp;lt;/fieldMapping&amp;gt; &lt;/CODE&gt;
Such tag is not supported in SQLDirectoryDescriptor&lt;/LI&gt;
&lt;/UL&gt;
&lt;PRE&gt;&lt;CODE class="language-xml"&gt;&amp;lt;users&amp;gt;
	&amp;lt;directory&amp;gt;demoUserSQLDirectory&amp;lt;/directory&amp;gt;
&amp;lt;/users&amp;gt;
&amp;lt;groups&amp;gt;
	&amp;lt;directory&amp;gt;demoGroupSQLDirectory&amp;lt;/directory&amp;gt;
&amp;lt;/groups&amp;gt;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;UL&gt;
&lt;LI&gt;I overrode the user and group schema using contributions and the schema is getting overridden successfully&lt;/LI&gt;
&lt;LI&gt;But during initialization of nuxeo, the SQLDirectory is picking up the default directory definition and failing as default schema is changed&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Mon, 01 Jul 2019 05:12:13 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/nuxeo-forum/configuring-keycloak-backend-db-which-is-postgresql-with-nuxeo/m-p/315687#M2688</guid>
      <dc:creator>Ravindra_Nalavd</dc:creator>
      <dc:date>2019-07-01T05:12:13Z</dc:date>
    </item>
  </channel>
</rss>

