[keycloak-dev] sticky sessions

Bill Burke bburke at redhat.com
Wed Dec 2 10:39:22 EST 2015


Why would you need this KEYCLOAK_LB_SESSION cookie?  The loadbalancer 
handles all that automatically.

On 12/2/2015 10:31 AM, Marek Posolda wrote:
> Yes, so this might be another cookie. Like KEYCLOAK_LB_SESSION or
> something. It will be created during first browser HTTP request and
> doesn't need to have any valuable content, the only point is to use it
> by loadbalancer, so it can redirect to same node.
>
> Like this:
> - User will send request to Loadbalancer and loadbalancer forwards to
> Keycloak on node1
> - Keycloak returns HTTP Response with username+password form and
> KEYCLOAK_LB_SESSION cookie with any value (ie. "foo" )
> - Loadbalancer attaches the ID of node to cookie. So user will receive
> the response with cookie KEYCLOAK_LB_SESSION with value "foo.node1"
> - User confirms the form. Loadbalancer will forward to node1 because of
> cookie and the form is processed on node1. Similarly all other requests
> ( OTP etc)
>
> Just a quick though, hope I am not missing something obvious :)
>
> But for code2token, we don't have good way to enforce it on "node1" as
> it's out-of-bound request and won't see any cookie set by browser.
> That's what we discussed couple of times as you mentioned.
>
> Marek
>
> On 02/12/15 16:14, Stian Thorgersen wrote:
>> We already have KEYCLOAK_SESSION, but that's not created until the
>> user is authenticated
>>
>> On 2 December 2015 at 16:05, Marek Posolda <mposolda at redhat.com
>> <mailto:mposolda at redhat.com>> wrote:
>>
>>     On 02/12/15 16:01, Stian Thorgersen wrote:
>>>
>>>
>>>     On 2 December 2015 at 15:58, Marek Posolda
>>>     <<mailto:mposolda at redhat.com>mposolda at redhat.com> wrote:
>>>
>>>         btv. we actually have some optimization
>>>         "auth-server-url-for-backend-requests" on adapter side. This
>>>         is useful if application and Keycloak are both running on
>>>         same network and using same cluster nodes. In this case,
>>>         application can send all backend (out-of-bound) requests like
>>>         code2token, refreshToken, to Keycloak auth-server on same
>>>         cluster node.
>>>
>>>         For example if there is cluster with nodes "node1" and
>>>         "node2" and application request is processed on "node1", it
>>>         will also use "node1" to directly access Keycloak for
>>>         out-of-bound requests. So as long as there is sticky session
>>>         on application side, it will defacto result in sticky session
>>>         for application too.
>>>
>>>         Not sure if we need to optimize too much for login. Isn't
>>>         refresh token used much more often than login?
>>>
>>>
>>>     If login is multiple requests (username + password, then otp)
>>>     then a round robin load balancer would quite likely send the
>>>     rquests to different nodes.
>>     AFAIK most of loadbalancers are able to understand the cookie
>>     (like JSESSIONID ). So if we add the cookie with the node, the
>>     loadbalancer will always redirect to same cluster node.
>>
>>     Marek
>>
>>
>>>
>>>
>>>         Marek
>>>
>>>
>>>
>>>         On 02/12/15 15:50, Marek Posolda wrote:
>>>>         Not sure if callback URI will work, because application may be able to
>>>>         see just the loadbalancer node and underlying cluster nodes might be
>>>>         hidden from it.
>>>>
>>>>         For example if you have callback URI like
>>>>         http://node1:8080/auth/.../token, application may not be able to
>>>>         directly access host "node1" because it's hidden and application can
>>>>         access justhttp://loadbalancer:8080  .
>>>>
>>>>         Marek
>>>>
>>>>         On 02/12/15 15:34, Bill Burke wrote:
>>>>>         IMO, we need to highlight and document that when using a load balancer
>>>>>         in a cluster, sticky sessions should be enabled.  We might even want to
>>>>>         consider adding support for sticky sessions for the code2token flow.
>>>>>         The obvious reason is performance.  Login can span multiple HTTP
>>>>>         requests.  If you have N nodes in the cluster with no clustering you
>>>>>         have the possibility of the same user being retrieved from the database
>>>>>         N times.  One time for each authentication request (username/password,
>>>>>         OTP page, required actions) and finally for the code 2 token request.
>>>>>         Until I look into fixing it the auth SPI does a few extra redirects
>>>>>         right now too.
>>>>>
>>>>>         Code 2 token could simply have a callback URI so that the code 2 token
>>>>>         request hits the same machine the code was created on.
>>>>>
>>>>>
>>>>>
>>>>         _______________________________________________
>>>>         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
>>>         <mailto:keycloak-dev at lists.jboss.org>
>>>         https://lists.jboss.org/mailman/listinfo/keycloak-dev
>>>
>>>
>>
>>
>

-- 
Bill Burke
JBoss, a division of Red Hat
http://bill.burkecentral.com


More information about the keycloak-dev mailing list