Я занимаюсь разработкой приложения, использующего API, используя laravel, laravel passport, lumen и AngularJS
У меня есть 3 домена следующим образом
Я не могу правильно настроить эти 3 вместе. У меня есть настройки auth.dev и он будет успешно генерировать токены, и я могу использовать их из app.dev.
Но мое требование — использовать 3 отдельных экземпляра для API, Auth и APP.
Я попытался настроить его через Lumen (для проверки токенов доступа с auth.dev), но он не работает.
Возможно ли это или есть какие-то предложения для достижения этой цели?
Недавно я работал над реализацией, которая идентична этому. Потребовалось немного усилий, чтобы заставить его работать эффективно, но это работает!
По сути, если вы заботитесь о проверке токенов, которые вы получаете (что вам следует), вам понадобится способ перенаправить токен, который Lumen получает из клиентских приложений, в вашу службу OAuth и вернуть некоторые детали этой аутентификации в ваше приложение Lumen.
Если вы знаете, что служба Lumen API всегда будет работать на одной и той же машине, вы можете использовать какой-то RPC для ненужного сохранения перехода по HTTP — я использовал интерфейс командной строки через пользовательскую команду Artisan в службе OAuth и пользовательский скрипт для запуска со стороны Lumen, которую я называю RemoteArtisan.
Другой метод — через HTTP. По сути, ваша служба OAuth предоставляет собственную базовую конечную точку API. Как то так в routes/api.php
следует сделать:
Route::middleware('client')->get('user', function (Request $request) {
$helper = new App\FirstPartyClientHelper;
return response()->json($helper->getTokenOwnerDetails($request->bearerToken()));
});
мой FirstPartyClientHelper
простой класс, который анализирует токен, чтобы получить из него идентификатор и использовать его для извлечения ресурсов из базы данных OAuth, которые я хочу отправить обратно в Lumen. Вам может не потребоваться делать много запросов или отправлять много данных здесь, это может быть просто проход / неудача. Зависит от ваших потребностей.
Однако я бы порекомендовал выяснить и отправить обратно в ваше приложение Lumen — какие области были назначены для токена. Возможно, вы захотите использовать их вместе с различным промежуточным программным обеспечением, доступным в Passport.
Единственный вариант здесь на данный момент — дублировать эти промежуточные классы (CheckScopes
а также CheckForAnyScope
) в приложение Lumen и загрузите их вручную. Но это довольно просто, поскольку они простые.
Возможно, вам придется изменить их так, чтобы они могли видеть области, которые возвращаются из вашей конечной точки OAuth через вашу Authenticatable
класс (обычно User
модель).
Любое из этих решений будет добавлять некоторые накладные расходы к каждому запросу, поэтому стоит подумать о том, чтобы кешировать результат этого на некоторое время в конце Lumen.
Однако, если вы сделаете это, убедитесь, что он не кэшируется в течение длительного времени, поскольку он может позволить токенам с истекшим сроком действия считаться действительными.
В качестве альтернативы, сохраните время истечения токена где-то в вашем кэше и проверьте его по времени запроса, чтобы убедиться, что токен не истек.
Надеюсь это поможет.
Других решений пока нет …