Оформление
Синхронизация параметров шифрования паролей пользователей
1. описание проблемы
При входе в систему FineBI требуется аутентификация пользователя. Система проверит введенное имя пользователя и пароль, чтобы обеспечить безопасность системы.
Информация для аутентификации (имя пользователя и пароль для входа) хранится в базе данных (встроенной в FineBI базе данных FineDB или других внешних базах данных), и аутентификация будет пройдена, если пароль, введенный пользователем, совпадает с паролем в базе данных.
Если база данных будет взломана, информация для аутентификации входа в систему будет раскрыта, что представляет угрозу для безопасности системы. Как избежать подобных ситуаций и обеспечить безопасность системы?
2. Решения
Пользователи могут зашифровать информацию для входа в базу данных. Это гарантирует, что даже если база данных будет взломана, реальные данные пользователя не будут получены.
Между тем, FineBI предоставляет функцию "Custom Password Encryption" в Sync User, которая может шифровать информацию для входа, вводимую пользователями на странице входа.Если зашифрованная информация для входа совпадает с информацией для входа в библиотеку FineDB, аутентификация будет пройдена. Как показано на рисунке ниже:

Шифрование Введение: Пользовательское шифрование паролей, т.е. настройка класса шифрования паролей.
Шифрование описано в классе и сохранено в папке %BI_Home%\webapps\webroot\WEB-INF\classes.
Для обеспечения безопасности пароля система FineBI выполняет вторичное шифрование SHA256 поверх заданного пользователем алгоритма шифрования.
Сценарий: необходимо использовать пользовательское шифрование, когда пароль в наборе данных синхронизированного сервера является шифрованным текстом после пользовательского шифрования.
Интерфейс шифрования: напишите пользовательский класс шифрования паролей с помощью этого интерфейса, чтобы зашифровать "пароль" или "имя пользователя и пароль", введенные пользователем, с помощью пользовательских правил шифрования. Поддерживаются следующие интерфейсы:
1) для получения шифротекста необходимо зашифровать только пароль: String encode(String originText);// входной параметр - пароль в виде открытого текста, пароль шифруется для получения шифротекста
2) закодируйте имя пользователя и пароль для получения шифротекста: String encode(String originUserName, String originPassword);//вход - имя пользователя и пароль в открытом виде, результат возврата - символ шифротекста
Примечание 1: где String encode(String originUserName, String originPassword); метод шифрования - 2019-01-18 Новый интерфейс, содержит функцию интерфейса 1, рекомендуется использовать этот интерфейс.
Примечание 2: Для использования собственного алгоритма шифрования необходимо наследовать класс AbstractPasswordValidator.
3. Идеи для реализации
3.1 Логика зашифрованной аутентификации
Если пользователю удается успешно войти в систему FineBI после ввода пароля на странице входа. Тогда в процессе выполняется три шифрования и одна проверка логина.
происходит после синхронизации пользователя:
(1) Первое шифрование: после синхронизации пользователей система зашифрует шифротексты в наборе данных сервера с помощью SHA256, а полученные шифротексты будут записаны в библиотеку FineDB.
Происходит, когда пользователь входит в систему:
(2) Второе шифрование: пользовательское шифрование пароля, объектом шифрования является пароль в открытом виде, введенный пользователем.
(3) Третье шифрование: система выполняет шифрование SHA256, а зашифрованным объектом является шифротекст после второго шифрования.
4) Аутентификация входа: сравните шифротекст, полученный после третьего шифрования, с шифротекстом в библиотеке FineDB, и аутентификация будет пройдена, если он совпадает.
Как показано на рисунке ниже:

