X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c59093180fd92f0d7c6607a49458446212ebd058..52cca9dc7c50ef8c54c9dc83a2ccf0129c27485e:/doc/install/install-sso.html.textile.liquid?ds=inline
diff --git a/doc/install/install-sso.html.textile.liquid b/doc/install/install-sso.html.textile.liquid
index b0ad8b4253..af999e95a9 100644
--- a/doc/install/install-sso.html.textile.liquid
+++ b/doc/install/install-sso.html.textile.liquid
@@ -6,49 +6,104 @@ title: Install Single Sign On (SSO) server
h2(#dependencies). Install dependencies
-Make sure you have "Ruby and Bundler":install-manual-prerequisites-ruby.html installed.
+h3(#install_git_curl). Install git and curl
+
+{% include 'install_git_curl' %}
+
+h3(#install_ruby_and_bundler). Install Ruby and Bundler
+
+{% include 'install_ruby_and_bundler' %}
+
+h3(#install_postgres). Install PostgreSQL
+
+{% include 'install_postgres' %}
h2(#install). Install SSO server
-h3. Get SSO server code and create database
+h3. Get SSO server code and run bundle
-~$ cd $HOME # (or wherever you want to install)
~$ git clone https://github.com/curoverse/sso-devise-omniauth-provider.git
~$ cd sso-devise-omniauth-provider
-~/sso-devise-omniauth-provider$ bundle install
-~/sso-devise-omniauth-provider$ RAILS_ENV=production bundle exec rake db:create
-~/sso-devise-omniauth-provider$ RAILS_ENV=production bundle exec rake db:migrate
-
~/sso-devise-omniauth-provider$ cp -i config/application.yml.example config/application.yml
+
~/sso-devise-omniauth-provider$ ruby -e 'puts "#{rand(2**64).to_s(36)[0,5]}"'
+abcde
+
~/sso-devise-omniauth-provider$ cp -i config/initializers/secret_token.rb.example config/initializers/secret_token.rb
-~/sso-devise-omniauth-provider$ ruby -e 'puts rand(2**400).to_s(36)'
+
-~/sso-devise-omniauth-provider$ ruby -e 'puts rand(2**400).to_s(36)'
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
-
-~/sso-devise-omniauth-provider$ cp -i config/environments/production.rb.example config/environments/production.rb
-
~/sso-devise-omniauth-provider$ ruby -e 'puts rand(2**128).to_s(36)'
+abcdefghijklmnopqrstuvwxyz012345689
+
+
+Create a new database user with permission to create its own databases.
+
+~/sso-devise-omniauth-provider$ 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
+
~/sso-devise-omniauth-provider$ cp -i config/database.yml.example config/database.yml
+~/sso-devise-omniauth-provider$ edit config/database.yml
+
~/sso-devise-omniauth-provider$ RAILS_ENV=production bundle exec rake db:setup
+
~/sso-devise-omniauth-provider$ sudo -u postgres createdb arvados_sso_production -E UTF8 -O arvados_sso -T template0
+~/sso-devise-omniauth-provider$ RAILS_ENV=production bundle exec rake db:schema:load
+~/sso-devise-omniauth-provider$ RAILS_ENV=production bundle exec rake db:seed
+
~/sso-devise-omniauth-provider$ ruby -e 'puts rand(2**400).to_s(36)'
@@ -63,9 +118,36 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~/sso-devise-omniauth-provider$ RAILS_ENV=production bundle exec rake assets:precompile
+
++ # 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: false ++ +For 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:
~/sso-devise-omniauth-provider$ RAILS_ENV=production bundle exec rails console
@@ -76,26 +158,128 @@ Instead of relying on an upstream authentication such as Google, you can create
+ 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 https://auth.your.domain/users/sign_in -# Enter the email address and password and click on "Sign in" -# You will arrive at a page "You are now signed in as test@example.com" -# Go to https://workbench.@uuid_prefix@.your.domain/ -# Click on the Workbench "Log in" button. -# You should now be logged in to Workbench. Confirm by looking for the email address displayed in the upper right. +# 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: -h2. Start the SSO server +
# Google API tokens required for OAuth2 login.
+ google_oauth2_client_id: "---YOUR---CLIENT---ID---HERE--"-
+ google_oauth2_client_secret: "---YOUR---CLIENT---SECRET---HERE--"-
~/arvados/services/api$ RAILS_ENV=production bundle exec rails server
+
+- Install Nginx and Phusion Passenger.
+
+Edit the http section of your Nginx configuration to run the Passenger server, and act as a front-end for it. You might add a block like the following, adding SSL and logging parameters to taste:
+
+server {
+ listen 127.0.0.1:8900;
+ server_name localhost-sso;
+
+ root /YOUR/PATH/TO/sso-devise-omniauth-provider/public;
+ index index.html index.htm index.php;
+
+ passenger_enabled on;
+ # If you're using RVM, uncomment 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 index.htm index.php;
+
+ 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;
+ }
+}
+
+
+- Restart Nginx.
+
+
+SECURITY WARNING: No secret option provided to Rack::Session::Cookie. +This poses a security threat. It is strongly recommended that you +provide a secret to prevent exploits that may be possible from crafted +cookies. This will not be supported in future versions of Rack, and +future versions will even invalidate your existing user cookies. + +Called from: /var/lib/gems/2.1.0/gems/actionpack-3.2.8/lib/action_dispatch/middleware/session/abstract_store.rb:28:in `initialize'. +-As a Ruby on Rails application, the SSO server should be compatible with any Ruby application server that supports Rack applications. We recommend "Passenger":https://www.phusionpassenger.com/ to run the SSO server in production. +{% include 'notebox_end' %}