IDPv3.3 and programmatically selecting MFA based on attribute
Scott Koranda
skoranda at gmail.com
Tue Jan 24 09:04:00 EST 2017
Hi,
You can try something like this:
logger = Java.type("org.slf4j.LoggerFactory").getLogger("net.shibboleth.idp");
// Determine the username
usernameLookupStrategyClass = Java.type("net.shibboleth.idp.session.context.navigate.CanonicalUsernameLookupStrategy");
usernameLookupStrategy = new usernameLookupStrategyClass();
username = usernameLookupStrategy.apply(input);
logger.debug("{} username is {}", logPrefix, username);
// Resolve isMemberOf attribute for the authenticated user.
resCtx = input.getSubcontext("net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext", true);
resCtx.setPrincipal(username);
resCtx.getRequestedIdPAttributeNames().add("isMemberOf");
resCtx.resolveAttributes(custom);
That class to find the username is new in 3.3.
The above assumes Nashorn.
Scott K
> Hmm, close but not entirely there yet.
>
> I am occasionally, but not consistently, getting the following error:
>
> java.lang.RuntimeException: javax.script.ScriptException: TypeError: null has
> no such function "getPrincipalName" in <eval> at line number 10
>
> which corresponds to:
>
> resCtx.setPrincipal(input.getSubcontext(
>
> "net.shibboleth.idp.authn.context.SubjectCanonicalizationContext").getPrincipalName
> ());
>
> so the SubjectCanonicalizationContext is coming back as null. It seems to only
> happen on a second trip through the IDP, when the first trip only used the
> first factor (auth/Password, using the stock JAAS password, backed against Krb5
> if that matters at all).
>
> The script I am using is exactly the one from the Wiki under "Conditional use
> of two factors" with authn/Password for Flow1, authn/Duo for Flow2, and the
> attribute name and value changed to eduPersonAssurance and
> "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
> respectively (my eduPersonAssurance returns either that, or our custom Duo
> contact class of https://login.cmu.edu/duo )
>
> Any ideas? Is there a way to do any additional logging from the inline script
> to see why that context would be null?
>
> -jeaton
>
>
> On Jan 22, 2017, at 9:54 PM, Scott Koranda <skoranda at gmail.com> wrote:
>
>
> Why is it just accepting the previous Password
> authentication and not checking the attribute (and then
> upgrading to Duo)?
>
>
>
> This was covered in the past few days in another thread with
> the subject "MFA result reuse with Duo". You can find where it
> begins at
>
> http://marc.info/?l=shibboleth-users&m=148476673200662&w=2
>
> In short:
>
> Since the SP does not request a "MFA context" and you
> have not configured an override for that SP that requires an
> "MFA context", the IdP determines that your active authn/MFA flow
> result with the Password context satisifes the request. As
> such it does not re-run the authn/MFA flow and your strategy
> script never gets the chance to execute a second time for that
> user.
>
> You can change that behavior by setting
>
> idp.authn.favorSSO = false
>
> in idp.properties and then adding
>
> <property name="defaultAuthenticationMethods">
> <list>
> <ref bean="MfaPrincipal" />
> <ref bean="PasswordPrincipal" />
> </list>
> </property>
>
> to either an override for that particular SP or to the
> DefaultRelyingParty
> in relying-party.xml, where
>
> <bean id="MfaPrincipal" parent="shibboleth.SAML2AuthnContextClassRef"
> c:classRef="https://refeds.org/profile/mfa" />
>
> <bean id="PasswordPrincipal" parent=
> "shibboleth.SAML2AuthnContextClassRef"
> c:classRef=
> "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport" />
>
> (replace 'https://refeds.org/profile/mfa' with whatever you have
> configured your IdP to use as the MFA context).
>
> The order above is important--the "MfaPrincipal" must be first.
>
> With those changes, the IdP will run the authn/MFA flow if the user
> only has
> an active Password result.
>
>
>
> I have attempted to write this up. On this page
>
> https://wiki.shibboleth.net/confluence/display/IDP30/
> MultiFactorAuthnConfiguration
>
> see the section "Reuse of the Entire authn/MFA Flow Result (Or
> When Is a MFA Next Flow Strategy Executed?)"
>
> Note that Scott Cantor has not had a chance to review the text
> yet.
>
> The technical details, however, have been verified by at least
> one other deployer (Josh O'Dowd) so it should work.
>
> If you have any comments on the text please let me know, or
> feel free to edit it yourself (it is, after all a wiki...)
>
> Thanks,
>
> Scott K
>
>
More information about the users
mailing list