私は最近、これと同じ実装を取り組んでいます。効率的に動作させるには少し努力が必要でしたが、機能しています!
受け取っているトークンの検証が必要な場合は、ルーメンがクライアントアプリケーションから受け取ったトークンをOAuthサービスに転送し、その認証の詳細を返す必要があります。あなたのルーメンアプリ。
Lumen APIサービスが常に同じマシン上で動作することが分かっているなら、何らかのRPCを使用してHTTP経由で不要に節約することができます.OAuthでカスタムArtisanコマンドを使用してコマンドラインインターフェイスを使用しましたサービスと私がRemoteArtisanと呼ぶルーメン側から実行するためのカスタムスクリプトが含まれています。
もう1つの方法は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
はそれからIDを取得し、私は戻って送信したいのOAuth DBからリソースを取得するためにそれを使用するためにトークンを解析する単純なクラスですルーメン。たくさんの質問をする必要はなく、ここで多くのデータを送信する必要はないかもしれません。単純な合否に過ぎません。あなたの必要に応じて。
トークンにスコープが割り当てられていても、私はあなたのルーメンアプリを見つけ出して返信することをお勧めします。おそらくこれらを、Passportで利用可能なさまざまなスコープミドルウェアとともに使用したいと考えています。
ここで唯一のオプションは、ミドルウェアクラス(CheckScopes
とCheckForAnyScope
)をLumenアプリケーションに複製し、手動でロードすることです。しかし、これは基本的なので簡単です。
Authenticatable
クラス(通常はUser
モデル)を通じてOAuthエンドポイントから戻ってくるスコープを確認できるように、それらを変更する必要があります。
いずれの解決策も各リクエストにオーバーヘッドを追加することになるので、この結果をLumenの最後にキャッシュすることを検討する価値があります。
ただし、有効期限が切れているトークンが有効とみなされる可能性があるため、キャッシュされていないことを確認してください。
また、トークンの有効期限をキャッシュのどこかに保存し、トークンが期限切れになっていないことを確認するために要求の時間に対して検証します。
これが役に立ちます。
"動作していない"ものについての情報が必要です。どのようなエラーや問題がありますか、それを複製するためにどのような手順を取っていますか? – samiles
正しい認証情報と構造でAPI(Lumen)にあるauth:api protectedルートを呼び出すと、権限のないエラーが返されます。私は認証サーバーからそれらのルート(APIに位置しています)を検証したいと思います。 – Umanda