<div dir="ltr">I guess at least the re-auth part is logic that belongs in the client that performs the login.<div><br></div><div>Question though for authentication levels as well as authentication timeout (or whatever you call it) shouldn&#39;t a rest service be able to say things like I require the user to have authenticated with password + otp, and to have authenticated within N minutes?</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 27 November 2015 at 16:13, Bill Burke <span dir="ltr">&lt;<a href="mailto:bburke@redhat.com" target="_blank">bburke@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Why would you need re-auth for REST or even browser clients?  Doesn&#39;t<br>
access token and refresh token timeouts handle this sort of thing?<br>
<span class=""><br>
On 11/27/2015 7:25 AM, Stian Thorgersen wrote:<br>
&gt; Hmm.. re-auth request for rest endpoints is even more tricky. I think a<br>
&gt; rest endpoint would just have to return a 401? Then it&#39;s up to the<br>
&gt; client to figure out that it needs to re-authenticate.<br>
&gt;<br>
&gt; On 27 November 2015 at 13:22, Vlastimil Elias &lt;<a href="mailto:velias@redhat.com">velias@redhat.com</a><br>
</span><span class="">&gt; &lt;mailto:<a href="mailto:velias@redhat.com">velias@redhat.com</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;     On 27.11.2015 12:28, Stian Thorgersen wrote:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;     On 27 November 2015 at 12:16, Vlastimil Elias<br>
</span>&gt;&gt;     &lt;&lt;mailto:<a href="mailto:velias@redhat.com">velias@redhat.com</a>&gt;<a href="mailto:velias@redhat.com">velias@redhat.com</a><br>
<span class="">&gt;&gt;     &lt;mailto:<a href="mailto:velias@redhat.com">velias@redhat.com</a>&gt;&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;         Hi,<br>
&gt;&gt;<br>
&gt;&gt;         On 27.11.2015 11:45, Stian Thorgersen wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;         On 27 November 2015 at 10:23, Vlastimil Elias<br>
</span>&gt;&gt;&gt;         &lt;&lt;mailto:<a href="mailto:velias@redhat.com">velias@redhat.com</a>&gt;<a href="mailto:velias@redhat.com">velias@redhat.com</a><br>
<div><div class="h5">&gt;&gt;&gt;         &lt;mailto:<a href="mailto:velias@redhat.com">velias@redhat.com</a>&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             Hi,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             I have two proposals for cleanup of &#39;Change password&#39;<br>
&gt;&gt;&gt;             screen in Account<br>
&gt;&gt;&gt;             app based on my experience with it:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             1. remove Cancel button - it has no any meaning on this<br>
&gt;&gt;&gt;             screen/form, it<br>
&gt;&gt;&gt;             only reshowns form with empty fields. And also there is a<br>
&gt;&gt;&gt;             bug,<br>
&gt;&gt;&gt;             &quot;Password&quot; field is hidden when it is used, which makes<br>
&gt;&gt;&gt;             whole form unusable.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;         +1<br>
&gt;&gt;<br>
&gt;&gt;         OK, I&#39;m going to create JIRA and provide PR for this.<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             2. remove validation of current password (remove<br>
&gt;&gt;&gt;             &quot;Password&quot; field). Two<br>
&gt;&gt;&gt;             reasons for this:<br>
&gt;&gt;&gt;                - security impact of this check is small. If attacker<br>
&gt;&gt;&gt;             is able to<br>
&gt;&gt;&gt;             compromise Account app then he can always change email<br>
&gt;&gt;&gt;             and then use<br>
&gt;&gt;&gt;             &quot;Forgot password&quot; feature to change password<br>
&gt;&gt;&gt;                - user created over Identity Provider do not know old<br>
&gt;&gt;&gt;             password<br>
&gt;&gt;&gt;             (because it is not set) so he is not able to set password<br>
&gt;&gt;&gt;             using this screen<br>
&gt;&gt;&gt;             After we implement support for reauthentication<br>
&gt;&gt;&gt;             (KEYCLOAK-2076) then we<br>
&gt;&gt;&gt;             should set some reasonable reauth timeout for Account app<br>
&gt;&gt;&gt;             instead, this<br>
&gt;&gt;&gt;             will make it more secure at all.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;         -1 Reset password over email may not be enabled at all. We<br>
&gt;&gt;&gt;         already allow setting password for IdPs login without<br>
&gt;&gt;&gt;         requiring the existing password.<br>
&gt;&gt;         Fair enough<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;         +1 To suggestion from Thomas - we should ask for password<br>
&gt;&gt;&gt;         when updating email at least when recover password over email<br>
&gt;&gt;&gt;         is enabled.<br>
&gt;&gt;<br>
&gt;&gt;         Makes sense, but what to do if user has no password set at<br>
&gt;&gt;         this point? Don&#39;t ask him, or reauthenticate him by other<br>
&gt;&gt;         available mechanism?<br>
&gt;&gt;<br>
&gt;&gt;         And there are also other &quot;dangerous&quot; operations in Account<br>
&gt;&gt;         app. Eg. attacker who gains access to it can disable OTP<br>
&gt;&gt;         without any recheck. This should be protected too.<br>
&gt;&gt;         I believe whole Account app should be correctly protected by<br>
&gt;&gt;         reauthentications. Question is if implement it somehow<br>
&gt;&gt;         specifically in the app, or resolve this generally as part of<br>
&gt;&gt;         KEYCLOAK-2076.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;     Yep, you&#39;re right there&#39;s other dangerous operations as well.<br>
&gt;&gt;     Re-authentication sounds like the correct approach, rather than<br>
&gt;&gt;     requesting the password again. We could have two configurable<br>
&gt;&gt;     timeouts in account management console. One that requires re-auth<br>
&gt;&gt;     for anything (~30 min default), and another that requires re-auth<br>
&gt;&gt;     for sensitive operations (~5 min).<br>
&gt;&gt;<br>
&gt;&gt;     One thing with re-auth is that if it happens when a user submits a<br>
&gt;&gt;     form, you then someone have to also remember the values of the<br>
&gt;&gt;     form. Currently account management is stateless.<br>
&gt;<br>
&gt;     Yep, implementing reauthentication schemes correctly in client apps<br>
&gt;     may be tricky, mainly for POST requests (and even worse posts with<br>
&gt;     file upload) and AJAX call handlers etc.<br>
&gt;     Beside Keycloak Account app we should try to provide reasonable<br>
&gt;     support in Keycloak adapters, but it may be tricky as related Java<br>
&gt;     EE specifications (JAAS subsystems, auth related things in Java<br>
&gt;     Servlet and EJB spec ) do not count with these more complicated<br>
&gt;     schemes too much.<br>
&gt;<br>
&gt;     And I also thought if reauthentication scheme should be somehow<br>
&gt;     implemented on REST API levels also.<br>
&gt;     Eg. some REST endpoint operation will define that it needs reauth<br>
&gt;     with some timeout. If client app call it with Bearer token then it<br>
&gt;     should be able to tests last auth timestamp (which should be<br>
&gt;     possible as it may be in the token as claim) and propagate back info<br>
&gt;     that it needs reauth (how to map this to HTTP?). Support for this<br>
&gt;     should be added to the framework like RestEasy then.<br>
&gt;<br>
&gt;     Vl.<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;         Vlastimil<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;         It seems to be common practice to ask for current password<br>
&gt;&gt;&gt;         when updating the existing password.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             If you agree then I can create JIRA issue for this and<br>
&gt;&gt;&gt;             provide PR.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             Vlastimil<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             --<br>
&gt;&gt;&gt;             Vlastimil Elias<br>
&gt;&gt;&gt;             Principal Software Engineer<br>
&gt;&gt;&gt;             Developer Portal Engineering Team<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             _______________________________________________<br>
&gt;&gt;&gt;             keycloak-dev mailing list<br>
&gt;&gt;&gt;             <a href="mailto:keycloak-dev@lists.jboss.org">keycloak-dev@lists.jboss.org</a><br>
</div></div>&gt;&gt;&gt;             &lt;mailto:<a href="mailto:keycloak-dev@lists.jboss.org">keycloak-dev@lists.jboss.org</a>&gt;<br>
<span class="im HOEnZb">&gt;&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;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;         --<br>
&gt;&gt;         Vlastimil Elias<br>
&gt;&gt;         Principal Software Engineer<br>
&gt;&gt;         Developer Portal Engineering Team<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;     --<br>
&gt;     Vlastimil Elias<br>
&gt;     Principal Software Engineer<br>
&gt;     Developer Portal Engineering Team<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; keycloak-dev mailing list<br>
&gt; <a href="mailto:keycloak-dev@lists.jboss.org">keycloak-dev@lists.jboss.org</a><br>
&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;<br>
<br>
--<br>
</span><span class="HOEnZb"><font color="#888888">Bill Burke<br>
JBoss, a division of Red Hat<br>
<a href="http://bill.burkecentral.com" rel="noreferrer" target="_blank">http://bill.burkecentral.com</a><br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
keycloak-dev mailing list<br>
<a href="mailto:keycloak-dev@lists.jboss.org">keycloak-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/keycloak-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-dev</a><br>
</div></div></blockquote></div><br></div>