Широкие API-ключи учетной записи в сценарии "многие ко многим" - PullRequest
0 голосов
/ 05 марта 2019

Я нахожусь в процессе разработки 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
}

Заранее спасибо

1 Ответ

0 голосов
/ 06 марта 2019

Посмотрите на этот пример, он описывает, как использовать ключ API для аутентификации пользователя с помощью компонента Symfony Security Официальная документация .

Я не смог найти документацию для 4. * версии Symfony, она должна сильно отличаться для этой версии.

Или вы можете включить LexikJWTAuthenticationBundle , который обеспечивает полную поддержку процесса аутентификации JWT.

...