[arvados] Allowing arvados to use authentication information from web server
George Chlipala
gchlip2 at uic.edu
Fri Aug 26 18:38:20 EDT 2016
In case anyone is interested...
We wanted to have Arvados use the authentication information provided by
the web server. This is due to the fact that we already have setup a
single-sign-on system for our webservers and wanted Arvados integrate with
the existing infrastructure.
We made the changes to the user_sessions_controller.rb for the API service,
see following patch. Then setup the web server to authenticate users
accessing the path "/login" for the API server.
For example, we use Shibboleth and added the following configuration to our
web server.
<Location /login >
AuthType shibboleth
ShibCompatWith24 On
ShibRequestSetting requireSession 1
require shib-session
</Location>
Then made sure that shibboleth provided the "eppn", which is equivalent to
an email address, as the REMOTE_USER parameter. The following is a snippet
from our shibboleth2.xml file.
<ApplicationDefaults entityID="..." REMOTE_USER="eppn uid">
Restarted the shibd and webserver and now the webserver will authenticate
users and then Arvados will use the user ID to authorize the user. We are
not allowing registration for Arvados so, we just manually add users from
the workbench...at least for now.
--- a/services/api/app/controllers/user_sessions_controller.rb
+++ b/services/api/app/controllers/user_sessions_controller.rb
@@ -100,6 +100,15 @@
# to save the return_to parameter (if it exists; see the application
# controller). /auth/joshid bypasses the application controller.
def login
+
+ # Added to allow Arvados to use user ID from web server.
+ # This assumes that the user ID is the email address of the user.
+ if request.env["REMOTE_USER"] then
+ logger.warn "Using REMOTE_USER from webserver"
+ current_user = User.find_by_email(request.env["REMOTE_USER"])
+ Thread.current[:user] = current_user
+ end
+
auth_provider = if params[:auth_provider] then
"auth_provider=#{CGI.escape(params[:auth_provider])}" else "" end
if current_user and params[:return_to]
@@ -111,9 +120,9 @@
send_api_token_to(params[:return_to], current_user)
elsif params[:return_to]
- redirect_to "/auth/joshid?return_to=#{CGI.
escape(params[:return_to])}&#{auth_provider}"
+ redirect_to "#{root_path}auth/joshid?return_to=#{CGI.escape(params[
:return_to])}&#{auth_provider}"
else
- redirect_to "/auth/joshid?#{auth_provider}"
+ redirect_to "#{root_path}auth/joshid?#{auth_provider}"
end
end
George Chlipala, Ph.D.
Senior Research Specialist
Research Resources Center
University of Illinois at Chicago
phone: 312-413-1700
email: gchlip2 at uic.edu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.arvados.org/pipermail/arvados/attachments/20160826/fbfd2ccf/attachment.html>
More information about the arvados
mailing list