Our SP stacks doesn't process login after IDP update from v2 to v3
Sandor Mezei
smezei at orbiscommunications.com
Fri Dec 21 09:00:46 EST 2018
One of our clients has upgraded their Shib IDP to v3 and if we switch to using that IPD it somehow causes an issue with our SP stack so that it is no longer possible for users to log in.
Our SP setup (that works with IDP v2) is:
Windows Server 2012 R2 Standard
Shib SP 2.6.1.4
Apache 2.4.33
JDK 1.8.0_162x64
In Apache httpd.conf:
<Location /secure>
AuthType shibboleth
ShibUseHeaders On
ShibRequestSetting requireSession 1
require valid-user
</Location>
<Location /Shibboleth.sso>
AuthType shibboleth
require shibboleth
</Location>
<Location /Shibboleth.sso/Metadata>
AuthType shibboleth
require shibboleth
</Location>
<Location /shibboleth>
AuthType shibboleth
require shibboleth
</Location>
In Apache httpd-ssl.conf
<VirtualHost 192.168.42.56:443>
ServerName <redacted>
DocumentRoot "${SRVROOT}/htdocs"
ProxyPass /Shibboleth.sso !
ProxyPass /shibboleth !
ProxyPass /shibboleth-sp !
ProxyIOBufferSize 65536
ProxyPass / ajp://192.168.42.56:8443/ retry=0
ProxyPassReverse / ajp://192.168.42.56:8443/ retry=0
SSLEngine on
SSLCertificateFile "${SRVROOT}/conf/ssl/<redacted>.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/ssl/<redacted>.key"
SSLCertificateChainFile "${SRVROOT}/conf/ssl/<redacted>-chain.crt"
</VirtualHost>
In Tomcat server.xml
<Connector address="192.168.42.56" port="8443" proxyName="<redacted>" proxyPort="443" protocol="AJP/1.3" maxThreads="2000" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="1000" debug="0" connectionTimeout="20000" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" packetSize="65536" />
Shibboleth2.xml relevant part:
<ApplicationOverride id="<redacted>" entityID="<redacted>" attributePrefix="AJP_" REMOTE_USER="somerandomstring" signing="false" encryption="false">
<Sessions lifetime="28800" timeout="3600" checkAddress="false" handlerURL="https://<redacted>/Shibboleth.sso<https://%3credacted%3e/Shibboleth.sso>" handlerSSL="true" >
<SSO entityID="https://<redacted>/idp/shibboleth<https://%3credacted%3e/idp/shibboleth>">SAML2</SSO>
<!--<SSO entityID="https://<redacted><https://%3credacted%3e>">SAML2</SSO>-->
<Logout>SAML2 Local</Logout>
<LogoutInitiator type="Chaining" Location="/Logout" relayState="cookie">
<LogoutInitiator type="Local"/>
</LogoutInitiator>
<Handler type="MetadataGenerator" Location="/Metadata" signing="false"/>
<Handler type="Status" Location="/Status" acl="127.0.0.1"/>
<Handler type="Session" Location="/Session" showAttributeValues="false"/>
<Handler type="DiscoveryFeed" Location="/DiscoFeed"/>
</Sessions>
<Errors supportContact="noreply at email.com<mailto:noreply at email.com>"/>
<MetadataProvider type="XML" path="idp-metadata-<redacted>.xml" reloadInterval="7200"/>
<!--<MetadataProvider type="XML" path="idp-metadata-<redacted>new.xml" reloadInterval="7200"/>-->
<AttributeResolver type="Query" subjectMatch="true"/>
<AttributeFilter type="XML" validate="true" path="attribute-policy.xml"/>
<CredentialResolver type="File" key="sp-key.pem" certificate="sp-cert.pem"/>
<AttributeExtractor type="XML" validate="true" reloadChanges="false" path="attribute-map-<redacted>.xml"/>
<!--<AttributeExtractor type="XML" validate="true" reloadChanges="false" path="attribute-map-<redacted>new.xml"/>-->
</ApplicationOverride>
Login process (that works):
User clicks https://<redacted>/secure<https://%3credacted%3e/secure>
Apache redirects to
https://<redacted>/idp/Authn/UserPassword<https://%3credacted%3e/idp/Authn/UserPassword>
User fills out username, password
IDP redirects to Apache, Apache to Tomcat, user is logged in
The problem with IDPv3:
In shibboleth2.xml we have to change 3 things (use the commented out parts instead of the live ones for SSO, MetadataProvider and AttributeExtractor) as specified by the IDPv3 provider
Login process (that fails):
User clicks https://<redacted>/secure<https://%3credacted%3e/secure>
Apache redirects to
https://<redacted>/idp/profile/SAML2/Redirect/SSO;jsessionid=2F72AD4D751673B7ACC6045DE9FEC59E?execution=e1s1<https://%3credacted%3e/idp/profile/SAML2/Redirect/SSO;jsessionid=2F72AD4D751673B7ACC6045DE9FEC59E?execution=e1s1>
Notice the ;jsessionid part here... This is suspect to be the cause or a symptom as it is not how it was with IDPv2
User fills out username, password
IDP redirects to Apache, Apache returns a 500 error to the browser
Invalid HTTP method (GET)
The only way we could come up with to not to have the 500 error (and also not see the jsessionid part in the URL that is suspect) is to take out the "ShibUseHeaders On" from httpd.conf, and what is expected at that point is to receive the Shib attributes as environment variables vs. HTTP headers. That doesn't happen unfortunately.
We tried every config change/setting that we can think of on our end but still haven't been able to crack this nut.
Any help/insights are greatly appreciated.
Thank you,
SM
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://shibboleth.net/pipermail/users/attachments/20181221/b16a5978/attachment.html>
More information about the users
mailing list