---
layout: default
navsection: installguide
title: Install Single Sign On (SSO) server
...
h2(#dependencies). Install dependencies
The Arvados package repository includes SSO server package that can help automate much of the deployment.
h3(#install_ruby_and_bundler). Install Ruby and Bundler
{% include 'install_ruby_and_bundler' %}
h3(#install_web_server). Set up a Web server
For best performance, we recommend you use Nginx as your Web server frontend with a Passenger backend to serve the SSO server. The Passenger team provides "Nginx + Passenger installation instructions":https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/ownserver/nginx/oss/install_passenger_main.html.
Follow the instructions until you see the section that says you are ready to deploy your Ruby application on the production server.
h2(#install). Install the SSO server
On a Debian-based system, install the following package:
~$ sudo apt-get install arvados-sso-server
~$ sudo yum install arvados-sso-server
/etc/arvados/sso/application.yml
/etc/arvados/sso/database.yml
/etc/arvados/sso/production.rb
~$ ruby -e 'puts "#{rand(2**64).to_s(36)[0,5]}"'
abcde
~$ ruby -e 'puts rand(2**400).to_s(36)'
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
~$ sudo service postgresql start
~$ sudo service postgresql initdb
~$ sudo service postgresql start
~$ sudo sed -i -e "s/127.0.0.1\/32 ident/127.0.0.1\/32 md5/" /var/lib/pgsql/data/pg_hba.conf
~$ sudo sed -i -e "s/::1\/128 ident/::1\/128 md5/" /var/lib/pgsql/data/pg_hba.conf
~$ sudo service postgresql restart
~$ ruby -e 'puts rand(2**128).to_s(36)'
abcdefghijklmnopqrstuvwxyz012345689
~$ edit /etc/arvados/sso/database.yml
~$ sudo -u postgres createuser --createdb --encrypted -R -S --pwprompt arvados_sso
Enter password for new role: paste-database-password-you-generated
Enter it again: paste-database-password-you-generated
~$ sudo -u postgres createuser --encrypted -R -S --pwprompt arvados_sso
Enter password for new role: paste-database-password-you-generated
Enter it again: paste-database-password-you-generated
~$ sudo -u postgres createdb arvados_sso_production -E UTF8 -O arvados_sso -T template0
~$ sudo dpkg-reconfigure arvados-sso-server
~$ sudo yum reinstall arvados-sso-server
~$ ruby -e 'puts rand(2**400).to_s(36)'
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~$ RAILS_ENV=production bundle exec rails console
:001 > c = Client.new
:002 > c.name = "joshid"
:003 > c.app_id = "arvados-server"
:004 > c.app_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
:005 > c.save!
:006 > quit
server {
listen 127.0.0.1:8900;
server_name localhost-sso;
root /var/www/arvados-sso/current/public;
index index.html;
passenger_enabled on;
# If you're not using RVM, comment out the line below.
passenger_ruby /usr/local/rvm/wrappers/default/ruby;
}
upstream sso {
server 127.0.0.1:8900 fail_timeout=10s;
}
proxy_http_version 1.1;
server {
listen [your public IP address]:443 ssl;
server_name auth.your.domain;
ssl on;
ssl_certificate /YOUR/PATH/TO/cert.pem;
ssl_certificate_key /YOUR/PATH/TO/cert.key;
index index.html;
location / {
proxy_pass http://sso;
proxy_redirect off;
proxy_connect_timeout 90s;
proxy_read_timeout 300s;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# If true, allow new creation of new accounts in the SSO server's internal # user database. allow_account_registration: false # If true, send an email confirmation before activating new accounts in the # SSO server's internal user database (otherwise users are activated immediately.) require_email_confirmation: falseFor more information about configuring backend support for sending email (required to send email confirmations) see "Configuring Action Mailer":http://guides.rubyonrails.org/configuring.html#configuring-action-mailer If @allow_account_registration@ is false, you may manually create local accounts on the SSO server from the rails console:
~$ RAILS_ENV=production bundle exec rails console
:001 > user = User.new(:email => "test@example.com")
:002 > user.password = "passw0rd"
:003 > user.save!
:004 > quit
use_ldap: title: Example LDAP host: ldap.example.com port: 636 method: ssl base: "ou=Users, dc=example, dc=com" uid: uid email_domain: example.com #bind_dn: "some_user" #password: "some_password"table(table). |_. Option|_. Description| |title |Title displayed to the user on the login page| |host |LDAP server hostname| |port |LDAP server port| |method|One of "plain", "ssl", "tls"| |base |Directory lookup base| |uid |User id field used for directory lookup| |email_domain|Strip off specified email domain from login and perform lookup on bare username| |bind_dn|If required by server, username to log with in before performing directory lookup| |password|If required by server, password to log with before performing directory lookup| h3(#google). Google+ authentication In order to use Google+ authentication, you must use the Google Developers Console to create a set of client credentials. # Go to the Google Developers Console and select or create a project; this will take you to the project page. # On the sidebar, click on *APIs & auth* then select *APIs*. ## Search for *Contacts API* and click on *Enable API*. ## Search for *Google+ API* and click on *Enable API*. # On the sidebar, click on *Credentials*; under *OAuth* click on *Create new Client ID* to bring up the *Create Client ID* dialog box. # Under *Application type* select *Web application*. # If the authorization origins are not displayed, clicking on *Create Client ID* will take you to *Consent screen* settings. ## On consent screen settings, enter the appropriate details and click on *Save*. ## This will return you to the *Create Client ID* dialog box. # You must set the authorization origins. Edit @sso.your-site.com@ to the appropriate hostname that you will use to access the SSO service: ## JavaScript origin should be @https://sso.your-site.com/@ ## Redirect URI should be @https://sso.your-site.com/users/auth/google_oauth2/callback@ # Copy the values of *Client ID* and *Client secret* from the Google Developers Console into the Google section of @config/application.yml@, like this:
# Google API tokens required for OAuth2 login.
google_oauth2_client_id: "---YOUR---CLIENT---ID---HERE--"-
google_oauth2_client_secret: "---YOUR---CLIENT---SECRET---HERE--"-