У меня есть вопрос относительно того, как я должен обладать архитектурой REST API, используя ключи доступа и ключи API.
У меня есть API, который нуждается в аутентификации. Я хочу включить два варианта использования:
-
Пользователь регистрируется в интерфейсе с использованием OAuth2 (предоставление пароля) и получает токен доступа. Этот токен используется для аутентификации пользователя. Таким образом, пользовательский интерфейс, который сам использует API, может извлекать данные и отображать их.
-
Я также хочу, чтобы у пользователя был ключ API для выполнения одних и тех же вызовов, но в его приложении. Очевидно, что, вопреки токену доступа, я хочу, чтобы ключ API был долговечным. Кроме того, вопреки токена доступа, привязанного к данному пользователю (если мы вводим командный механизм, каждый пользователь будет иметь различный токен доступа, хотя они имеют доступ к тем же ресурсам), ключ API должен быть уникальным для проекта.
В то время как похоже, я не уверен, как это сделать. Я думаю, что внутри, как ключи API, так и токены доступа должны храниться в одной таблице, но ключи API не имеют времени истечения. Я прав?
Одна вещь, которую я не уверен, также является концепцией клиента. Похоже, что в спецификации клиент больше похож на внешнее приложение. Однако могу ли я использовать эту концепцию здесь?
Например, каждый "проект" на самом деле является другим клиентом (хотя клиент здесь - это одно и то же приложение, а не приложение, созданное сторонним разработчиком).
Следовательно, если пользователь A создает учетную запись в системе, клиент A будет автоматически создан с токеном доступа, привязанным к клиенту A, с долгоживущим токеном доступа (иначе ключом API). Это может быть использовано для выполнения вызовов API непосредственно на его код, например.
Затем, если пользователь A войдет в панель управления, будет создан временный токен доступа, но на этот раз без приложения, но привязанного к пользователю, с коротким сроком службы.
Звучит ли это здорово? Кто-нибудь уже реализовал такую вещь?
Спасибо!