#api #security #oauth #oauth-2.0 #apiconnect
#API #Безопасность #oauth #oauth-2.0 #apiconnect
Вопрос:
У нас есть единый API X, который должен быть доступен как внутри, так и извне компании. Возможно ли разрешить базовую аутентификацию для X, используя только идентификатор клиента для внутренних потребителей, но требовать аутентификации OAuth для X с использованием идентификатора клиента и токена аутентификации для внешних потребителей? Предпочтительно, чтобы все поля идентификатора клиента и OAuth передавались в заголовке http обоим API?
В настоящее время у нас есть один продукт, содержащий два API (API X и API поставщика OAuth 2.0 с областью действия API X). Мы добавили два определения безопасности в API X, вариант 1 — OAuth и идентификатор клиента. Вариант 2 является базовым (только идентификатор клиента). Для OAuth мы используем конфиденциальную схему потока приложений, в которой приложение отправляет идентификатор клиента и секрет в API поставщика OAuth и возвращает токен аутентификации, а затем передает (тот же) идентификатор клиента и токен аутентификации в API X.
OAuth-доступ к API X работает нормально с использованием http-заголовков, но базовый доступ к API X работает только в том случае, если мы передаем идентификатор клиента в строке запроса. Мы бы предпочли всегда использовать только заголовки http.
Комментарии:
1. Это, вероятно, не поможет вам, поскольку это вопрос, специфичный для apiconnect, но в более общем плане API определенно может требовать либо заголовка Bearer, либо заголовка Basic authorization.
2. Спасибо, Эверт, да, я бы подумал, что, вообще говоря, так и должно быть.
Ответ №1:
Я все еще очень открыт для лучшего ответа, но мы нашли обходной путь.
Мы удалили базовое определение безопасности аутентификации из API X, чтобы оно имело только определение безопасности OAuth 2.0. Затем мы создали новый API Y, идентичный API X, за исключением того, что он имеет только базовое определение безопасности аутентификации. Он имеет тот же базовый путь и пути, что и API X. Мы создали второй продукт и добавили к нему API Y. Напомним, что продукт 1 содержит API X и его OAuth API. Мы подключили внутренних потребителей к продукту 2, а внешних — к продукту 1, и добились успеха. Авторизация полностью обрабатывается в заголовках.
Конечно, есть лучший способ?