Hi Mike,
> On 11 Apr 2015, at 20:49 pm, Mike Grady <
mapg...@gmail.com> wrote:
> That's interesting, because I'd always assumed that was actually a prime use case that SSP was designed for. Certainly has done a great job of supporting all the SAML standards around being used in such a way. ;-)
I guess that was user-driven. Even though we don’t support proxy mode, there’s plenty of people using it that way, just because it is easy and convenient. I’ve used it like that myself. However, that’s also the reason why some simple things do not work when SSP acts as a proxy, such as this or SLO, for instance. Logout messages are correctly propagated upstream, just because when you receive a logout request, you know you need to logout from the authentication source you used too, and if that’s a SAML SP, then you will also initiate logout towards the IdP. On the other hand, if you get a logout request from an IdP, you really need to be conscious of your condition as a proxy to propagate logout downstream. But SSP is not, it will only see itself as an SP, so logout will end in there and any other SP connected to the proxy will keep their sessions.
> Even though I had to disable SSP, being used as an IdP Proxy, from sending the Scoping element to proxied IdPs, because one of them is ADFS, and that out and out rejects any Authn Request with the Scoping element.
That’s interesting. Never heard of that issue before.
> (If you are interested, I could look into making that change a configurable one by SP authn source, and put in a pull request for that. For the particular service that is for, it was just simpler to disable that Scoping element all together, because none of the proxied IdPs do anything with it today anyways.) On the other hand, the fact that it exposes the Scoping element when received in an Authn Request from another IdP is quite useful, because it lets us know the originating SP, so we could label things appropriately. Because we have a use case where another Proxy is between the originating SP and our Proxy:
>
> External SP -> External Proxy -> Our IdP Proxy -> User/home IdP
Since we were unaware of this, it’s really up to you. If at some point you need to fix it and you submit a pull request, we’ll be glad to merge it.
> I'd hope that the admin knows what they are doing when/if they configure SP authentication sources.
But if we want them to know what they are doing, we should probably have some documentation explaining how things work and why they work like that, which we haven’t today, since we don’t support proxy mode. So now there’s room for plenty of mistakes, I think.
> So, yes, I agree that if anything in the "chain" from:
>
> external/originating SP -> IdP Proxy -> AuthnSource SP -> "home” IdP
>
> sets either ForceAuthn or isPassive to TRUE, then that is what should be sent/set in the Authn Request sent to the "home" IdP. I.e TRUE should be "sticky" and trump any FALSE. And that is a simple change, as we made the change in the code I suggested in my original note in this thread, and that indeed does such for ForceAuthn, I just need to do the same thing for isPassive, and submit a pull request for that.
Good, thanks!
> However, I'd also likely argue that the same thing should be true for AuthnContextClassRef and NameIDPolicy. Presumably, the SSP admin knows what they are doing if they decide to give those explicit values in the config for an Authn Source SP. I can think of several possible use cases, within the realm of IdP Proxy usage, for such:
>
> - external SP sends something that is considered equivalent to what the proxied IdPs do, but the proxied IdPs use a different value. Yes, you could try to get all the proxied IdPs to add this new value as equivalent, or you could just take care of it in the Proxy.
>
> - similarly, there are folks adding in 2/Multifactor Authn as an authn processing filter in SSP. The proxied IdP just does username/password/whatever, and then the Proxy additionally chooses to have them do an additional 'different factor" authentication at the proxy. In that case, if the originating SP requested a 2/Multifactor authn context, you would want to override that and *not* send that authn context thru to the proxied IdPs.
>
> Of course, you'd then need authn filters to manipulate and check what happened with these authn contexts (like there already is the saml:ExpectedAuthnContextClassRef filter).
>
> And you could make the same sort of argument around NameIDPolicy.
>
> So I do think that ultimately that SSP should take an explicit setting for AuthnContextClassRef and/or NameiDPolicy from a saml:SP authn source and use that in the Authn Request sent to a proxied IdP. But then clearly document that it is up to the person configuring that to then ensure there is authn filter logic to ensure that ultimately the appropriate things were done to meet the requested requirements of the originating SP's Authn Request, and if so, return the originally requested values for AuthnContextClassRef and NameiDPolicy.
>
> What od you think?
I totally agree with you. However, I think we need some infrastructure in place for that to be possible, so that’s why I was suggesting to simply pass through the values we get from the end service provider. In other words, I see two options:
- either we support this officially, add the configuration options and stuff necessary to properly configure AuthnContextClassRefs and NameIDPolicies, their mappings, equivalences, filters and so on, or
- we do not support it, in which case we should just bypass whatever the SP is asking for.
> p.s. Now, even though that is how I'd think it should work, I don't yet have a pressing need for that behavior around those two options, so I'm not as motivated (yet) to propose code changes to "make it so”.
I would really like to see some more flexibility and options in SSP regarding, at least, AuthnContextClassRefs. I think it makes sense to associate different classes with different auth sources, for example, and dynamically decide which auth source to use depending on the context class we are required. However, just like you, I have very little need for it right now, so I guess we’ll stay as we are for a while :-)