Я создаю сервис, который обрабатывает контент с разных сайтов.Каждый веб-сайт имеет своих собственных пользователей.
Поэтому мне нужно аутентифицировать веб-сайт, который обращается к моему API, и мне нужно аутентифицировать пользователя, который входит в систему с этого веб-сайта.
Поскольку Yii2 не можетобрабатывать 2 параллельных пользовательских идентификатора и по этому сценарию я не могу использовать роли.Я решил построить его следующим образом:
Работа с веб-сайтом
У меня есть таблица с именем "Веб-сайт", веб-сайт содержит 2 поля access_token и expiration_token.
С любого из веб-сайтов (которые являются базовыми установками Yii) они делают:
<code> $data = array();
$data['api_key'] = 'xxxxx';
$data['api_secret'] = 'zzzzzz';
$client = new Client(['baseUrl' => 'https://website.api/index.php?r=v1']);
$response = $client->post('website/get-access-token', $data)->send();
echo "<pre>";
var_dump($response->content);
echo "
";
, если срок действия токена истек, они могут сделать еще один запрос к точке входа 'website / refresh-access-token '
Затем каждый запрос GET или POST должен отправлять этот access_token, который сохраняется в SESSION (токен истекает каждые 7 дней).
Этоне обрабатывается никакими проверками HTTP, просто прямой запрос к API для токена.
Обработка пользователей
Для этой части, когда пользователь проходит аутентификацию, используя электронную почту / пароль или социальные сети, Я делаю запрос к контроллеру пользователя, где я установил токены на предъявителя:
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => CompositeAuth::className(),
'authMethods' => [
HttpBearerAuth::className()
]
];
return $behaviors;
}
Эта часть находится в процессе разработки, поэтому предполагается, что веб-сайт сделает запрос к точке входа в систему:
<code>$client = new Client(['baseUrl' => 'https://website.api/index.php?r=v1']);
$response = $client->post('user/login', $data)->send();
echo "<pre>";
var_dump($response->content);
echo "
";
Предполагается получить access_token, а также проверить дату истечения срока действия токена.
Мои вопросы:
Это хорошая идея для обработки запросов API для моегоконкретный сценарий?Я думаю, что есть много звонков, чтобы получить простые данные.Нужно ли использовать токен для получения данных?
Если я хочу использовать токены Bearer для обработки содержимого и доступа пользователей, как бы я это сделал?