Hi Chris,

Don't know much about Event MPM or COMETD/WebSockets, so I can't help
you there.
We configured the loadbalancers and SSO-gateways so that when Rave
communicates with Shindig on a server-to-server basis, they do so by
external hostname (not localhost, but the hostname the browser uses
also) and the loadbalancers and SSO-gateways make sure the requests end
up on the same cluster node the request was issued from, and the right
sso-headers are injected. All this is done without SSL, because
communication between these machines is on a private LAN.

The failover between cluster nodes is very straight-forward. The
SSO-gateway makes sure a user is authenticated again against a new
cluster-node, in case a cluster-node fails. So we don't distribute
sessions or anything. No JSESSIONID issues so far.

I agree that for a basic setup a reverse proxy is not ideal. However, in
most cases you will want to set up a redundant / clustered environment
so we'll need some kind of loadbalancing mechanism in front of multiple
cluster-nodes, which mainly is just a smarter version of a reverse
proxy. Doing SSO at the same time, like we do, introduces another proxy
(depending on your SSO setup). For a testing or developing environment
all this is not needed, but Rave works fine without, but not as secure
as you would want a production environment to work.

Dennis

On 12-10-2012 17:48, Chris Geer wrote:
> Jasha & Dennis,
>
> Thanks for the response. That is exactly what I'm doing today (just using
> HTTPD auth instead of Shib). My major concern with the current approach is
> we are using COMETD/WebSockets which don't scale well through HTTPD so I
> was hoping to replace it with something like nginx but that would require
> me to do the authentication at the app server level (I think). I also need
> to test the Apache event MPM and see how that performs. The major downside
> of the Event MPM is that it doesn't support SSL but I think I can get a
> load balancer that will do SSL offloading prior to apache. I believe I
> updated the SSO plugin to support Rave 0.14 a while back. I'll give it
> another bump here soon.
>
> Even doing authentication at the proxy isn't 100% ideal because any cross
> server calls won't have that special header unless we introduce it
> manually. From a Rave perspective we probably need to think about this a
> little more since I'm not sure our default answer to security would be "run
> behind a reverse proxy".
>
> How did you guys solve the clustering problem so that users could failover
> between Rave instances? Or do you just re-establish the session on each new
> box individually? Doesn't that cause an issue with JSESSIONID?
>
> Thanks,
> Chris
>
> On Fri, Oct 12, 2012 at 8:37 AM, Dennis van der Laan <
> [email protected]> wrote:
>
>> Hi Chris,
>>
>> Here at the University of Groningen, we're using the setup as Jasha
>> describes, in a production environment (currently for about 4500
>> employees and 9000 students and still growing every day). We're using a
>> loadbalancer (redundant) to balance over multiple Rave instances (which
>> use the same Oracle11 database), through an "SSO-enabled gateway" which
>> adds the request headers Jasha mentioned. The loadbalancer filters these
>> headers, so nobody 'outside' the loadbalancer -> Rave network can add
>> fake headers.
>>
>> Because Shindig is behind the loadbalancer and SSO-gateway, every host
>> connecting to Shindig will have to be authenticated too, as long as you
>> configure the SSO-gateway in that way.
>>
>> The Rave SSO extension Jasha wrote is used by us, but we had to updated
>> the code to match Rave 0.12, the version we are currently using. Newer
>> versions of Rave might need more work. We are still developing and on a
>> tight schedule, but are planning to give back any enhancements we made
>> back to the community.
>> For the Rave SSO extension you might just use Jasha's version and update
>> it to the Rave version you are currently using, or I could send you our
>> version.
>>
>> Best regards,
>> Dennis
>>
>> On 12-10-2012 11:19, Jasha Joachimsthal wrote:
>>> Hi Chris,
>>>
>>> I don't have real production experience, but have done setup of Rave on a
>>> server a few times. The Tomcats that contain Rave and Shindig were not
>>> directly accessible. The visitor could only access HTTPD, that request
>> was
>>> proxied via Shibboleth to Tomcat. Shibboleth adds a request header with
>> the
>>> user name. At the time I wrote the Rave SSO extension [1] to pick up this
>>> header in Spring security and provision the user. It's probably a bit
>>> outdated since the splitup of the Rave models. Important is that the
>> header
>>> that is used to for the authentication should be filtered in HTTPD if
>>> someone would try to set it manually on the request.
>>> In this setup Shindig doesn't check authentication, but you can only
>> reach
>>> Shindig when you are already logged in. Now there was an issue with the
>>> "internal" calls from Rave to Shindig for the metadata. Rave uses a
>> single
>>> host property for both the Javascript and the "internal" metadata calls
>> to
>>> Shindig. We allowed traffic from the portal host to Shindig to bypass the
>>> authentication in the load balancer. It would be cleaner to have the
>> option
>>> to set a different host for the metadata calls so the portal can directly
>>> access Shindig.
>>>
>>> [1] http://rave.apache.org/documentation/sso-login.html
>>>
>>> Jasha
>>>
>>> On 12 October 2012 00:45, Chris Geer <[email protected]> wrote:
>>>
>>>> I've been looking at coming up with a good production deployment
>> strategy
>>>> and was curious if someone had already solved some of the same things
>> I've
>>>> been running into.
>>>>
>>>>    1. Shindig allowUnauthenticated: right now Shindig is set to to not
>>>>    authenticate requests. When I try and set that variable to false
>> (tell
>>>>    Shindig to authenticate requests) every request to a page gives me
>> this:
>>>>    "WARN : org.springframework.web.client.RestTemplate - POST request
>> for "
>>>>    http://localhost:8080/rpc"; resulted in 401 (Unauthorized); invoking
>>>>    error handler". This issue caused because the Rave server is making a
>>>>    request directly to the Shindig server (two separate web apps)
>>>>    in ShindigGadgetMetadataRepository and isn't passing any credentials.
>>>> Has
>>>>    anyone found a way to resolve this? I also suspect that once the
>> first
>>>>    problem is resolved there will be another problem because the browser
>>>>    (container) will be making requests to Shindig as well which would
>> need
>>>> to
>>>>    be authenticated.
>>>>       1. Potential Solution #1 - Combine Rave/Shindig into single web
>> app
>>>>       so that once authenticated to Rave you are also authenticated to
>>>> Shindig.
>>>>       2. Potential Solution #2 - Have Shindig and Rave use the same
>>>>       authentication technology and share session state between the two
>>>> apps.
>>>>       (Shindig uses Shiro currently kind-of...benefit is shiro has great
>>>>       distributed session management which can be used for SSO)
>>>>    2. High Availability: Does anyone have a good solution to be able to
>> use
>>>>    Rave in a failover scenario? At the very least we need to be able to
>>>> share
>>>>    security session information between Rave nodes so that if a server
>> goes
>>>>    down people don't have to log in again. I suppose the default option
>> is
>>>> to
>>>>    use Tomcat replication but it's not my first choice.
>>>>    3. SSO: Our solution uses Rave running on Tomcat but then a lot of
>> our
>>>>    gadgets call out directly to web services that we also host running
>> on
>>>>    Apache ServiceMix. I've got a poor mans SSO right now with an Apache
>>>> HTTPD
>>>>    reverse proxy but it's not a great long term solution. My first
>> approach
>>>>    was going to use Apache Shiro but there doesn't seem like there is a
>>>> good
>>>>    way to use Shiro in Rave since it's based on Spring Security. I've
>> also
>>>>    considered using a CAS server for the SSO part but wasn't sure how
>> that
>>>>    would work out. Has anyone done something similar?
>>>>
>>>> Thanks,
>>>> Chris
>>>>
>>
>> --
>> Dennis van der Laan
>>
>>


-- 
Dennis van der Laan

Reply via email to