Skip to content

Синхронизация параметров шифрования паролей пользователей

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 { &nbsp ; 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: является правильным, переместите файл класса на правильный путь и сбросьте метод шифрования.