Платформа 1С предоставляет возможность создавать http сервисы, при этом штатно используется Basic authentication что является ограничением для использования 1С в качестве backend

Ниже представлен мой велосипед решение реализующее на платформе 1С JWT аутентификацию и приложение клиент на React js.

Пример реализующий следующий сценарий

  1. Администратор 1С добавляет пользователя и отправляет ему приглашение по почте (в 1С встроена работа с почтовым сервером)

  2. Пользователь по ссылке приглашения регистрируется в системе

  3. Пользователь при необходимости может изменить пароль

  4. Пользователь проходит aутентификацию.

  5. Пользователь использует защищенные методы 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

Страница входа

Страница запроса кода подтверждения

Страница ввода кода подтверждения

Страница смены пароля

В конфигурации 1c используются следующие основные объекты

Cсылка на конфигурацию

Справочник Пользователи

Содержит список пользователей, в качестве идентификатора указывается почта пользователя

Регистр сведений "Ключи авторизации внешних пользователей"

Содержит ключи выданные пользователям

Ключ шифруется по алгоритму MD5

Регистр сведений "Коды подтверждения внешних пользователей"

Содержит коды подтверждений для смены пароля

Код шифруется по алгоритму MD5

Регистр сведений "Пароли внешних пользователей"

Пароль шифруется по алгоритму MD4

В конфигурации используется реализация jwt токена на платформе 1С представленная Vasily Pintov https://github.com/pintov/1c-jwt

Комментарии (6)


  1. sherbacov
    18.03.2022 13:54

    Код шифруется по алгоритму MD5 

    MD5 - это 128-битный алгоритм хеширования


    1. 80lvlAPP Автор
      18.03.2022 15:23

      Что из этого следует?


      1. sherbacov
        18.03.2022 15:36

        Шифрование - сохранение информации в неизменном виде, но без возможности доступа без ключа

        Хеширование - Это формирования Хеша (контролей суммы) которая имеет коллизии (Несколько паролей будут иметь одну хеш сумму)

        Помимо этого есть база соответствия md5 и исходных значений.

        Тем самым вы ничего не шифруете. По факту храните пароли в открытом виде

        Из этого следует, что лучше не писать свой сервис авторизации, а взять готовый аналог

        https://en.wikipedia.org/wiki/Hash_function_security_summary

        This attack takes seconds on a regular PC.

        За несколько секунд ваш пароль будет определен.


        1. 80lvlAPP Автор
          18.03.2022 15:50


          https://habr.com/ru/company/acribia/blog/413157/
          я не профессионал по безопасности, но судя по этой статье md5 используется для хранения паролей в других решениях типа Wordpress и Joomla
          в примере моего кода используется двойное хеширование


          1. sherbacov
            18.03.2022 16:04

            Вот вы даете ссылку на статью и даже ее не читаете.

            Она написана в 2018 году и уже тогда было:

            Wordpress

            До версий 3.х пароли просто хэшировались с помощью MD5. Сейчас используется библиотека phpass.

            Joomla >= 3.2

            Like @Lodder said, starting from 3.2, passwords are hashed using Bcrypt.

            двойное хеширование

            Каждое дополнительное хеширование уменьшает время необходимое для перебора пароля, лучше так не делать


  1. eachebotarev
    19.03.2022 20:12

    Какой в итоге механизм аутентификации в 1с? Можете подробно описать, что происходит с момента ввода Логина и пароля на клиенте до попадания в http сервис 1с?