Хорошо, у меня небольшой вопрос о концепции приложения. Я хочу различить ресурс и сервер авторизации по паспорту laravel.
У меня есть сервер OAuth2 и классическое приложение laravel с самодельной системой аутентификации без сохранения состояния.
У меня есть SPA с Vue.js, который отправляет запрос на вход в интерфейс REST для приложения front laravel.
Это приложение называется GuzzleClient для отправки запроса типа пароля oauth для получения токена.
public function login(Request $request, Client $client)
{
$url = config('app.auth.server') .'/oauth/token';
$response = $client->post($url, [
'form_params' => [
'grant_type' => 'password',
'username' => $request->name,
'password' => $request->password,
'client_id' => config('auth.oauth.password.client-id'),
'client_secret' => config('auth.oauth.password.client-secret'),
]
]);
if ($response->getStatusCode() !== Response::HTTP_OK) {
return http_response_code($response->getStatusCode());
}
return response()->json($response->getBody()->getContent(), Response::HTTP_OK);
}
Но, если я хочу защитить маршрут API, я не могу использовать auth: api guard, предоставляемый паспортом.
2 решения.
- Создание промежуточного программного обеспечения во внешнем приложении, которое вызывает пользовательский маршрут, созданный на сервере авторизации (паспорт laravel), для отправки однонаправленного канала-носителя (отправленного из javascript) и проверки его подлинности сервером OAuth.
- Получите секретный ключ, используемый в паспорте для jwt, и позвольте серверу ресурсов самостоятельно проверить действительность токена. (с использованием специальной охраны)
Второе решение, вероятно, лучше. Но что вы думаете ? У вас есть идеи или лучшие практики?
Спасибо за чтение.