WSO2 Identity Server 5.7.0 - Запрос политики паролей для минимального срока действия пароля

Я подробно изучил все параметры политики паролей, которые были добавлены в последнюю версию WSO2 Identity Server (5.7.0). В то время как значительное улучшение по сравнению с версиями всего год назад, мой клиент все еще не удовлетворен одной проблемой. Используя средство проверки подлинности политики паролей, похоже, что мы можем заставить пользователя менять свой пароль каждые столько дней, а использование параметров политики, которые теперь используются по умолчанию, может обеспечить выполнение требования к истории паролей любого числа по нашему вкусу. Тем не менее, параметр истории может быть преодолен определенным пользователем, просто изменив свой пароль столько раз, сколько требуется для быстрого старения его пароля в одной настройке - если не было требуемого "минимального срока действия пароля", который не позволил бы ему сделать это. Все доступные параметры в журнале "История", "Шаблоны" и "Средство проверки пароля" не решают эту проблему. Эта ссылка из защиты от угроз безопасности Windows 10 посвящена обоснованию этой самой проблемы: https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/minimum-password-age.

Можно ли теперь установить минимальный возраст в WSO2 IS? Если нет, разве это не должно быть включено как политика паролей в опции истории?

1 ответ

Эта функция в настоящее время недоступна в продукте WSO2 IS, но мы можем легко выполнить это требование, используя расширения, доступные в основной системе управления пользователями. Доступная функция истории паролей имеет историю изменения пароля dateTime, мы можем использовать эти данные для обеспечения выполнения этого требования.

  • Создайте новый Identity Connector для настройки минимального срока действия пароля и Обработчик абстрактных событий для принудительной проверки во время события смены пароля.

    открытый класс PasswordMinAgeValidationHandler расширяет Abstract Event Handler реализует IdentityConnectorConfig {

    private static final Log log = LogFactory.getLog(PasswordMinAgeValidationHandler.class);
    
    @Override
    public void handleEvent(Event event) throws IdentityEventException {
    
        // Validate the password age with min age configured
    }
    
    @Override
    public String getName() {
        return "passwordMinAge";
    }
    
    @Override
    public String getFriendlyName() {
        return "Password Minimum Age";
    }
    
    @Override
    public String getCategory() {
        return "Password Policies";
    }
    
    @Override
    public Map<String, String> getPropertyNameMapping() {
        Map<String, String> nameMapping = new HashMap<>();
        nameMapping.put(PasswordMinAgeConstants.PM_MIN_AGE_ENABLE, "Enable Password Minimum Age Feature");
        nameMapping.put(PasswordMinAgeConstants.PW_MIN_AGE_COUNT, "Password Minimum Age (Days)");
        return nameMapping;
    }
    
    @Override
    public void init(InitConfig configuration) throws IdentityRuntimeException {
        super.init(configuration);
        IdentityPasswordMinAgeServiceDataHolder.getInstance().getBundleContext().registerService
                (IdentityConnectorConfig.class.getName(), this, null);
    }
    
    public Properties getDefaultPropertyValues(String tenantDomain) throws IdentityGovernanceException {
    
        Map<String, String> defaultProperties = new HashMap<>();
        defaultProperties.put(PasswordMinAgeConstants.PM_MIN_AGE_ENABLE, configs.getModuleProperties()
                .getProperty(PasswordMinAgeConstants.PM_MIN_AGE_ENABLE));
        defaultProperties.put(PasswordMinAgeConstants.PW_MIN_AGE_COUNT, configs.getModuleProperties()
                .getProperty(PasswordMinAgeConstants.PM_MIN_AGE_ENABLE));
        Properties properties = new Properties();
        properties.putAll(defaultProperties);
        return properties;
    }
    

    }

  • Сделайте этот класс пакетом OSGi и зарегистрируйте PasswordMinAgeValidationHandler как Abstract Event Handler

    protected void activate(ComponentContext context) {
       try {
        BundleContext bundleContext = context.getBundleContext();
        IdentityPasswordMinAgeServiceDataHolder.getInstance().setBundleContext(bundleContext);
    
        PasswordMinAgeValidationHandler handler = new PasswordMinAgeValidationHandler();
        context.getBundleContext().registerService(AbstractEventHandler.class.getName(), handler, null);
    
    
    } catch (Exception e) {
        log.error("Error while activating identity governance password min age component.", e);
    }
    

    }

  • Разверните jar в IS_HOME/repository/components/dropins
  • Добавьте следующие конфигурации в IS_HOME/repository/conf/identity/identity-event.properties

    module.name.13=passwordMinAge passwordMinAge.subscription.1=PRE_UPDATE_CREDENTIAL passwordMinAge.subscription.2=PRE_UPDATE_CREDENTIAL_BY_ADMIN passwordMinAge.enable=false passwordMinAge.count=5

  • Перезагрузите сервер IS

  • В конфигурации Resident Identity Provider -> Password Policies включите оба Password History а также Password Minimum Age функции.

Здесь вы можете найти полный исходный код

Другие вопросы по тегам