Я нахожусь в процессе разработки REST API, где пользователи могут иметь несколько учетных записей. Пользователь сможет получить доступ к API через аутентификацию JWT, а учетные записи будут иметь ключи API, позволяющие выполнять операции CRUD на моделях, связанных с учетной записью (учетная запись и модели связаны один-ко-многим).
Мой вопрос, как можно было бы реализовать это безопасным способом? Stripe имеет похожую логику, и ключи API, связанные с учетной записью, видны всем пользователям, подключенным к ней, что наводит меня на мысль, что они могут храниться в незашифрованном виде или зашифрованы с помощью общего ключа?
Я также не могу понять, как можно было бы создать одну конечную точку контроллера, которая использует либо токен jwt, либо ключ API учетной записи.
Я думаю, что это можно сделать, потребовав account_id для запросов, выполняемых с помощью JWT, и автоматически загрузить его для запросов ключей API, но будет ли это лучшим подходом или я что-то упустил?
Что-то вроде
public function createModel(Request $request)
{
if ($request->type === 'api_key')
$account_id = $this->getAccountIdFromKey($request->get('api_key'));
} else {
//Request is performed using user JWT
//Validate that $request has account_id set
}
//Logic related to saving Model here
}
Заранее спасибо