No attributes after enabling MFA flow
Paul B. Henson
henson at cpp.edu
Wed May 16 23:50:02 EDT 2018
On Thu, May 17, 2018 at 03:34:42AM +0000, Paul B. Henson wrote:
> I'm going to call it a night and revisit this in the morning, but any
Hmm, well, I tried one quick thing before giving up; if I change my MFA
checkSecondFactor script to be just:
nextFlow = 'authn/Duo';
nextFlow;
attributes show up. So there must be something goofy in my more
complicated script <sigh>. I didn't think I was having this problem when
I was initially testing in dev, but after updating the MFA selection
logic to something more complicated I think I only tested with CAS
services, not SAML ones, in my dev environment.
Does anything jump out as broken in this?
// list of regular expressions for MFA strictly required service providers
mfa_sp_regexes = [
'https://login.calstate.edu/cfs/mfa',
];
logger = Java.type('org.slf4j.LoggerFactory').getLogger('mfa-check');
authCtx = input.getSubcontext('net.shibboleth.idp.authn.context.AuthenticationContext');
mfaCtx = authCtx.getSubcontext('net.shibboleth.idp.authn.context.MultiFactorAuthenticationContext');
nextFlow = null;
resCtx = input.getSubcontext('net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext', true);
usernameLookupStrategyClass = Java.type('net.shibboleth.idp.session.context.navigate.CanonicalUsernameLookupStrategy');
usernameLookupStrategy = new usernameLookupStrategyClass();
resCtx.setPrincipal(usernameLookupStrategy.apply(input));
resCtx.getRequestedIdPAttributeNames().add('cppEduPersonStatusFlag');
resCtx.resolveAttributes(custom);
status_flag = resCtx.getResolvedIdPAttributes().get('cppEduPersonStatusFlag');
stringType = Java.type("net.shibboleth.idp.attribute.StringAttributeValue");
if (status_flag != null && status_flag.getValues().contains(new stringType('duo_activated'))) {
logger.info('user has Duo available');
nextFlow = 'authn/Duo';
}
else {
rpid = profileContext.getSubcontext('net.shibboleth.idp.profile.context.RelyingPartyContext').getRelyingPartyId();
logger.info('no Duo available for user');
// 'every' returns true if the check returns true for every element, or
// false as soon as a check returns false. So it will return true if none
// of the regexps match the SP, or false as soon as one does.
if (!mfa_sp_regexes.every(function(element)
{ re = new RegExp(element); return !re.test(rpid); })) {
logger.info('SP ' + rpid + ' requires MFA, failing');
mfaCtx.setEvent('MFAlacking');
}
}
nextFlow;
Thanks...
--
Paul B. Henson | (909) 979-6361 | http://www.cpp.edu/~henson/
Operating Systems and Network Analyst | henson at cpp.edu
California State Polytechnic University | Pomona CA 91768
More information about the users
mailing list