Принудительная двухфакторная аутентификация#

Процедура Require2ndFactor требует двухфакторной аутентификации для доступа к приложению. Если пользователь переходит в приложение в рамках единой сессии, то при наличии одного пройденного фактора у него будет дополнительно проверен второй фактор, т.е. SSO в этом случае не сработает.

public class Require2ndFactor implements Strategy {

    private final Logger logger = LoggerFactory.getLogger("com.identityblitz.idp.flow.dynamic");

    @Override public StrategyBeginState begin(final Context ctx) {
        if(ctx.claims("subjectId") != null){
            if (ctx.sessionTrack().split(",").length < 2)
                return StrategyState.MORE_BUILDER().addMethods(new String[]{"totp","sms","flex_gpn_key"}).setSelectMethod(true).build();
            else
                return StrategyState.ENOUGH();
        }
        else {
            return StrategyState.MORE(new String[]{});
        }
    }

    @Override public StrategyState next(final Context ctx) {
        if(ctx.justCompletedFactor() == 1)
            return StrategyState.MORE_BUILDER().addMethods(new String[]{"totp","sms","flex_gpn_key"}).setSelectMethod(true).build();

        else
            return StrategyState.ENOUGH();
    }
}
В строчке return StrategyState.MORE_BUILDER().addMethods(new String[]{"totp","sms","flex_gpn_key"}).setSelectMethod(true).build();:
  • в методе addMethods(new String[]{"totp","sms","flex_gpn_key"}) нужно указать доступные методы второго фактора аутентификации.

  • метод setSelectMethod(true) отвечает за отображение экрана выбора метода второго фактора аутентификации. Чтобы экран выбора метода не отображался, надо заменить true на false: return StrategyState.MORE_BUILDER().addMethods(new String[]{"totp","sms","flex_gpn_key"}).setSelectMethod(false).build();, то