Requirements
- PowerFolder Server v10v21.30.254 100 or higher
- SSL setup with Apache and PowerFolder
- Cluster only: Building a high-availability cluster.
- Apache module mod_shib
- Enabled ECP (Enhanced Client or Proxy):
...
Code Block |
---|
<VirtualHost _default_:443> ErrorLog ${APACHE_LOG_DIR}/ssl_error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log vhost_combined ServerName powerfolder.organization.net ServerAdmin support@organization.net DocumentRoot "/var/www/default" # Set strict transport security: https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security Header always set Strict-Transport-Security "max-age=31536000;" SSLEngine on SSLCertificateFile /etc/ssl/certs/powerfolder.organization.net.pem SSLCertificateKeyFile /etc/ssl/private/powerfolder.organization.net.key RewriteEngine On <Location /login/shibboleth> AuthType shibboleth ShibRequestSetting requireSession 1 <RequireAll> Require valid-user Require shib-attr entitlement ~ http://idm.org/entitlement/organization-PowerFolder http://powerfolder.organization.net/entitlement/DFN-Cloud </RequireAll> </Location> <Location /Shibboleth.sso> satisfy Any Header set Access-Control-Allow-Origin "*" </Location> <Proxy balancer://pfcluster> BalancerMember http://pf01.organization.net:8080 route=nodeID01 BalancerMember http://pf02.organization.net:8080 route=nodeID02 BalancerMember http://pf03.organization.net:8080 route=nodeID03 ProxySet stickysession=rpcid|JSESSIONID|jsessionid scolonpathdelim=On lbmethod=bybusyness </Proxy> ProxyPass /rpc balancer://pfcluster/rpc nocanon ProxyPass /rpc ! ProxyPass /eds ! ProxyPass /Shibboleth.sso ! ProxyPass / balancer://pfcluster/ nocanon # Shibboleth-Attribute mapping to HTTP Headers for delivery to PF Server # Source: https://wiki.powerfolder.com/display/EDUDE/Shibboleth RequestHeader set HTTP_ShibSAMLShib-Session-ID %{HTTP_ShibSAMLShib-Session-ID}e env=HTTP_ShibSAMLShib-Session-ID RequestHeader set HTTP_Shib RequestHeader set SAMLShib-Session-ID "" env=!HTTP_ShibSAMLShib-Session-ID RequestHeader set HTTP_persistentSAMLpersistent-id %{HTTP_persistentSAMLpersistent-id}e env=HTTP_persistentSAMLpersistent-id RequestHeader set HTTP_persistentSAMLpersistent-id "" env=!HTTP_persistentSAMLpersistent-id RequestHeader set HTTP_uniqueIDSAMLuniqueID %{HTTP_uniqueIDSAMLuniqueID}e env=HTTP_uniqueID SAMLuniqueID RequestHeader set HTTP_uniqueIDSAMLuniqueID "" env=!HTTP_uniqueID SAMLuniqueID RequestHeader set HTTP_pairwiseSAMLpairwise-id %{HTTP_pairwiseSAMLpairwise-id}e env=HTTP_pairwiseSAMLpairwise-id RequestHeader set HTTP_pairwiseSAMLpairwise-id "" env=!HTTP_upairwiseSAMLupairwise-id RequestHeader set HTTP_eduPersonPrincipalNameSAMLeduPersonPrincipalName %{HTTP_eduPersonPrincipalNameSAMLeduPersonPrincipalName}e env=HTTP_eduPersonPrincipalName SAMLeduPersonPrincipalName RequestHeader set HTTP_eduPersonPrincipalNameSAMLeduPersonPrincipalName "" env=!HTTP_eduPersonPrincipalName SAMLeduPersonPrincipalName RequestHeader set HTTP_eppnSAMLeppn %{HTTP_eppnSAMLeppn}e env=HTTP_eppn SAMLeppn RequestHeader set HTTP_eppnSAMLeppn "" env=!HTTP_eppn SAMLeppn RequestHeader set HTTP_EPPNSAMLEPPN %{HTTP_EPPNSAMLEPPN}e env=HTTP_EPPN SAMLEPPN RequestHeader set HTTP_EPPNSAMLEPPN "" env=!HTTP_EPPN SAMLEPPN RequestHeader set HTTP_mailSAMLmail %{HTTP_mailSAMLmail}e env=HTTP_mail SAMLmail RequestHeader set HTTP_mailSAMLmail "" env=!HTTP_mail SAMLmail RequestHeader set HTTP_emailSAMLemail %{HTTP_emailSAMLemail}e env=HTTP_email SAMLemail RequestHeader set HTTP_emailSAMLemail "" env=!HTTP_email SAMLemail RequestHeader set HTTP_givenNameSAMLgivenName %{HTTP_givenNameSAMLgivenName}e env=HTTP_givenName SAMLgivenName RequestHeader set HTTP_givenNameSAMLgivenName "" env=!HTTP_givenName SAMLgivenName RequestHeader set HTTP_snSAMLsn %{HTTP_snSAMLsn}e env=HTTP_sn SAMLsn RequestHeader set HTTP_snSAMLsn "" env=!HTTP_sn SAMLsn RequestHeader set HTTP_surnameSAMLsurname %{HTTP_surnameSAMLsurname}e env=HTTP_surname SAMLsurname RequestHeader set HTTP_surnameSAMLsurname "" env=!HTTP_surname SAMLsurname RequestHeader set HTTP_affiliationSAMLaffiliation %{HTTP_affiliationSAMLaffiliation}e env=HTTP_affiliation SAMLaffiliation RequestHeader set HTTP_affiliationSAMLaffiliation "" env=!HTTP_affiliation SAMLaffiliation RequestHeader set HTTP_eduPersonScopedAffiliationSAMLeduPersonScopedAffiliation %{HTTP_eduPersonScopedAffiliationSAMLeduPersonScopedAffiliation}e env=HTTP_eduPersonScopedAffiliation SAMLeduPersonScopedAffiliation RequestHeader set HTTP_eduPersonScopedAffiliationSAMLeduPersonScopedAffiliation "" env=!HTTP_eduPersonScopedAffiliation SAMLeduPersonScopedAffiliation RequestHeader set HTTP_entitlementSAMLentitlement %{HTTP_entitlementSAMLentitlement}e env=HTTP_entitlement SAMLentitlement RequestHeader set HTTP_entitlementSAMLentitlement "" env=!HTTP_entitlement SAMLentitlement RequestHeader set HTTP_eduPersonEntitlementSAMLeduPersonEntitlement %{HTTP_eduPersonEntitlementSAMLeduPersonEntitlement}e env=HTTP_eduPersonEntitlementSAMLeduPersonEntitlement RequestHeader set HTTP_eduPersonEntitlementSAMLeduPersonEntitlement "" env=!HTTP_eduPersonEntitlementSAMLeduPersonEntitlement # Organization attribute. Must match entry 'shibboleth.organizations.attribute' in PowerFolder.config. Default: o RequestHeader set HTTP_oSAMLo %{HTTP_oSAMLo}e env=HTTP_oSAMLo RequestHeader set HTTP_oSAMLo "" env=!HTTP_oSAMLo </VirtualHost> |