[keycloak-dev] Refresh tokens no longer reusable
Marek Posolda
mposolda at redhat.com
Thu Oct 15 02:44:38 EDT 2015
On 15/10/15 06:36, Stian Thorgersen wrote:
> That was my initial idea as well, but then again it already works with
> our adapters, we already regenerate the tokens, so why not add this
> extra layer of defence? End of the day as refresh tokens can be stored
> on the client side how well they are secured can vary. If users want
> long sessions or even worse with offline tokens it makes sense to add
> this that enables users to at least notice something is going wrong.
> The issue is that you may not notice that a client has been
> compromised, but if all tokens stop working you will.
>
> I don't have an issue with setting it to true by default (so refresh
> tokens are reusable), but since our adapters already work and I can't
> see any big side effects of preventing refresh token reuse I set it to
> false by default.
As I said, I can see the side effect just for offline tokens, that
people will always need to write new offline token into their DB on
application side after each refresh.
Marek
>
> On 15 October 2015 at 01:27, Bill Burke <bburke at redhat.com
> <mailto:bburke at redhat.com>> wrote:
>
>
>
> On 10/14/2015 5:49 PM, Marek Posolda wrote:
> > On 14/10/15 20:24, Stian Thorgersen wrote:
> >> Refresh tokens are no longer reusable. This is done by setting the
> >> client sessions timestamp when a new refresh token is issued.
> If the
> >> refresh tokens iat value is less than the client sessions timestamp
> >> it's not permitted.
> >>
> >> If anyone has time I'd appreciate a review of the changes:
> >>
> <https://github.com/keycloak/keycloak/pull/1732>https://github.com/keycloak/keycloak/pull/1732
> >>
> >> For anyone that runs into issues with this policy there's an
> option to
> >> disable it in the admin console in the realms token settings.
> >>
> >> This does not apply to offline tokens (at least yet). We need
> to add
> >> it to offline tokens as well though as it's even more important for
> >> those. There's two problems with offline tokens though, firstly the
> >> setTimestamp is not permitted on offline client sessions.
> Secondly if
> >> we allow setting it we would have to persist it, unless someone can
> >> come up with something clever.
> refreshTokenReusable > I think we don't need to persist, but just
> save clientSession with
> > updated timestamp into infinispan/memory. Then during startup, the
> > timestamp of clientSessions will be updated to startup time
> similarly
> > like we have for lastSessionRefresh of user sessions. The
> refresh will
> > be allowed if (iat == clientSession.timestamp OR startupTime ==
> > clientSession.timestamp) . In other words, first refresh after
> server
> > restart will be always allowed.
> >
> > There is some chance that there can be same refresh token used two
> > times (if attacker will do second refresh after server restart). But
> > then clientSession timestamp will be updated and regular user
> won't be
> > allowed to refresh his token and will recognize error.
> >
> >
> > But question is, do we really want refreshTokenReusable to be
> disabled
> > by default? For offline tokens, people will often need to save the
> > offline token into their database on application side. With
> > refreshTokenReusable disabled, they will need to always write
> into their
> > DB and save new offline token after each refresh.
> >
>
> My own personal opinion is that we are making this fix to pass some
> random company's security audit that I don't particularly agree with.
> If a client has been compromised, then its offline tokens should be
> revoked and a revocation not-before policy should be pushed out.
> As it
> is, the only reason we need to regenerate the refresh token is to
> update
> its timestamp for idle checks.refreshTokenReusable
>
>
> --
> Bill Burke
> JBoss, a division of Red Hat
> http://bill.burkecentral.com
> _______________________________________________
> keycloak-dev mailing list
> keycloak-dev at lists.jboss.org <mailto:keycloak-dev at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/keycloak-dev
>
>
>
>
> _______________________________________________
> keycloak-dev mailing list
> keycloak-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/keycloak-dev/attachments/20151015/ac3dcd1f/attachment-0001.html
More information about the keycloak-dev
mailing list