Аутентификация с использованием JWT для систем(идентификатор клиента) и пользователей (имя пользователя, пароль)

#api #authentication #delphi #jwt #token

Вопрос:

TL;DR:

  • Нам нужна аутентификация JWT для API, ориентированного на конкретных клиентов
  • У каждого клиента есть API.dll в их собственном пуле приложений и сайте на IIS
  • Нам нужны сторонние BI-решения, чтобы иметь возможность безопасно вызывать API
  • Нам нужны отдельные пользователи из базы данных клиентов, чтобы иметь возможность вызывать API с помощью существующего имени пользователя и пароля

Подробные сведения

На моей работе мы создали несколько простой rest API, для которого нам нужна аутентификация. Дело в том, что API не является общим для клиентов. Таким образом, каждый клиент получает библиотеку DLL, настроенную для чтения/записи в отдельные базы данных.

Мы хотели бы, чтобы наш API использовался системами 3 — й стороны, которые используют наши клиенты, например, решениями BI, а также для входа пользователей (конкретных пользователей нашей системы).

Текущая настройка

  • У каждого клиента есть свои собственные: база данных, пул приложений, сайт, настольное приложение и api.dll (работает в IIS)
  • Клиенты могут свободно создавать любое количество пользователей в нашем настольном приложении и предоставлять этим пользователям различные права. Эти пользователи не централизованы между клиентами. Таким образом, у нас нет информации о пользователях, созданных клиентами (если мы не заглянем в их базу данных).
  • Если клиент находится на собственном хостинге, он контролирует API и аутентификацию на своем сервере.
  • Если мы размещаем их решение, мы создаем пользователя active directory для этого API клиентов и включаем базовую проверку подлинности для этого сайта, предоставляя разрешение для этого одного пользователя.

Вопрос

Как можно настроить аутентификацию для этой несколько странной ситуации, разрешив аутентификацию одного пользователя, а также разрешив стороннюю интеграцию?

Как я понял из своего чтения, нам нужен какой-то гибрид между grant_type: password и grant_type:client_credentials .

Как и во всем, что связано с работой, время-это огромный фактор, но я хочу, чтобы решение как можно точнее соответствовало стандартам и лучшим практикам.

Комментарии:

1. Вы косвенно ссылаетесь на OAuth2. Зачем вам нужен OAuth2?

2. @Olivier У меня нет опыта авторизации, но я хотел бы, чтобы услуга была универсальной, чтобы мы могли использовать модель авторизации и для других услуг. Я не уверен, какие еще стандарты существуют для этой задачи

3. Почему бы вам просто не использовать базовую аутентификацию? Трудно понять, в чем ваша проблема.

4. @Olivier Мы разрабатываем программное обеспечение для управления персоналом. Когда сотрудник уволен или обновил информацию о зарплате через API, крайне важно, чтобы мы знали, какой пользователь это сделал. С помощью basic auth мы знаем только, какой пользователь WINDOWS запустил процесс API, но не знаем, какой аккаунт пользователя из нашей системы изменил данные.

5. Базовая аутентификация не имеет ничего общего с пользователями Windows. Вы можете отправить любые учетные данные, которые вам нравятся.