3.2 Этапы реализации
1) Настройте класс шифрования паролей, чтобы зашифровать простой пароль A, введенный пользователем на странице входа в систему.
- Подготовка среды компиляции
- Запись файлов Java
- Компиляция файла класса
2) Создайте серверный набор данных для хранения информации о входе пользователя в систему, включая имя пользователя, пароль для входа в систему и т. д., где пароль для входа является пользовательским зашифрованным шифротекстом B.
Примечание: После синхронизации пользователей система зашифрует шифротекст в наборе данных сервера один раз с помощью SHA256, а полученный шифротекст будет записан в библиотеку FineDB.
3) Синхронизируйте информацию о пользователе с системой FineBI для аутентификации входа.
- В качестве источника пользователя используется набор данных сервера, подготовленный на шаге 2.
- Password выбирает пароль в наборе данных сервера в качестве пользовательского зашифрованного шифротекста.
- Установите метод шифрования на Custom Encryption, используя класс Password Encryption, подготовленный в шаге 1.
4. Пример шифрования пользовательского пароля
Пример: напишите класс шифрования паролей BASE64 для шифрования "пароля", введенного пользователем, с помощью пользовательских правил шифрования, а затем выполните аутентификацию для успешного входа в систему FineBI.
Примечание: В данной статье приведен лишь простой пример шифрования Base64, для других распространенных методов шифрования в разделе 5 приведены файлы пользовательских классов, которые пользователи могут скачать и использовать в соответствии со своими потребностями.
4.1 Подготовка среды компиляции
Конкретные шаги см. в разделе: компиляция Java-программ
4.2 Запись файлов Java
Определите в компиляторе класс с именем Base64PasswordValidator.java, который расширяет AbstractPasswordValidator.Java Код выглядит следующим образом:
package com.fr.decision.privilege.encrpt;; import com.fr.base.Base64; import com.fr.base.ServerConfig; import com.
.fr.decision.privilege.encrpt.AbstractPasswordValidator; import com.fr.log.FineLoggerFactory; import java.io.
UnsupportedEncodingException; public class Base64PasswordValidator extends AbstractPasswordValidator { &
nbsp; public Base64PasswordValidator() { } public
String encode(String originText) { try {   ; return Base64.encode(originText.getBytes(ServerConfig.getInstance().
getServerCharset()))); } catch (UnsupportedEncodingException var3)&
nbsp;{ FineLoggerFactory.getLogger().debug(var3.getMessage(
)); return "";
} } }4.3 Компиляция файлов классов
Нажмите, чтобы загрузить и распаковать файл класса:Base64PasswordValidator.zip
1) Создайте файл класса
Скомпилируйте Base64PasswordValidator.java, чтобы создать файл Base64PasswordValidator.class .
2) Импортируйте файл класса
Сохраните скомпилированный файл Base64PasswordValidator.class в папке %BI_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege/encrpt.
Примечание: Если папка decision/privilege/encrpt не существует в %BI_HOME%\webapps\webroot\WEB-INF\classes\com\fr, вы можете создать новую папку самостоятельно.
4.4 Создание наборов данных сервера
Пользователям необходимо зашифровать информацию для входа в базу данных с помощью BASE64. Затем система снова шифрует информацию с помощью SHA256 и записывает ее в библиотеку FineDB для проверки логина. Это гарантирует, что даже если база данных будет взломана, реальные данные пользователя не смогут быть получены.
4.4.1 Подготовка данных
Подготовьте таблицу с информацией о пользователе, в которой пароль в столбце password является шифротекстом, зашифрованным в формате BASE64. Структура таблицы показана на следующем рисунке:
Пример: если пользователь a действительно вводит на странице входа в систему пароль 123456, то пароль, хранящийся в столбце password, представляет собой шифрованный шифр BASE64: MTIzNDU2.
Нажмите, чтобы загрузить Информационный лист пользователя: Синхронизированные пользователи.xlsx
4.4.2 Добавление нового набора данных сервера
С помощью стороннего инструмента, например Navicat, импортируйте вышеуказанную таблицу в базу данных и установите соединение между системой и базой данных. Ниже приведен пример базы данных FRDemo.
1) Администратор входит в систему FineBI, нажимает "Management System > Data Connection > Server Dataset", чтобы создать "SQL Dataset". Как показано на рисунке ниже:

2) Задайте имя набора данных "Синхронизированные пользователи", выберите "FRDemo" для подключения к данным и SQL-запрос:
select * from Synchronised Users
4.5 Настройка метода шифрования
Примечание: Если пользователи выбирают другой метод шифрования пароля, они могут изменить класс шифрования в этом разделе 4.5.2. В разделе 5 данного документа представлены часто используемые файлы пользовательских классов шифрования, которые пользователи могут выбрать в соответствии со своими потребностями.
Для повышения безопасности системы в разделе "Синхронизированные пользователи" можно выбрать шифрование с помощью пользовательского пароля.
4.5.1 Синхронизация пользователей
1) Администратор входит в систему FineBI, нажимает "System Management > Управление пользователями > Все пользователи", нажимает "Синхронизировать пользователей".
Появится окно с запросом "Сохранять ли существующие несинхронизированные данные, включая импортированных/добавленных пользователей, должности в отделах, роли", как показано на рисунке ниже:
Примечание 1: В этой главе описаны правила обновления данных для "пользователей, которые никогда не выполняли синхронизацию" и "пользователей, которые выполняют первую операцию синхронизации, когда синхронизация не включена".
Если вы ранее синхронизировали пользователя, выполнение операции синхронизации не в первый раз, когда синхронизируемый пользователь включен, не приведет к появлению всплывающего окна этого раздела, и синхронизация не будет выполнена в соответствии с правилами обновления, приведенными в этом разделе.
Примечание 2: Синхронизированные пользователи и "Пользователи, добавленные/импортированные вручную" могут сосуществовать.

