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
функции.
Здесь вы можете найти полный исходный код