diff --git a/gracedb/middleware/auth.py b/gracedb/middleware/auth.py
index 0e2fb2d413c626b92140ab7f0a53205679365610..dd5f4d532be0333ca8748b823375e3fab2d7575b 100644
--- a/gracedb/middleware/auth.py
+++ b/gracedb/middleware/auth.py
@@ -19,38 +19,42 @@ class LigoAuthMiddleware:
         ligouser = None
         user = None
 
-        principal = request.META.get('REMOTE_USER')
-        certdn = request.META.get('SSL_CLIENT_S_DN')
-        issuer = request.META.get('SSL_CLIENT_I_DN')
-
-        if not certdn:
-            try:
-                # mod_python is a little off...
-                # SSL info is in request._req
-                # Need to try/except because _req is
-                # not defined in WSGI request.
-                certdn = request._req.ssl_var_lookup ('SSL_CLIENT_S_DN')
-                issuer = request._req.ssl_var_lookup ('SSL_CLIENT_I_DN')
-                pass
-            except:
-                pass
-
         queryResult = []
-        if principal:
-            # Kerberos.
+        if (request.user):
+            # Scott's middleware has set the user aready using shib.
+            # Let's add some more attributes.
+            principal = request.user.username
+            request.user.name = nameFromPrincipal(principal)
             queryResult = User.objects.filter(principal=principal)
-        elif certdn and certdn.startswith(issuer):
-            # proxy.
-            # Proxies can be signed by proxies.
-            # Each level of "proxification" causes the subject
-            # to have a '/CN=[0-9]+ appended to the signers subject.
-            # These must be removed to discover the original identity's
-            # subject DN.
-            issuer = proxyPattern.match(issuer).group(1)
-            queryResult = User.objects.filter(dn=issuer)
-        elif certdn:
-            # cert in browser.
-            queryResult = User.objects.filter(dn=certdn)
+        else:
+            # authenticate with certs
+            certdn = request.META.get('SSL_CLIENT_S_DN')
+            issuer = request.META.get('SSL_CLIENT_I_DN')
+
+            if not certdn:
+                try:
+                    # mod_python is a little off...
+                    # SSL info is in request._req
+                    # Need to try/except because _req is
+                    # not defined in WSGI request.
+                    certdn = request._req.ssl_var_lookup ('SSL_CLIENT_S_DN')
+                    issuer = request._req.ssl_var_lookup ('SSL_CLIENT_I_DN')
+                    pass
+                except:
+                    pass
+
+            if certdn and certdn.startswith(issuer):
+                # proxy.
+                # Proxies can be signed by proxies.
+                # Each level of "proxification" causes the subject
+                # to have a '/CN=[0-9]+ appended to the signers subject.
+                # These must be removed to discover the original identity's
+                # subject DN.
+                issuer = proxyPattern.match(issuer).group(1)
+                queryResult = User.objects.filter(dn=issuer)
+            elif certdn:
+                # cert in browser.
+                queryResult = User.objects.filter(dn=certdn)
 
         if queryResult:
             ligouser = queryResult[0]
diff --git a/settings/default.py b/settings/default.py
index e04ba7691cf1fc51c5023f78889eab9c67f16bd4..a1e892b5968825507f9c66135955d0f3223c6897 100644
--- a/settings/default.py
+++ b/settings/default.py
@@ -161,18 +161,23 @@ TEMPLATE_CONTEXT_PROCESSORS = (
 )
 
 AUTHENTICATION_BACKENDS = (
-    'django.contrib.auth.backends.ModelBackend',
     'gracedb.middleware.auth.LigoAuthBackend',
+    'ligodjangoauth.LigoShibbolethAuthBackend',
+    'django.contrib.auth.backends.ModelBackend',
 )
 
+SHIB_AUTHENTICATION_SESSION_INITIATOR = 'https://moe.phys.uwm.edu/Shibboleth.sso/Login'
+
 MIDDLEWARE_CLASSES = [
     'middleware.accept.AcceptMiddleware',
-    'gracedb.middleware.auth.LigoAuthMiddleware',
     'middleware.cli.CliExceptionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
-    'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'ligodjangoauth.LigoShibbolethMiddleware',
+    'gracedb.middleware.auth.LigoAuthMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
 ]
 
 ROOT_URLCONF = 'urls'