Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Single sign-on, multiple domains on same server, ruby on rails

If I have a single server with multiple domains, what is the preferred method for implementing a single-sign-on solution on the same domain. I am currently using devise, have a few million cookies in place on separate domains, and am stuck. On top of just implementing SSO, I also need to migrate the various cookies to a central domain. Regarding the various servers, they only have one single page that requires me to show different states depending on whether or not the user is logged in.

I have tried the following:

  1. CORS: pick one domain as the central auth hub. From all other domains make cross domain checks to see if the user is logged in. For migrating cookies, detect if there's a "current_user" object, send it to the client, make a CORS request, sign the user in and kill the token. Works Great! BUT... After building it for 2-3 weeks, it TOTALLY FAILS in IE. Even IE11, I'm noticing the default setting is disabling this behavior.

  2. tried tinkering with the session store at

     Rails.application.config.session_store
    

with no luck.

I am currently experimenting with the following:

  1. JSONP: I have someone right now trying to convert the above to JSONP instead while I try some other options:

  2. Set up a custom OAUTH provider. Like before, it will be the "central domain" if the person is signed in, return to the requested domain with a token from which the users can make requests. https://github.com/songkick/oauth2-provider

  3. Looking at this but it looks outdated? https://github.com/rubycas/rubycas-client. I also get the feeling this could have been a solution if I rolled this out from the get-go, but given how far we are into the project, it's unclear to me how I'd transfer the existing cookies. Also it's unclear if this requires two applications for me to get up and running ( one for client(s), one for auth server)

As I go through each of these possibilities, if anyone has had any experience doing what I'm doing, please do inform me and save me a whole lot of work :)

like image 422
jdkealy Avatar asked Jun 22 '15 19:06

jdkealy


People also ask

Can a rails app support multiple subdomains?

In today's post, we'll learn how to build a Rails app that can support multiple subdomains. Let's assume that we have a gaming website funkygames.co and we want to support multiple subdomains such as app.funkygames.co, api.funkygames.co, and dev.funkygames.co with a single Rails application.

How to define routes for multiple subdomains in rails?

To define routes for multiple subdomains, we just have to add multiple constraints blocks in our routes.rb file. Rails routing provides request constraints and segment constraints. Segment constraints add rules on the request path whereas request constraints add conditions on the incoming request.

What is the latest version of Ruby on rails for tenants?

They represent a different approach to deal with numerous tenants, but the configuration phase is the same. Ruby’s latest version is 2.7.2 and 6.1 RC1 of Ruby on Rails gem as of writing this article. Make sure you have the right version of Ruby installed in your system and attempt to install the correct version of the framework:

How do I set the top level domain length in rails?

By default, Rails set the top-level domain length to 1, but we want to use localhost to set this setting to 0. We can do this by adding the following line to the file config/environments/development.rb: Now, it’s possible to assign any author to the article.


1 Answers

The best way unless this is a toy app is probably to set up an oauth provider.

We use Doorkeeper with Devise for this and it works great. It will be worth your time to set a little time aside to read through the documentation and watch a talk or two on youtube if you're not already familiar with the strategy but once you understand the core concepts its actually pretty simple to set up with the help of this gem.

There is a quick video run down on http://railscasts.com/episodes/353-oauth-with-doorkeeper

like image 93
Nick Avatar answered Nov 05 '22 06:11

Nick