Логика обновления, соответствующая различным вариантам, выглядит следующим образом:
| опция | определить |
|---|---|
| бронирование | Если существующего пользователя нет в наборе данных синхронизированного сервера, информация и разрешения этого пользователя сохраняются без измененийЕсли в наборе данных сервера есть существующий пользователь (с тем же именем пользователя)😗 Имя пользователя остается неизменным, а привилегии сохраняются * Обновление имени, пароля, мобильного телефона, электронной почты для этого пользователя * Текущая должность и роль пользователя в отделе переопределяются, если они существуют в наборе сервера синхронизации. * Если текущая должность или роль пользователя в отделе не существует в наборе сервера синхронизации, она останется неизменной. |
| очистить | Имя пользователя, имя, пароль, мобильный телефон, адрес электронной почты, отдел, должность, роль и разрешение существующих "вручную добавленных/импортированных пользователей" платформы удаляются, а пользователи заново синхронизируются. |
Примечание: В зависимости от выбранной логики обновления некоторые данные пользователя обновляются после первой синхронизации.
Автоматически обновляться могут только те пользователи, которые были переведены в тип "Синхронизация".
При последующих синхронизациях набор данных больше не может переопределять обновление встроенных данных, иначе будет сообщено о конфликте.
4.5.2 Конфигурация шифрования
(1) Выберите источник пользователей: "Синхронизированные пользователи" из набора данных сервера, подготовленного в пункте 4.4.2.
2) Пароль
(3) Метод шифрования: пользовательское шифрование пароля, с использованиемпользовательскогокласса шифрованияBase64PasswordValidator.class, подготовленногов разделе 4.3.
Как показано на рисунке ниже:
Примечание: Если вы хотите использовать пользовательский метод шифрования, при синхронизации пользователей нельзя отмечать опцию "Пользователь может быть отредактирован", иначе пользователи не смогут войти в систему.

Нажмите "OK", чтобы успешно синхронизировать пользователей. Как показано на рисунке ниже:

4.6 Предварительный просмотр эффектов
Пользователь a входит в систему FineBI:
Шифротекст пользователя a в наборе данных сервера: MTIzNDU2, а его расшифрованный открытый текст: 123456.
Введите простой пароль: 123456 на странице входа и нажмите "Войти", чтобы успешно войти в систему FineBI. Как показано на рисунке ниже:

