Thanks, Tim. That looks doable. I might even base mine off of the SAML:SP auth source since that’s 99% of the way there. Can you suggest the easiest way to get the entity ID of the requesting SP inside the auth source code, though? That is, if the SP sends the authn request to my proxy IdP, how can I access the requesting SP’s entity ID from that authn request inside of my authentication source? Where would that be? I assume somewhere in the state object?
Keith
--
This is a mailing list for users of SimpleSAMLphp, not a support service. If you are willing to buy commercial support, please take a look here:
https://simplesamlphp.org/support
Before sending your question, make sure it is related to SimpleSAMLphp, and not your web server's configuration or any other third-party software. This mailing list cannot help with software that uses SimpleSAMLphp, only regarding SimpleSAMLphp itself.
Make sure to read the documentation:
https://simplesamlphp.org/docs/stable/
If you have an issue with SimpleSAMLphp that you cannot resolve and reading the documentation doesn't help, you are more than welcome to ask here for help. Subscribe to the list and send an email with your question. However, you will be expected to comply with
some minimum, common sense standards in your questions. Please read this carefully:
http://catb.org/~esr/faqs/smart-questions.html
---
You received this message because you are subscribed to the Google Groups "SimpleSAMLphp" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
simplesamlph...@googlegroups.com.
To view this discussion visit
https://groups.google.com/d/msgid/simplesamlphp/0714c761-9026-457d-9c03-b0ae2f5e136cn%40googlegroups.com.
Thanks, Pat and Tim, this helped. We ended up using the RequestedAuthnSelector authentication source. Very clean and simple! We had to explicitly set the ACR in the Entra IdP metadata to unspecified. Otherwise, the proxy IdP tried to pass it through even with proxymode.passAuthnContextClassRef set to false. Not sure why, but it works fine.
We’ve got one related issue now, and I’m hoping someone can give me some guidance. In short, we need step-up authentication to work.
When an SP sends the special ACR context that I’ve created in our namespace to the proxy IdP, it sends the user to Entra with an app registration configured not to do MFA. If that ACR isn’t present from the originating SP, SimpleSAMLphp sends the user to a different Entra app registration that does require MFA. Let’s call them A and B in that order.
If the user logs into an SP using option A first, they get through Entra with just a password. If they then log into an SP using B, they already have a SimpleSAMLphp IdP session and thus don’t get sent back to Entra. They’ve now logged into an app that should require MFA but without doing MFA.
Our Shibboleth proxying to Entra sets the IdP session lifetime to 0 (actually one second since 0 isn’t allowed), making Entra authoritative for sessions. So,I thought let’s do the same in SimpleSAMLphp.
But when I tried setting session.duration to 0 or 1 in SimpleSAMLphp’s config.php, all sorts of weird things started to break. Seems like just going to Entra and back to the proxy IdP gave me unhandled exceptions from SimpleSAMLphp. Feels like session.duration controls a whole lot more than just the user’s IdP session lifetime. I’m also afraid that this would be a problem for propagating logouts on to the issuing IdP: a user signs in t something then later logs out of that service. The logout request goes to the proxy IdP, but if the session is no longer valid, SimpleSAMLphp doesn’t know what upstream IdP performed the original login so can’tsend them back to log them out.
Is there a way to tell SSP to limit the validity of the session lifetime while still keeping it around for other functions? Or even limit the lifetime of a session from a given authentication source so that the authentication source will at least always send the user to the upstream IdP? Or any other ways to get the user to always be sent to Entra so that step-up authentication can be performed if needed?
My last resort is to just stand up another proxy IdP instance to handle these no MFA logins. It would have a different everything, so there’d be no chance of someone getting in without doing MFA when they’re supposed to. But I’m trying to avoid that.
Thanks for any advice,
Keith
To view this discussion visit https://groups.google.com/d/msgid/simplesamlphp/ed6a9325-f133-42a6-96f9-641236ff6d8dn%40googlegroups.com.
All,
I’ve been thinking about this more, and an idea that AI frighteningly suggested last week is starting to seem possibly attractive. Before I try it and see that it works but then discover five minutes after putting it into production that it was a terrible idea, I thought I’d ask here.
The suggestion was to add a PHP authproc filter either to the authsource or to the hosted IdP metadata that manipulated the session expiration time in the state object, setting it to a few seconds from the current time. This would definitely solve the issue of the session sticking around and should allow for step-up authentication. But will it break propagating logout to the requesting IdP? In other words, if I set the session expiration time to a few seconds from now then the user gets sent back to the proxy IdP’s logout endpoint an hour later, will the proxy IdP still know anything about that session so that it can send the logout request on to the upstream IdP?
And is manipulating the session expiration in the state object any different than setting the session duration in config.php to a low value?
Thanks,
Keith