Как использовать паспорт Laravel для Auth и Lumen в качестве API

Я занимаюсь разработкой приложения, использующего API, используя laravel, laravel passport, lumen и AngularJS

У меня есть 3 домена следующим образом

  • auth.dev — Laravel 5.4 + Passport oAuth-сервер (в качестве аутентификационного сервера)
  • api.dev — Люмен (как API моряк)
  • app.dev — php + angularjs (одностраничное приложение)

Я не могу правильно настроить эти 3 вместе. У меня есть настройки auth.dev и он будет успешно генерировать токены, и я могу использовать их из app.dev.

Но мое требование — использовать 3 отдельных экземпляра для API, Auth и APP.

Я попытался настроить его через Lumen (для проверки токенов доступа с auth.dev), но он не работает.

Возможно ли это или есть какие-то предложения для достижения этой цели?

2

Решение

Недавно я работал над реализацией, которая идентична этому. Потребовалось немного усилий, чтобы заставить его работать эффективно, но это работает!

По сути, если вы заботитесь о проверке токенов, которые вы получаете (что вам следует), вам понадобится способ перенаправить токен, который 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.

Однако, если вы сделаете это, убедитесь, что он не кэшируется в течение длительного времени, поскольку он может позволить токенам с истекшим сроком действия считаться действительными.

В качестве альтернативы, сохраните время истечения токена где-то в вашем кэше и проверьте его по времени запроса, чтобы убедиться, что токен не истек.

Надеюсь это поможет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]