Платформа 1С предоставляет возможность создавать http сервисы, при этом штатно используется Basic authentication что является ограничением для использования 1С в качестве backend
Ниже представлен мой велосипед решение реализующее на платформе 1С JWT аутентификацию и приложение клиент на React js.
Пример реализующий следующий сценарий
Администратор 1С добавляет пользователя и отправляет ему приглашение по почте (в 1С встроена работа с почтовым сервером)
Пользователь по ссылке приглашения регистрируется в системе
Пользователь при необходимости может изменить пароль
Пользователь проходит aутентификацию.
Пользователь использует защищенные методы api
В 1С реализованы следующие методы
`${API_URL}/?typerequest=login
Получение ключей по логину и паролю
Запрос {email,password}Ответ {error, AccessToken, RefreshToken}
Ответ {error, AccessToken, RefreshToken}
set-cookie {refreshToken}`${API_URL}/?typerequest=RefreshToken
Комментарий: Обновление ключей
Запрос {}
Ответ {error, AccessToken, RefreshToken}
set-cookie {refreshToken}`${API_URL}/?typerequest=getConformationCode
Получение письма с кодом подтверждения на указанный адрес
Запрос {userID}
Ответ {error, requestKey}`${API_URL}/?typerequest=getKeyChangePassword
Получение ключа изменения пароля
Запрос {userID, requestKey - уникальный код запроса, формируется сервером при выполнении getConformationCode, code - код из письма}
Ответ {error, key}-
`${API_URL}/?typerequest=passwordChange
Комментарий: Установка нового пароля
Запрос {passwordСhangeKey, password}
Ответ {error, AccessToken, RefreshToken}
set-cookie {refreshToken}
WEB клиент React js
https://github.com/inzarubin80/authorization/tree/master/1c
Страница входа
![](https://habrastorage.org/getpro/habr/upload_files/655/075/f03/655075f03fd860dd0802cb136836b8c8.png)
Страница запроса кода подтверждения
![](https://habrastorage.org/getpro/habr/upload_files/02a/58d/082/02a58d08234eaa30f1621f152384f273.png)
Страница ввода кода подтверждения
![](https://habrastorage.org/getpro/habr/upload_files/825/bdc/f63/825bdcf637bc880d4ee3c385efab6b88.png)
Страница смены пароля
![](https://habrastorage.org/getpro/habr/upload_files/8c5/075/cbf/8c5075cbf92e76004dd8415b396f38b1.png)
В конфигурации 1c используются следующие основные объекты
Справочник Пользователи
Содержит список пользователей, в качестве идентификатора указывается почта пользователя
![](https://habrastorage.org/getpro/habr/upload_files/bde/f31/44f/bdef3144f11da6b4e07f7fec9c7b6639.png)
Регистр сведений "Ключи авторизации внешних пользователей"
Содержит ключи выданные пользователям
Ключ шифруется по алгоритму MD5
![](https://habrastorage.org/getpro/habr/upload_files/694/8db/9d5/6948db9d5592449483895e9ca6c863d4.png)
Регистр сведений "Коды подтверждения внешних пользователей"
Содержит коды подтверждений для смены пароля
Код шифруется по алгоритму MD5
![](https://habrastorage.org/getpro/habr/upload_files/c9f/68b/a90/c9f68ba9098a0c3bf5b783838096835e.png)
Регистр сведений "Пароли внешних пользователей"
Пароль шифруется по алгоритму MD4
![](https://habrastorage.org/getpro/habr/upload_files/8d5/fa4/123/8d5fa4123209f20e6a3601bedb8a274b.png)
В конфигурации используется реализация jwt токена на платформе 1С представленная Vasily Pintov https://github.com/pintov/1c-jwt
Комментарии (6)
eachebotarev
19.03.2022 20:12Какой в итоге механизм аутентификации в 1с? Можете подробно описать, что происходит с момента ввода Логина и пароля на клиенте до попадания в http сервис 1с?
sherbacov
MD5 - это 128-битный алгоритм хеширования
80lvlAPP Автор
Что из этого следует?
sherbacov
Шифрование - сохранение информации в неизменном виде, но без возможности доступа без ключа
Хеширование - Это формирования Хеша (контролей суммы) которая имеет коллизии (Несколько паролей будут иметь одну хеш сумму)
Помимо этого есть база соответствия md5 и исходных значений.
Тем самым вы ничего не шифруете. По факту храните пароли в открытом виде
Из этого следует, что лучше не писать свой сервис авторизации, а взять готовый аналог
https://en.wikipedia.org/wiki/Hash_function_security_summary
За несколько секунд ваш пароль будет определен.
80lvlAPP Автор
https://habr.com/ru/company/acribia/blog/413157/
я не профессионал по безопасности, но судя по этой статье md5 используется для хранения паролей в других решениях типа Wordpress и Joomla
в примере моего кода используется двойное хеширование
sherbacov
Вот вы даете ссылку на статью и даже ее не читаете.
Она написана в 2018 году и уже тогда было:
Wordpress
До версий 3.х пароли просто хэшировались с помощью MD5. Сейчас используется библиотека phpass.
Joomla >= 3.2
Like @Lodder said, starting from 3.2, passwords are hashed using Bcrypt.
Каждое дополнительное хеширование уменьшает время необходимое для перебора пароля, лучше так не делать