Я создал свой REST API и у меня есть несколько конечных точек (пример):
/v2/posts
/v2/user/{id}
Существует два способа доступа пользователей к этим конечным точкам:
- Моя CMS
- Некоторым другим API, который хочет использовать мой API
КЛЮЧИ API , можно считать токенами личного доступа; что-то, что сохраняется в БД и имеет is_revoked и является долгоживущим (по одному или более) для каждого пользователя.
CMS:
При условии , что пользователь входит в систему со своим именем пользователя и пароль на моей CMS он получит JWT (у пользователя JWT)
Когда пользователь пытается получить доступ к api.myapp.com / v2 / posts в CMS он отправит JWT (пытается получить доступ к данным)
Затем он получит запрошенные данные (Fetch data)
Внешний API:
Учитывая , что внешний API имеет ключ API для доступа к моему API
Когда этот внешний API пытается получить доступ к api.myapp .com / v2 / posts с использованием предоставленного ключа API
Тогда внешний API получит данные
Проблема:
Я хочу быть уверен, что JWT можно отправлять только из моего CMS, а ключ API - только из внешних API. В настоящее время внешний API может отправлять JWT моему API и получать данные. Я хочу иметь возможность различать, кто делает вызов API. Как этого добиться? В настоящее время я отправляю Bearer if JWT и Apikey если API-ключ.
Дополнительные вопросы
- Безопасно ли разрешать ключам JWT и API доступ к моему API? Должен ли я реализовать промежуточный уровень, который будет использовать JWT для генерации / повторного использования ключа API?
- Это хорошая идея для обработки областей внутри полезной нагрузки JWT?
- Должен ли я регулировать вызовы CMS и внешний API звонки?
Спасибо.