My reply got eaten halfway through typing it up, so I apologize if I shorthand any part of this. Hopefully I can reply to your concerns from both of your emails.
We are seeking to implement a multi-tiered architecture in a hub-and-spoke approach (as you suggested earlier), although the mechanics are slightly different than what you proposed. Our "hub" is to be the SimpleSAMLphp IdP, with our "spokes" being the authentication sources I mentioned earlier (local-sourced auth, Federation, Google, etc). Our Shibboleth IdP is the federation member Entity - that will not be changing. This solution is just to expand our options to applications within the organization, so we have full control over all SPs involved, which removes some of the concerns with cross-federation compatibility.
The idea of setting up separate servers to function as (for example) a Google OAuth -> SAML translator and function as its own IdP seems a bit overkill to me, which seems to be the only option to make a hub-and-spoke in a SAML-standards compliant manner. That being said, compliance is important, so I need to see what else could possibly be done to issue SAML-compliant URIs while still acquiring the entityID from requested resource without requiring a server farm to make this happen.
In regards to metadata, everything is generating as expected. I have already integrated our test SSP and Shibboleth SPs to use the variant IdP as a test. In the case of SSP, it was a simple copy-paste. Shibboleth is pulling the metadata using its own internal refresh mechanisms. Both are working as expected. Since this IdP will not be used by the Federation (it will instead function as a Service Provider there, and with a single profile), and I'm not worried about SP metadata changing, this simply needs to function properly in-house.
As to the certificates, I am using the same certs across each IdP instance running on this server, so I'm not running into any issues there either.
Any issues introduced by triggering an "alternate" entityID are already going to exist (to some degree) with SSP's internal IdP code, as it uses the URL to determine what IdP entity to leverage. The only SAML 2.0 IdP code that a browser can access is under www/saml2/idp, and the only pages there that leverage the entityid are:
- metadata.php - already patched
- SingleLogoutService.php - already patched
- SSOService.php - already patched
- ArtifactResolutionService.php - not patched, not in use. However, should probably be patched for compatibility.
- several deprecated iFrame pages, no need to touch them.
Since SimpleSAMLphp must be able to determine the entityID from data set to the web page or stored from such an action, every time the entityID is referenced, it is coming from one of the above-mentioned pages. Of course, it's dangerous to assume 100% compatibility once anything is changed - hence the need to extensive testing - but I'm confident that assertions will work properly if I can bring this back into a standards-compliant mode.
One thing that I may try to do is to replace ?idpentityid=$idpentityid another type of append on the endpoints, similar to the way that SimpleSAMLphp does so for module loads. By way of example, the default:
https://<idpHostname>/simplesaml/saml2/idp/SingleLogoutService.php
which I've modified for non-default IdPs to be:
https://<idpHostname>/simplesaml/saml2/idp/SingleLogoutService.php?idptentityid=<idp entity ID>
could instead be:
https://<idpHostname>/simplesaml/saml2/idp/SingleLogoutService.php/<idp entity ID>
This would keep everything standards-compliant (as it doesn't leverage a parameter, which is the only thing pulling it out of compliance in the first place), which should resolve the rest of the attendant issues as well.
Thanks for all the feedback. It is appreciated.
-David