<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 24 June 2016 at 16:08, Bruno Oliveira <span dir="ltr">&lt;<a href="mailto:bruno@abstractj.org" target="_blank">bruno@abstractj.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 2016-06-24, Stian Thorgersen wrote:<br>
&gt; On 24 June 2016 at 15:07, Bruno Oliveira &lt;<a href="mailto:bruno@abstractj.org">bruno@abstractj.org</a>&gt; wrote:<br>
&gt;<br>
&gt; &gt; On 2016-06-23, Bill Burke wrote:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; On 6/23/16 2:56 PM, Bruno Oliveira wrote:<br>
&gt; &gt; &gt; &gt; On 2016-06-23, Bill Burke wrote:<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; On 6/23/16 12:25 PM, John Dennis wrote:<br>
&gt; &gt; &gt; &gt; &gt; &gt; On 06/23/2016 10:00 AM, Bruno Oliveira wrote:<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Good morning,<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; One of the use case scenarios described for FreeIPA, is the<br>
&gt; &gt; integration via PAM<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; and SSSD, which &quot;automagically&quot; handles the authentication<br>
&gt; &gt; against the IdM.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; This first step requires pretty much an IPA setup, but<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; works with libpam4j[1]. Now, thinking about Keycloak, I<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; would like to have an Authenticator for PAM[2], which is pretty<br>
&gt; &gt; much our<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; UsernamePasswordForm + PAM. Does it make sense?<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Current flow:<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; * User logs into Web application with username/password<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; * PAM authenticator collects data and authenticate against PAM<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; * SSSD authenticates against IdM<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; * Authentication is complete<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; After the last step, should we propagate that user to our<br>
&gt; &gt; database?<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Maybe, like Marek already mentioned, have a<br>
&gt; &gt; SSSDFederationProvider?<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; [1] -<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; <a href="http://search.maven.org/#artifactdetails%7Corg.abstractj%7Clibpam4j%7C1.9.0%7Cjar" rel="noreferrer" target="_blank">http://search.maven.org/#artifactdetails%7Corg.abstractj%7Clibpam4j%7C1.9.0%7Cjar</a><br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; [2] -<br>
&gt; &gt; <a href="https://keycloak.gitbooks.io/server-developer-guide/content/topics/auth-spi.html" rel="noreferrer" target="_blank">https://keycloak.gitbooks.io/server-developer-guide/content/topics/auth-spi.html</a><br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; Simo brought up a concern after forwarding this to our internal<br>
&gt; &gt; identity<br>
&gt; &gt; &gt; &gt; &gt; &gt; team list. His comment is:<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;  &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;  &gt; Current flow:<br>
&gt; &gt; &gt; &gt; &gt; &gt;  &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;  &gt; * User logs into Web application with username/password<br>
&gt; &gt; &gt; &gt; &gt; &gt;  &gt; * PAM authenticator collects data and authenticate against PAM<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; I am worried about how these 2 steps are expressed, it seem to<br>
&gt; &gt; imply PAM<br>
&gt; &gt; &gt; &gt; &gt; &gt; is used only as a username/password verifier.<br>
&gt; &gt; &gt; &gt; &gt; &gt; There is no mention/awarness of PAM conversations where we can<br>
&gt; &gt; prompt<br>
&gt; &gt; &gt; &gt; &gt; &gt; for things like second factors or password changes.<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Ok, I&#39;ve spent maybe 20 seconds googling into what PAM conversations<br>
&gt; &gt; are<br>
&gt; &gt; &gt; &gt; &gt; &quot;PAM example conversation code&quot;.   You&#39;ll have to explain to me why<br>
&gt; &gt; PAM<br>
&gt; &gt; &gt; &gt; &gt; conversations have any relevance to web login.  Just looking at this<br>
&gt; &gt; &gt; &gt; &gt; example:<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; <a href="https://www.freebsd.org/doc/en_US.ISO8859-1/articles/pam/pam-sample-conv.html" rel="noreferrer" target="_blank">https://www.freebsd.org/doc/en_US.ISO8859-1/articles/pam/pam-sample-conv.html</a><br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; It looks as if PAM conversations are targeted to simple text logins<br>
&gt; &gt; &gt; &gt; &gt; (i.e. SSH, telnet, etc.).  Pushing and pulling text to and from stdin<br>
&gt; &gt; &gt; &gt; &gt; and stdout.  What does that have to do with web login?<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Your question is totally fair. And the reason why we have to integrate<br>
&gt; &gt; &gt; &gt; with PAM is pretty much because there&#39;s no DBus interface for SSSD<br>
&gt; &gt; &gt; &gt; to provide username/password. Otherwise we would just communicate<br>
&gt; &gt; &gt; &gt; directly with DBus and call it a day.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; This is solely to allow keycloak to update passwords?  Not really<br>
&gt; &gt; &gt; understanding here.<br>
&gt; &gt;<br>
&gt; &gt; Not really Bill, to give you more context. Login through PAM is just one<br>
&gt; &gt; of the scenarios described by Dmitri at slide #19[1].<br>
&gt; &gt;<br>
&gt; &gt; * User starts browser and connects to a resource<br>
&gt; &gt; * Resource redirects to Keycloak<br>
&gt; &gt; * User is presented with a login form<br>
&gt; &gt; * User fills username and password<br>
&gt; &gt; * User data is collected and passed to SSSD over D-Bus<br>
&gt; &gt;<br>
&gt; &gt; Here, we can&#39;t provide username/password to SSSD, because we don&#39;t have<br>
&gt; &gt; a DBus interface for it. So instead, we make use of PAM to make it happen.<br>
&gt; &gt;<br>
&gt;<br>
&gt; Isn&#39;t the flow actually:<br>
&gt;<br>
&gt; * User starts browser and connects to a resource<br>
&gt; * Resource redirects to Keycloak<br>
&gt; * User is presented with a login form<br>
&gt; * User fills username and password<br>
&gt; * Username and password is verified through PAM (in the future SSSD once<br>
&gt; that becomes available) - this should be a custom authenticator<br>
&gt; * User profile is retrieved from SSSD over D-Bus - this should be a custom<br>
&gt; user federation provider<br>
<br>
</div></div>That&#39;s correct, I just quoted the original slides for reference<br>
and added the notes (maybe was more confuse than helpful).<br>
<br>
After the retrieval of user&#39;s profile from SSSD. Should the data be propagated<br>
to Keycloak database? Should we validate such credentials on the next<br>
login?<br></blockquote><div><br></div><div>The user profile would currently be imported into Keycloak database as that&#39;s how user federation currently works. Bill is working on changing that though so user profile would not be imported in the future.</div><div><br></div><div>Not sure what you mean about validate such credentials - username/password would always be verified against PAM</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div class="h5"><br>
&gt; * Done<br>
&gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt; &gt; * SSSD authenticates against AD<br>
&gt; &gt; * Authentication complete (against FreeIPA)<br>
&gt; &gt;<br>
&gt; &gt; This is where I need some help to define what would be the best next<br>
&gt; &gt; step for us.<br>
&gt; &gt;<br>
&gt; &gt; * Assertion/token is issued<br>
&gt; &gt; * User is redirected to the resource<br>
&gt; &gt;<br>
&gt; &gt; In this scenario nothing is stored/updated on Keycloak.<br>
&gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; The goal is pretty much to be used for Basic Authentication.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; As for PAM itself, it looks like it is a library.  (again a 20 second<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; It&#39;s pretty much a low level authentication module to support multiple<br>
&gt; &gt; &gt; &gt; schemes like: login, ftp, ssh, telnet...(you certainly found it<br>
&gt; &gt; already)<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Google search).  What I don&#39;t know is where PAM ends and SSSD takes<br>
&gt; &gt; &gt; &gt; &gt; over.  So its hard to give you advice.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; This is how it happens from my understanding:<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; 1. We start the PAM conversation from our client application (a IPA<br>
&gt; &gt; client machine),<br>
&gt; &gt; &gt; &gt; pam_sss is contacted (SSSD)<br>
&gt; &gt; &gt; &gt; 2. SSSD&#39;s PAM responder receives the authentication request and<br>
&gt; &gt; forwards<br>
&gt; &gt; &gt; &gt; it to FreeIPA server<br>
&gt; &gt; &gt; &gt; 3. FreeIPA server process the request and returns the result back to<br>
&gt; &gt; PAM<br>
&gt; &gt; &gt; &gt; responder.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; The data flow is better described here (<br>
&gt; &gt; <a href="https://fedorahosted.org/sssd/wiki/InternalsDocs#a3.2.2.2.DataFlowPAMResponder" rel="noreferrer" target="_blank">https://fedorahosted.org/sssd/wiki/InternalsDocs#a3.2.2.2.DataFlowPAMResponder</a><br>
&gt; &gt; ).<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; It looks like a conversation requires some sort of session object or<br>
&gt; &gt; session<br>
&gt; &gt; &gt; connection.  Remember, a web login can span multiple requests and could<br>
&gt; &gt; &gt; possibly be serviced on different machines.  Sounds like any integration<br>
&gt; &gt; &gt; with PAM is going to be quite limited.  Maybe that&#39;s what you are getting<br>
&gt; &gt; &gt; at?<br>
&gt; &gt;<br>
&gt; &gt; I fully understand that, certainly something that requires more testing<br>
&gt; &gt; to see how SSSD will behave with PAM.<br>
&gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Or are you just talking about writing a client adapter and this has<br>
&gt; &gt; nothing<br>
&gt; &gt; &gt; to do with the Keycloak auth server?<br>
&gt; &gt;<br>
&gt; &gt; Good question. My initial naive idea was to have an authenticator SPI<br>
&gt; &gt; for PAM and benefit from the work already done by Marek with LDAP and<br>
&gt; &gt; Kerberos. Plus, have a federation SPI to retrieve user&#39;s data from SSSD<br>
&gt; &gt; and propagate it to Keycloak.<br>
&gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Also, where does the identity data come into play (aka LDAP info)?  Is<br>
&gt; &gt; this<br>
&gt; &gt; &gt; also a part of the PAM/SSSD flow?<br>
&gt; &gt;<br>
&gt; &gt; At the flow described here#17[2]:<br>
&gt; &gt;<br>
&gt; &gt; * User starts browser and connects to a resource<br>
&gt; &gt; * Resource redirects to Keycloak<br>
&gt; &gt; * User is presented with a login form<br>
&gt; &gt; * User fills username and password<br>
&gt; &gt; * User data is collected and passed to SSSD over D-Bus<br>
&gt; &gt; * SSSD authenticates against LDAP server<br>
&gt; &gt; * Authentication complete<br>
&gt; &gt; * Assertion/token is issued<br>
&gt; &gt; * User is redirected to the resource<br>
&gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Bill<br>
&gt; &gt;<br>
&gt; &gt; [1] -<br>
&gt; &gt; <a href="https://docs.google.com/presentation/d/1-WvQTQ1M0Q9kfRl3d7FVWFn9GLL7vn8sAQmXGv0SVcs/edit#slide=id.g113bf6b186_1_130" rel="noreferrer" target="_blank">https://docs.google.com/presentation/d/1-WvQTQ1M0Q9kfRl3d7FVWFn9GLL7vn8sAQmXGv0SVcs/edit#slide=id.g113bf6b186_1_130</a><br>
&gt; &gt; [2] -<br>
&gt; &gt; <a href="https://docs.google.com/presentation/d/1-WvQTQ1M0Q9kfRl3d7FVWFn9GLL7vn8sAQmXGv0SVcs/edit#slide=id.g113bf6b186_1_107" rel="noreferrer" target="_blank">https://docs.google.com/presentation/d/1-WvQTQ1M0Q9kfRl3d7FVWFn9GLL7vn8sAQmXGv0SVcs/edit#slide=id.g113bf6b186_1_107</a><br>
&gt; &gt; --<br>
&gt; &gt;<br>
&gt; &gt; abstractj<br>
&gt; &gt; PGP: 0x84DC9914<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; keycloak-dev mailing list<br>
&gt; &gt; <a href="mailto:keycloak-dev@lists.jboss.org">keycloak-dev@lists.jboss.org</a><br>
&gt; &gt; <a href="https://lists.jboss.org/mailman/listinfo/keycloak-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-dev</a><br>
&gt; &gt;<br>
<br>
</div></div>--<br>
<br>
abstractj<br>
PGP: 0x84DC9914<br>
</blockquote></div><br></div></div>