shibboleth.c14n.attribute.PrincipalNameLookupStrategy bean

Cantor, Scott cantor.2 at osu.edu
Wed Feb 15 19:28:42 EST 2017


On 2/15/17, 7:12 PM, "users on behalf of Andrew Morgan" <users-bounces at shibboleth.net on behalf of morgan at orst.edu> wrote:

> The documentation for Attribute-based Canonicalization [1] teases us with 
> "This will become significantly simpler to use in a future release (via 
> the shibboleth.c14n.attribute.PrincipalNameLookupStrategy bean)..."

Oops, needs to be updated. I'll redo it and park the legacy examples.

> Since I upgraded to v3.3 recently, I'm re-visiting the c14n configuration. 
> Is there some shiny new way to handle c14n now?  My users can login with 
> either their uid or eppn.  I followed the existing documentation at [1]
>  with a scripted attribute to do this.  If there is a simpler way, that
>  would be great!

I don't know if I'd say it's shiny, it's just less cluttered and confusing than having to do that weird check inside the resolver, which is really depending on a lot of internals to know what it's doing. Actually now that I'm reading the original example (which we got from Mike I think), I actually don't understand it, or perhaps it's actually wrong, so yeah, I'd say go with mine.

My Duo set up relies on this to normalize down about 4 different inputs down to name.# with the LDAP lookup, and my bean inside the attribute-sourced-c14n-whatever file is (my scripts use Rhino, so beware):

   <bean id="shibboleth.c14n.attribute.PrincipalNameLookupStrategy"
            class="net.shibboleth.idp.profile.context.navigate.ScriptedContextLookupFunction"
            factory-method="inlineScript">
        <constructor-arg>
            <value>rhino-nonjdk</value>
        </constructor-arg>
        <constructor-arg>
            <value>
            <![CDATA[
            importPackage(Packages.net.shibboleth.idp.authn.principal);
            importPackage(Packages.net.shibboleth.idp.authn.context);
            var principalName = null;
            var subject = profileContext.getSubcontext(SubjectCanonicalizationContext).getSubject();
            var princs = subject.getPrincipals(UsernamePrincipal);
            if (princs.size() == 1) {
                principalName = princs.iterator().next().getName();
            }
            principalName;
            ]]>
            </value>
        </constructor-arg>
    </bean>

I would say that's a bit less cluttered, and certainly the resolver config is simpler without it. 

I can redo the example with that approach.

-- Scott




More information about the users mailing list