#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. Вы можете отправить любые учетные данные, которые вам нравятся.