<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Title" content="">
<meta name="Keywords" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Courier New";
        panose-1:2 7 3 9 2 2 5 2 4 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Monaco;
        panose-1:2 0 5 0 0 0 0 0 0 0;}
@font-face
        {font-family:Menlo;
        panose-1:2 11 6 9 3 8 4 2 2 4;}
@font-face
        {font-family:"Helvetica Neue \;color\:\#262626 ";}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:Calibri;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Courier;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:Calibri;
        color:windowtext;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:Calibri;
        color:windowtext;}
span.EmailStyle22
        {mso-style-type:personal-reply;
        font-family:Calibri;
        color:windowtext;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body bgcolor="white" lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:16.0pt">Marek,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:16.0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:16.0pt">It worked for me. <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:16.0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:16.0pt">Thank you very much!<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;color:black">--&nbsp;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;color:black">Zhaohua Meng<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;color:black">Business Intelligence, AppNexus<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="font-size:16.0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:16.0pt"><o:p>&nbsp;</o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="color:black">From: </span></b><span style="color:black">&lt;keycloak-user-bounces@lists.jboss.org&gt; on behalf of Bill Burke &lt;bburke@redhat.com&gt;<br>
<b>Date: </b>Monday, August 1, 2016 at 3:08 PM<br>
<b>To: </b>&quot;keycloak-user@lists.jboss.org&quot; &lt;keycloak-user@lists.jboss.org&gt;<br>
<b>Subject: </b>Re: [keycloak-user] How to configure a user Federation SPI implementation<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:&quot;Times New Roman&quot;,&quot;serif&quot;"><o:p>&nbsp;</o:p></span></p>
</div>
<div>
<div>
<pre style="background:white"><b><span style="font-size:9.0pt;font-family:Menlo;color:green">&quot;userFederation&quot; : {<o:p></o:p></span></b></pre>
<pre style="background:white"><b><span style="font-size:9.0pt;font-family:Menlo;color:green">&nbsp;&nbsp;&nbsp; &quot;IDP-API&quot; : {<o:p></o:p></span></b></pre>
<pre style="background:white"><b><span style="font-size:9.0pt;font-family:Menlo;color:green">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;test&quot;: &quot;value<o:p></o:p></span></b></pre>
<pre style="background:white"><b><span style="font-size:9.0pt;font-family:Menlo;color:green">&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></b></pre>
<pre style="background:white"><b><span style="font-size:9.0pt;font-family:Menlo;color:green">}<o:p></o:p></span></b></pre>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<p class="MsoNormal">On 8/1/16 2:56 PM, Zhaohua Meng wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span style="font-size:16.0pt">Marek,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:16.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:16.0pt">My implementation id is “IDP-API” and my getId() and init() method are following:</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco;color:black">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco;color:black">&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style="font-family:Monaco;color:#646464">@Override</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco;color:black">&nbsp;&nbsp;&nbsp;&nbsp;
</span><b><span style="font-family:Monaco;color:#7F0055">public</span></b><span style="font-family:Monaco;color:black">
<span style="background:silver;mso-highlight:silver">String</span> getId() { </span>
<o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><b><span style="font-family:Monaco;color:#7F0055;background:silver;mso-highlight:silver">return</span></b><span style="font-family:Monaco;color:black;background:silver;mso-highlight:silver">
</span><span style="font-family:Monaco;color:black">(</span><span style="font-family:Monaco;color:#2A00FF">&quot;IDP-API&quot;)</span><span style="font-family:Monaco;color:black">;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco;color:black">&nbsp;&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:16.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco;color:black">&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style="font-family:Monaco;color:#646464">@Override</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco;color:black">&nbsp;&nbsp;&nbsp;&nbsp;
</span><b><span style="font-family:Monaco;color:#7F0055">public</span></b><span style="font-family:Monaco;color:black">
</span><b><span style="font-family:Monaco;color:#7F0055">void</span></b><span style="font-family:Monaco;color:black"> init(Scope
</span><span style="font-family:Monaco;color:#6A3E3E">config</span><span style="font-family:Monaco;color:black">) {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style="font-family:Monaco;color:#0000C0">logger</span><span style="font-family:Monaco;color:black">.info(</span><span style="font-family:Monaco;color:#2A00FF">&quot;in init&quot;</span><span style="font-family:Monaco;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.config = config;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style="font-family:Monaco;color:#0000C0">logger</span><span style="font-family:Monaco;color:black">.infof(</span><span style="font-family:Monaco;color:#2A00FF">&quot;config: %s&quot;</span><span style="font-family:Monaco;color:black">,</span><span style="font-family:Monaco;color:#6A3E3E">config</span><span style="font-family:Monaco;color:black">.get(</span><span style="font-family:Monaco;color:#2A00FF">&quot;test&quot;</span><span style="font-family:Monaco;color:black">));</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco;color:black">&nbsp;&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:16.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:16.0pt">I’m getting null for the </span>
<span style="font-family:Monaco;color:#6A3E3E">config</span><span style="font-family:Monaco;color:black">.get(</span><span style="font-family:Monaco;color:#2A00FF">&quot;test&quot;</span><span style="font-family:Monaco;color:black">). What am I doing wrong here?</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:16.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:16.0pt">I’m copying the keycloak-server.json in my test for your reference.
</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:16.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">{</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp; &quot;IDP-API&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;test&quot;: &quot;<u><span style="color:black">idp</span></u>
<u><span style="color:black">api</span></u> test value&quot;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;providers&quot;: [</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;<u><span style="color:black">classpath</span></u>:${jboss.home.dir}/providers/*&quot;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; ],</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;<u><span style="color:black">admin</span></u>&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;realm&quot;: &quot;master&quot;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;eventsStore&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;provider&quot;: &quot;<u><span style="color:black">jpa</span></u>&quot;,</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;<u><span style="color:black">jpa</span></u>&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;exclude-events&quot;: [ &quot;REFRESH_TOKEN&quot; ]</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;realm&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;provider&quot;: &quot;<u><span style="color:black">jpa</span></u>&quot;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;user&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;provider&quot;: &quot;<u><span style="color:black">jpa</span></u>&quot;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;userCache&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;default&quot; : {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;enabled&quot;: true</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;userSessionPersister&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;provider&quot;: &quot;<u><span style="color:black">jpa</span></u>&quot;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;authorizationPersister&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;provider&quot;: &quot;<u><span style="color:black">jpa</span></u>&quot;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;timer&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;provider&quot;: &quot;basic&quot;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;theme&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;staticMaxAge&quot;: 2592000,</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;cacheTemplates&quot;: true,</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;cacheThemes&quot;: true,</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;folder&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;<u><span style="color:black">dir</span></u>&quot;: &quot;${jboss.home.dir}/themes&quot;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;scheduled&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;interval&quot;: 900</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;connectionsHttpClient&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;default&quot;: {}</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;connectionsJpa&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;default&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dataSource&quot;: &quot;java:jboss/<u><span style="color:black">datasources</span></u>/KeycloakDS&quot;,</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;databaseSchema&quot;: &quot;update&quot;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;realmCache&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;default&quot; : {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;enabled&quot;: true</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; },</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; &quot;connectionsInfinispan&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;provider&quot;: &quot;default&quot;,</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;default&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;cacheContainer&quot; : &quot;java:comp/<u><span style="color:black">env</span></u>/<u><span style="color:black">infinispan</span></u>/<u><span style="color:black">Keycloak</span></u>&quot;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:Monaco">&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:Monaco">}</span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;color:black">Thanks,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.5pt;color:black">--&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.5pt;color:black">Zhaohua Meng</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.5pt;color:black">Business Intelligence, AppNexus</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="font-size:16.0pt">&nbsp;</span><o:p></o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="color:black">From: </span></b><span style="color:black">Marek Posolda
<a href="mailto:mposolda@redhat.com">&lt;mposolda@redhat.com&gt;</a><br>
<b>Date: </b>Monday, August 1, 2016 at 1:32 PM<br>
<b>To: </b>Zaohua <a href="mailto:zmeng@appnexus.com">&lt;zmeng@appnexus.com&gt;</a>, <a href="mailto:keycloak-user@lists.jboss.org">
&quot;keycloak-user@lists.jboss.org&quot;</a> <a href="mailto:keycloak-user@lists.jboss.org">
&lt;keycloak-user@lists.jboss.org&gt;</a><br>
<b>Subject: </b>Re: [keycloak-user] How to configure a user Federation SPI implementation</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:&quot;Times New Roman&quot;,&quot;serif&quot;">&nbsp;</span><o:p></o:p></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal">In YourUserFederationProviderFactory.init you can read the properties, which you configured in the keycloak-server.json. It's used in the event example for instance. For UserFederation it works the same way :
<a href="https://github.com/keycloak/keycloak/blob/master/examples/providers/event-store-mem/src/main/java/org/keycloak/examples/providers/events/MemEventStoreProviderFactory.java#L56">
https://github.com/keycloak/keycloak/blob/master/examples/providers/event-store-mem/src/main/java/org/keycloak/examples/providers/events/MemEventStoreProviderFactory.java#L56</a>
<br>
<br>
Note that YourUserFederationProviderFactory.getId is corresponding to the providerId used in keycloak-server.json .
<br>
<br>
Btv. the YourUserFederationProviderFactory.getConfigurationOptions() you can return list of strings, which will be used as names of the properties configurable in admin console. This is an alternative to keycloak-server.json configuration. See the userFederation
 example for more details.<br>
<br>
Marek<br>
<br>
On 01/08/16 19:23, Zhaohua Meng wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">I wrote a user federation SPI implementation to integrate our internal user management. Particularly, an implementation of org.keycloak.models.UserFederationProviderFactory and
 org.keycloak.models.UserFederationProvider.</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">My question is, how do you configure it in the
</span><span style="font-size:14.0pt;font-family:&quot;Helvetica Neue \;color\:\#262626 &quot;">keycloak-server.json</span><span style="font-size:14.0pt">?</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">The documentation gave example for event listener but not user federation. Following the doc with similar approach I tried “{ “userFederation”: { “my-impl”: { “myProperty”:””, ...}
 …}}”, and all kinds of combinations like that but nothing worked. I’d really appreciate if you can share some experience here.</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">I’m quoting the doc in this regard here:
<a href="https://keycloak.gitbooks.io/server-developer-guide/content/v/2.0/topics/providers.html#providers">
<span style="color:#0B4CB4">https://keycloak.gitbooks.io/server-developer-guide/content/v/2.0/topics/providers.html#providers</span></a></span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">...…</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">Configuring a provider</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">You can pass configuration options to your provider by setting them in keycloak-server.json. For example to set the max value for my-event-listener add:</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">{</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">&nbsp;&nbsp;&nbsp; &quot;eventsListener&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;my-event-listener&quot;: {</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;max&quot;: 100</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">}</span><o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:14.0pt">…..</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:21.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:16.0pt">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.5pt;color:black">Thanks,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.5pt;color:black">--&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.5pt;color:black">Zhaohua Meng</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.5pt;color:black">Business Intelligence, AppNexus</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:&quot;Times New Roman&quot;,&quot;serif&quot;"><br>
<br>
<br>
<br>
</span><o:p></o:p></p>
<pre>_______________________________________________<o:p></o:p></pre>
<pre>keycloak-user mailing list<o:p></o:p></pre>
<pre><a href="mailto:keycloak-user@lists.jboss.org">keycloak-user@lists.jboss.org</a><o:p></o:p></pre>
<pre><a href="https://lists.jboss.org/mailman/listinfo/keycloak-user">https://lists.jboss.org/mailman/listinfo/keycloak-user</a><o:p></o:p></pre>
</blockquote>
<p class="MsoNormal"><span style="font-family:&quot;Times New Roman&quot;,&quot;serif&quot;">&nbsp;</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><span style="font-family:&quot;Times New Roman&quot;,&quot;serif&quot;"><br>
<br>
<br>
<o:p></o:p></span></p>
<pre>_______________________________________________<o:p></o:p></pre>
<pre>keycloak-user mailing list<o:p></o:p></pre>
<pre><a href="mailto:keycloak-user@lists.jboss.org">keycloak-user@lists.jboss.org</a><o:p></o:p></pre>
<pre><a href="https://lists.jboss.org/mailman/listinfo/keycloak-user">https://lists.jboss.org/mailman/listinfo/keycloak-user</a><o:p></o:p></pre>
</blockquote>
<p class="MsoNormal"><span style="font-family:&quot;Times New Roman&quot;,&quot;serif&quot;"><o:p>&nbsp;</o:p></span></p>
</div>
</div>
</div>
</body>
</html>