dspace not picking up Shibboleth attributes to authenticate

1,112 views
Skip to first unread message

J Bell

unread,
Feb 21, 2017, 5:51:31 PM2/21/17
to DSpace Technical Support

We are moving to Shibboleth and I am having a problem figuring out where my configuration is not set correctly to allow the actual authentication to occur.  This is working in other instances we have running - only dSpace  is not yet configured properly.   Would anyone have some input as to where I have wandered into the weeds?

Notes about our configuration:

I have the IDP and my local SP  (shibboleth 2.5.2)   configured and talking as I would expect.  

We are using mod_ajp  for the proxy  (this did not work under regular proxy either - I have tried both ways).  My shibboleth2.xml configuration looks like this:

<ApplicationDefaults entityID="https://xxx.xxx.net/shibboleth"
                         id="default" policyId="default"
                         REMOTE_USER="eppn persistent-id targeted-id"
                         signing="false" encryption="false"
                         attributePrefix="AJP_">

        <Sessions lifetime="28800" timeout="3600" relayState="ss:mem"
                  checkAddress="false" handlerSSL="false" cookieProps="https">

            <SSO entityID="https://alpha.signin.xxx.edu/idp/shibboleth" Location="/Login"
                 discoveryProtocol="SAMLDS" discoveryURL="https://ds.example.org/DS/WAYF">
              SAML2 SAML1
            </SSO>



My attribute-map.xml  has the following attributes mapped - which come back as expected:

 <Attribute name="urn:oid:0.9.2342.19200300.100.1.1" id="uid"/>
    <Attribute name="urn:oid:0.9.2342.19200300.100.1.3" id="email"/>
    <Attribute name="urn:oid:2.5.4.3" id="cn"/>
    <Attribute name="urn:oid:2.5.4.4" id="sn"/>
    <Attribute name="urn:oid:2.5.4.42" id="givenName"/>
    <Attribute name="urn:oid:2.16.840.1.113730.3.1.241" id="displayName"/>



/Shibboleth.sso/Session returns this:


Miscellaneous
Session Expiration (barring inactivity): 476 minute(s)
Client Address: xxx.xxx.xxx.xxx
SSO Protocol: urn:oasis:names:tc:SAML:2.0:protocol
Authentication Time: 2017-02-20T17:31:43.925Z
Authentication Context Class: urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
Authentication Context Decl: (none)

Attributes
cn: jbell
displayName: Julie Bell
givenName: Julie
ksuPersonWildcatId: xxxxxxxx
sn: Bell
telephoneNumber: xxxxxxxxx
uid: jbell


After proper authentication the service is returned to:


and:  

Authentication Failed


The dspace log responds with this:

2017-02-21 19:42:04,972 INFO  org.dspace.app.xmlui.aspect.artifactbrowser.CommunityBrowser @ anonymous:session_id=DDFBE06E3003021B702DF0A1310B4816:ip_addr=xxx.xxx.xxx.xxx:view_community_list:
2017-02-21 19:42:04,973 INFO  org.dspace.app.xmlui.aspect.discovery.SidebarFacetsTransformer @ facets for scope, null: 3
2017-02-21 19:42:05,677 INFO  org.dspace.app.xmlui.aspect.artifactbrowser.CommunityBrowser @ anonymous:session_id=DDFBE06E3003021B702DF0A1310B4816:ip_addr=xxx.xxx.xxx.xxx:view_community_list:
2017-02-21 19:42:05,678 INFO  org.dspace.app.xmlui.aspect.discovery.SidebarFacetsTransformer @ facets for scope, null: 3
2017-02-21 19:42:27,872 ERROR org.dspace.authenticate.ShibAuthentication @ Shibboleth authentication was not able to find a NetId, Email, or Tomcat Remote user for which to indentify a user from.
2017-02-21 19:42:27,872 ERROR org.dspace.authenticate.ShibAuthentication @ Unable to register new eperson because we are unable to find an email address along with first and last name for the user.
  NetId Header: 'null'='null' (Optional)
  Email Header: 'email'='null'
  First Name Header: 'givenName'='null'
  Last Name Header: 'sn'='null'
