essence-community/core

Доработки аутентификации

radist-nt opened this issue · 2 comments

Есть необходимость использования аутентификации в различных системах с общей базой пользователей, при этом сами пользователи могут аутентифицироваться в разных источниках (разные AD-домены, openid и т.п.). Есть идея использовать аутентификацию в core в качестве этой общей базы. Отсюда появляется определённый набор требований.

Требования к системе аутентификации:

  • долждна быть возможность использования одновременно как локальной аутентификации, так и подключения внешних провайдеров (например, доменов в различных AD)
  • при аутентификации через внешнего провайдера, должна быть возможность получения как данных пользователя, так и его ролей (и то и другое должно настраиваться независимо для каждого провайдера), при этом должна остаться возможность для таких пользователей часть ролей и атрибутов пользователя назначать локально (тех, которые провайдер не предоставляет)
  • должна быть возможность использования аутентификации внешними системами (не построенными на базе Core), например, посредством вызова запроса аутентификации (при этом на вход должен, дополнительно к остальным параметрам, передаваться код системы и должно дополнительно проверяться наличие доступа к хотя-бы одной роли этой системы)
  • для локальных пользователей хеш пароля хранится универсальным образом, позволяя при необходимости в любой момент сменить алгоритм хеширования на рабочей системе, перед хешированием пароля, к нему должна подмешиваться секретная часть, которая хранится на среднем слое и никогда не попадает в БД, чтобы усложнить подбор простых паролей при утечке БД
  • ответ при неуспешной аутентификации не должен содержать информации о причине неуспеха, чтобы не позволять перебор пользователей (т.е., у пользователя не должно быть способа узнать, введён ли существующий логин)
  • после неправильного ввода логина или пароля, при повторной попытке по тому-же логину, должна добавляться нарастающая задержка перед проведением аутентификации, эта задержка должна сбрасываться через настраиваемое время

Требования к системе администрирования пользователей:

  • разграничение администрирования ролей по системам: для каждой системы вводится действие, дающее доступ на администрирование этой системы (уровень доступа определяется отдельно)
  • разграничение уровней доступа (отдельные действия):
    -- настройка внешних провайдеров, справочника реквизитов пользователей и действий
    -- настройка ролей любых систем (без назначения действия по администрированию системы)
    -- настройка ролей по системам, для которых пользователь является администратором
    -- назначение пользователям ролей из любых систем
    -- назначения пользователям ролей из систем, для которых пользователь является администратором
    -- настройка пользователей от любых провайдеров (может заводить пользователей, редактировать атрибуты и назначать роли при наличии одного из предыдущих двух действий)
    -- настройка пользователей от провайдера, к котором относится пользователь
  • должна быть возможность логического отключения отдельных пользователей, провайдеров аутентификации и привязок пользователей к провайдерам
  • должна быть возможность массового добавления пользователей из внешнего провайдера, а также массового назначения/отмены назначения ролей

Хотелось бы, чтоб при этом была бы возможность или отключить кеширование прав при авторизации из внешних систем, или иметь возможность настраивать время жизни данного кеша. Например раз в 10 минут.

toksy commented

В рамках работы платформы , авторизация таким образом дорабатывать не будет.