2016-08-26 9 views
2

Laravel 5.3パスポートコンポーネントはかなりクールに見えますが、私はそれにいくらか混乱します。Laravel 5.3パスポート経路はウェブミドルウェアを使用しています

ドキュメントについてPassportはAPI認証を受けており、config/auth.phpを設定すると、ドライバはガード 'api'の「パスポート」に変更されます。

Laravel 5.3には、WebミドルウェアまたはAPIミドルウェアを使用するrouteグループが異なるweb.phpとapi.phpがあります。

インストールしたPassportの後に、Passport:routes()をAuthServiceProviderに追加する手順があります。私がroute:listを実行すると、新しいルートはすべてWebと認証ミドルウェアを使用していることが示されます。

私の質問は、これらのパスポートがWebミドルウェアを使用している理由です。私の理解のために、パスポートはステートレスなAPI認証のために働くはずですが、Webミドルウェアは動作しません。

答えて

0

私はこれを解決したようです。私がやった

まず最初は、理論的にはアプリ/プロバイダ/ AuthServiceProvider.php

/** 
* Register any authentication/authorization services. 
* 
* @return void 
*/ 
public function boot() 
{ 
    $this->registerPolicies(); 

    Route::group(['prefix' => 'api', 'middleware' => 'cors'], function() { 

     Passport::routes(); 

    }); 
} 

編集することによって、私は、ルートグループのパスポートルートを包んhttps://github.com/barryvdh/laravel-corsその後

ここからCORSミドルウェアを追加し、設定しましたAPIの外でoauthサービスを使用したい場合は、/ api接頭辞とcorsミドルウェアの2つのパスポート・パスを持つことができます。その場合は1つを除いてパス原点保護を失うことはありません。ブラウザでoauthを使用します。

+0

残念ながら、それはまったく私を助けませんでした。ミドルウェアを既存のミドルウェアのリストに追加するだけでした。だから、ミドルウェアを "web、auth"から "cors"に変更するのではなく、 "cors、web、auth"を得ました。 あなたを認証するはずのものについては、それほど遠慮しているようです。 –

0

パスポートの動作原理が間違っていることを理解するまで、私はこの問題に直面していました。

Passportは、そのユーザーの同意を得たユーザーのデータをクライアントアプリケーションに許可することです(これはOAuth2の仕組みです)。だから、クライアントアプリケーションが最終的にそのユーザーのデータへのアクセスを許可するアクセストークンを取得しようとするとき、そのユーザーの同意が必要です。 Webミドルウェアは、そのユーザーの同意を得るためのレイヤーとして機能します。同意に署名するには、まずユーザーがログインする必要があります。そうしないと、実際のユーザーであるという証拠はありません。

あなたのアプリが「Googleでログイン」機能を実装しようとしているシナリオを考えてみましょう。ログインページにリダイレクトした後、ユーザーのログイン情報をGoogleアカウントにリダイレクトし、同意した後、認証コードを使ってアプリにリダイレクトされるボタンをGoogleにリダイレクトします。これはまさにそのようなものです。ここでGoogleはあなたが構築しているアプリで、他のアプリはクライアントアプリです。

実用的な実装を行う場合でもこれを理解するにはまだ最良の方法です。 laravelで新しいアプリケーションを作成し、このコードをroutes/web.phpファイルに入れてください。

Route::get('/redirect', function() { 
    $query = http_build_query([ 
     'client_id' => 'YOUR APP'S CLIENT ID', 
     'redirect_uri' => 'THE CALLBACK YOU GAVE DURING CREATING THE CLIENT', 
     'response_type' => 'code', 
     'scope' => '', 
    ]); 

    return redirect('http://your-app.com/oauth/authorize?'.$query); 
}); 

/redirectルートで新しいアプリにアクセスしてください。メインアプリも実行していることを確認してください。

関連する問題