5. распространенные методы шифрования пользовательских паролей
В этой статье представлен часто используемый файл шифрования паролей, пользователи могут использовать его в соответствии со своими потребностями. Щелкните, чтобы загрузить файл и поместить его в указанную папку, измените пользовательский класс в разделе 4.5.2, а для остальных шагов обратитесь к примеру в разделе 4.
5.1 Шифрование имен пользователей и паролей в формате BASE64
FineBI поддерживает использование шифрования BASE64 для совместного шифрования имени пользователя и пароля, вводимого пользователем.
Теперь предоставьте скомпилированный класс шифрования BASE64, нажмите для загрузки файла: Base64UserPasswordValidator.class.zip
1) Нажмите кнопку скачать и распакуйте файл класса, сохраните его в папке %BI_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege.
2) Настройте шифр BASE64 для столбца паролей в наборе данных сервера как "имя пользователя + пароль".
Пример: если пароль пользователя a равен 123456, то столбец паролей в наборе данных сервера должен представлять собой зашифрованный в BASE64 шифр "YTEyMzQ1Ng==" для a123456.
5.2 Зашифрованный пароль SHA256
FineBI поддерживает шифрование введенных пользователем паролей с помощью SHA256-шифрования.
Скомпилированный класс шифрования SHA256 теперь доступен, нажмите, чтобы загрузить файл: SHA256PasswordValidator.zip
Нажмите кнопку скачать и распакуйте файл класса, сохраните его в папке %BI_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege/encrpt.
5.3 Шифрование имен пользователей и паролей с помощью SHA256
FineBI поддерживает использование шифрования SHA256 для совместного шифрования имени пользователя и пароля, вводимого пользователем.
Скомпилированный класс шифрования SHA256 теперь доступен, нажмите, чтобы загрузить файл: CustomSHA256PasswordValidator.zip
1) Нажмите кнопку скачать и распакуйте файл класса, сохраните его в папке %BI_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege/encrpt.
2) Создайте зашифрованный с помощью SHA256 шифртекст "имя пользователя+пароль" в столбце пароля набора данных сервера.
Пример: пароль пользователя a равен 123456, тогда столбец паролей в наборе данных сервера должен представлять собой зашифрованный SHA256 шифртекст a123456 " 20f645c703944a0027acf6fad92ec465247842450605c5406b50676ff0dcd5ea"
5.4 Зашифрованные пароли MD5 (32-битные строчные буквы)
FineBI поддерживает шифрование вводимых пользователем паролей с помощью MD5 (32-битный строчный) шифр.
Теперь предоставьте скомпилированный класс шифрования MD5 (32-битный строчный регистр), нажмите для загрузки файла: MD5CasePasswordValidator.zip
Нажмите кнопку скачать и распакуйте файл класса, сохраните его в папке %BI_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege.
5.5 Шифрование имен пользователей и паролей с помощью MD5 (32-битный строчный регистр)
FineBI поддерживает использование шифрования MD5 (32-битный строчный регистр) для совместного шифрования имени пользователя и пароля, вводимого пользователем.
Теперь предоставьте скомпилированный класс шифрования MD5 (32-битный строчный регистр), нажмите для загрузки файла: MD5CaseUserPasswordValidator.class.zip
1) Нажмите кнопку скачать и распакуйте файл класса, сохраните его в папке %BI_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege.
2) Настройте столбец паролей в наборе данных сервера так, чтобы он представлял собой MD5 (32-битный строчный) зашифрованный текст шифра для "имя пользователя + пароль".
Пример: если пароль пользователя a равен 123456, то столбец паролей в наборе данных сервера должен представлять собой MD5 (32-битный строчный) зашифрованный шифротекст "dc483e80a7a0bd9ef71d8cf973673924" для a123456.
5.6 Зашифрованные пароли MD5 (32-битный верхний регистр)
FineBI поддерживает шифрование введенных пользователем паролей с помощью MD5 (32-битный верхний регистр) шифрования.
Теперь предоставьте скомпилированный класс шифрования MD5 (32-битный верхний регистр), нажмите для загрузки файла: MD5UpperCasePasswordValidator.zip
Нажмите кнопку "Загрузить", распакуйте файл и сохраните его в папке %FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege.
5.7 Шифрование имен пользователей и паролей с помощью MD5 (32-битный верхний регистр)
FineBI поддерживает использование шифрования MD5 (32-битный верхний регистр) для совместного шифрования имени пользователя и пароля, вводимого пользователем.
Теперь предоставьте скомпилированный класс шифрования MD5 (32-битный верхний регистр), нажмите для загрузки файла: MD5UpperCaseUserPasswordValidator.zip
1) Нажмите кнопку "Загрузить" и распакуйте файл, затем сохраните его в папке %FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege.
2) Настройте шифр MD5 (32-битный верхний регистр) для столбца паролей в наборе данных сервера как "имя пользователя + пароль".
Пример: если пароль пользователя a равен 123456, то столбец паролей в наборе данных сервера должен представлять собой MD5 (32-битный заглавный) зашифрованный шифротекст "DC483E80A7A0BD9EF71D8CF973673924" для a123456.
6. условия
6.1 Ошибка NoClassDefFoundError
Описание проблемы:
После установки пользовательского метода шифрования синхронизация пользователя завершается с ошибкой: NoClassDefFoundError: com/fr/decision/privilege/Base64PasswordValidator (неверное имя: com/fr/decision/privilege/ encrpt/Base64PasswordValidator)

Анализ причин:
Файл класса пользовательского шифрования сохранен по неправильному пути.
Решение:
В сообщении об ошибке путь после wrongname: является правильным, переместите файл класса на правильный путь и сбросьте метод шифрования.