2017-02-21 19:42:27,872 INFO  org.dspace.app.xmlui.utils.AuthenticationUtil @ anonymous:session_id=01CF256229E776009AE83845CF4341A2:ip_addr=xxx.xxx.xxx.xxx:failed_login:email=null, realm=null, result=4
2017-02-21 19:42:28,444 INFO  org.dspace.app.xmlui.aspect.artifactbrowser.CommunityBrowser @ anonymous:session_id=01CF256229E776009AE83845CF4341A2:ip_addr=xxx.xxx.xxx.xxx:view_community_list:
2017-02-21 19:42:28,444 INFO  org.dspace.app.xmlui.aspect.discovery.SidebarFacetsTransformer @ facets for scope, null: 3

The shibboleth log responds with:

2017-02-21 22:37:17 INFO Shibboleth-TRANSACTION [2]: New session (ID: _7aa0bd831d4bbfd9e852e1d24414b924) with (applicationId: default) for principal from (IdP: https://alpha.signin.xxx.edu/idp/shibboleth) at (ClientAddress: xxx.xxx.xxx.xxx) with (NameIdentifier: _19a0b33cc94439c79fc401cf9cc63200) using (Protocol: urn:oasis:names:tc:SAML:2.0:protocol) from (AssertionID: _147bb17c58c8c230f513f12d154c3489)
2017-02-21 22:37:17 INFO Shibboleth-TRANSACTION [2]: Cached the following attributes with session (ID: _7aa0bd831d4bbfd9e852e1d24414b924) for (applicationId: default) {
2017-02-21 22:37:17 INFO Shibboleth-TRANSACTION [2]:    uid (1 values)
2017-02-21 22:37:17 INFO Shibboleth-TRANSACTION [2]:    displayName (1 values)
2017-02-21 22:37:17 INFO Shibboleth-TRANSACTION [2]:    sn (1 values)
2017-02-21 22:37:17 INFO Shibboleth-TRANSACTION [2]:    givenName (1 values)
2017-02-21 22:37:17 INFO Shibboleth-TRANSACTION [2]:    cn (1 values)
2017-02-21 22:37:17 INFO Shibboleth-TRANSACTION [2]:    email (1 values)
2017-02-21 22:37:17 INFO Shibboleth-TRANSACTION [2]:    telephoneNumber (1 values)
2017-02-21 22:37:17 INFO Shibboleth-TRANSACTION [2]: }



Apache 2.4.25 configuration looks like:

<ifModule mod_shib>
   UseCanonicalName On
   <Location />
         AuthType Shibboleth
         ShibRequireSession Off
         Require shibboleth
    </Location>
    <Location "/shibboleth-login"> 
         AuthType shibboleth
         ShibRequireSession On
    #     Require shib-user ~ ^.+@(xxx|yyy)\.edu$     (was trying this out but it did not work either) 
         Require valid-user
    </Location>
    <Location "/Shibboleth.sso">
         Require all granted
         SetHandler shib
    </Location>
 </IfModule>

this is also in the configuration file, just below this stanza:

        ProxyPass   /Shibboleth.sso !   
        ProxyPass  /  "ajp://localhost:8009/"




Tom Desair

unread,
Feb 22, 2017, 3:16:24 AM2/22/17
to J Bell, DSpace Technical Support
Hi Julie,

The key here is the Apache configuration section
<Location "/shibboleth-login"> 
         AuthType shibboleth
         ShibRequireSession On
         Require valid-user
</Location>

This tells the Apache Shibboleth daemon to require a Shibboleth session when visiting "/shibboleth-login" and to provide all mapped attributes to the Tomcat application server. For all other URL endpoints, Shibboleth will not forward the attributes.

However, your DSpace instance is not running under root but under "/dspace". I conclude this from the fact that you receive a redirect to "https://test-dspace.xxx.net//dspace/shibboleth-login". This means you have to adjust the Apache configuration to secure that location instead. 

So your problem should be solved when you change "<Location "/shibboleth-login">" to "<Location "/dspace/shibboleth-login">". Can you please try that and let me know if that works?

Best regards,
Tom
 
logoTom Desair
250-B Suite 3A, Lucius Gordon Drive, West Henrietta, NY 14586
Esperantolaan 4, Heverlee 3001, Belgium
www.atmire.com

--
You received this message because you are subscribed to the Google Groups "DSpace Technical Support" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dspace-tech+unsubscribe@googlegroups.com.
To post to this group, send email to dspac...@googlegroups.com.
Visit this group at https://groups.google.com/group/dspace-tech.
For more options, visit https://groups.google.com/d/optout.

Jbell KSU Gmail

unread,
Feb 22, 2017, 10:24:58 AM2/22/17
to Tom Desair, DSpace Technical Support

Thank you for the reply - but that did not solve the problem.  I have the same response in all the logs as prior to the change.  

I did try several variations on that theme but still have not hit the right combination yet.  Further information that I missed last night:

Running dSpace 5.4

# Whether to use lazy sessions or active sessions.
lazysession = true

Does this need to change?

# The url to start a shibboleth session (only for lazy sessions)
lazysession.loginurl = /Shibboleth.sso/Login

# Force HTTPS when authenticating (only for lazy sessions)
lazysession.secure = true


and my question is this the correct netid-header for this configuration?  

#email-header = SHIB-MAIL
netid-header = uid
email-header = email
email-use-tomcat-remote-user = false


Tom Desair

unread,
Feb 22, 2017, 3:57:13 PM2/22/17
to Jbell KSU Gmail, DSpace Technical Support
Can you enable debug logging for Shibboleth in DSpace by adding this line "log4j.logger.org.dspace.authenticate.ShibAuthentication=DEBUG" to the config/log4j.properties file and retry with the following settings:
  • Use AJP
    • Make sure to have attributePrefix="AJP_" in your ApplicationDefaults element
    • Make sure to proxy to the AJP connector with a buffer that is large enough:
      • We always use
        • ProxyPass / ajp://localhost:8009/ retry=0
        • ProxyPassReverse / ajp://localhost:8009/
        • ProxyIOBufferSize 65536
      • Make sure the connector is enabled in the Tomcat server.xml file and supports UTF-8 encoding and large packages:
        • <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" packetSize="65536"/>
  • Secure the correct location
    • If you run DSpace under the root of your server, make sure this is
      • <Location "/shibboleth-login">
    • If you run DSpace under the the URL "/dspace", the location should be
      • <Location "/dspace/shibboleth-login">
    • Make sure there are no double slashes in the redirect URL your browser receives (which is the case in your first example).
  • Since you are using Apache 2.4 and Shibboleth 2.5, please replace the following in your Apache configuration:
    • Replace "ShibRequireSession On" by "ShibRequestSetting requireSession 1"
    • Replace "ShibRequireSession Off" by "ShibRequestSetting requireSession 0"
  • You can leave the values for lazysession.secure and the DSpace netid and email header settings as you configured them.
Can you also test this:
  • Shutdown tomcat and visit <dspace-url>/shibboleth-login after closing all browser windows. This should take you to your IdP login page even if DSpace is not running.
  • Have you tried without AJP and using "ShibUseHeaders On" (note that this is less secure and not recommended, but it would still be interesting to know if this works).
I'm interested to see what the DSpace logs show when you execute these tests. Please also provide some information on the redirect URLs you are seeing.

 
logoTom Desair
250-B Suite 3A, Lucius Gordon Drive, West Henrietta, NY 14586
Esperantolaan 4, Heverlee 3001, Belgium
www.atmire.com
To post to this group, send email to dspace-tech@googlegroups.com.

Jbell KSU Gmail

unread,
Feb 22, 2017, 4:35:23 PM2/22/17
to Tom Desair, DSpace Technical Support
Great - some testing I have not done - I will let you know in the morning.  Again, thank you!

Jbell KSU Gmail

unread,
Feb 23, 2017, 8:22:35 PM2/23/17
to Tom Desair, DSpace Technical Support

I have shibboleth now working.  Adding this line  "log4j.logger.org.dspace.authenticate.ShibAuthentication=DEBUG” was the biggest help.  Maybe should be more prominent in the documentation :)  

Your testing suggestions found the problem in our httpd.conf which forced a redirect to the /dspace directory after it came back from the IdP.  Still have the double slashes  in the string.  That is actually created here (probably another configuration issue further up the line)  - using the Login function from the main page and not by any redirect or addition by apache:

2017-02-23 15:48:48,738 DEBUG org.dspace.authenticate.ShibAuthentication @ Redirecting user to Shibboleth initiator: /Shibboleth.sso/Login?target=https%3A%2F%2Ftest-dspace.ksulib.net%2F%2Fdspace%2Fshibboleth-login

Couple of notes here though…with things working:

1.  I was never able to get /shibboleth-login to the IdP with out tomcat running.
2.  This change created errors in Apache preventing start:

configtest = ShibRequireSession must be On or Off, so I went back to the On | Off
    • Replace "ShibRequireSession On" by "ShibRequestSetting requireSession 1"
    • Replace "ShibRequireSession Off" by "ShibRequestSetting requireSession 0”
    I do have one other question.  Is there any way to set all users to a specific group after login rather than Anonymous?  In LDAP we were able to set the default group as such:

    login.specialgroup = ETDR_AUTO

    I was thinking worse case -  use the affiliation and set all the roles to the group.  I was looking at the scripting functions and could go that way later. 

    Thank you again!

    On Feb 22, 2017, at 2:57 PM, Tom Desair <tom.d...@atmire.com> wrote:

    J Bell

    unread,
    Feb 27, 2017, 2:33:30 PM2/27/17
    to DSpace Technical Support

    For future:

    I did also figure out being able to add a default group to shibboleth by using our domain name rather than affiliations - works great!


    # The shibboleth header to do role-based mappings
    role-header = email

    # Whether to ignore the attribute's scope or value.
    role-header.ignore-scope = false
    role-header.ignore-value = true

    # Default mappings of roles values to a comma separated list of DSpace group
    # names (Case Sensitive).
    role.xxxx.edu = ETDR_AUTO
    role.xxxx.edu = ETDR_AUTO

    Tom Desair

    unread,
    Feb 28, 2017, 4:22:48 AM2/28/17
    to J Bell, DSpace Technical Support
    Hi Julie,

    I'm glad I could help and that you have Shibboleth up and running now.

    There is also an (undocumented) property called "default-roles" in which you can define a set of fallback roles in case no applicable roles were found for a user. So if you want to assign each user that authenticates through Shibboleth to the ETDR_AUTO group, you can put this in the authentication-shibboleth.cfg file:

    default-roles = internal
    role.internal = ETDR_AUTO

    Best regards,
    Tom
     
    logoTom Desair
    250-B Suite 3A, Lucius Gordon Drive, West Henrietta, NY 14586
    Esperantolaan 4, Heverlee 3001, Belgium
    www.atmire.com
    Message has been deleted

    David Williams

    unread,
    Sep 10, 2020, 9:44:01 AM9/10/20
    to DSpace Technical Support
    Hi, Julie -

    I'm experiencing the exact same issue, using DSpace 6.3.

    What specifically did you change in the httpd.conf to stop the redirection following the handoff back to Apache from the IdP?

    Thanks in advance for your assistance,

    - Dave

    To unsubscribe from this group and stop receiving emails from it, send an email to dspace-tech...@googlegroups.com.

    To post to this group, send email to dspac...@googlegroups.com.
    Visit this group at https://groups.google.com/group/dspace-tech.
    For more options, visit https://groups.google.com/d/optout.
    --
    You received this message because you are subscribed to the Google Groups "DSpace Technical Support" group.
    To unsubscribe from this group and stop receiving emails from it, send an email to dspace-tech...@googlegroups.com.
    Reply all
    Reply to author
    Forward
    0 new messages