2017-06-10 2 views
1

Laravel APIを使用してモバイルアプリケーションを作成していますが、Laravel 5.3(?)ではアプリケーションのOAuth2 /検証を処理する「Passport」という名前が追加されています。その試みを与えるだろう。私は、Laravel Passportのドキュメント(https://laravel.com/docs/5.4/passport)を使ってセットアップを完了した後、それを動作させる方法について、いくつかの説明を続けました。今これは私がオフに基づいて、他のチュートリアルを作ってみた何のためのコード/ SOユーザー/のOAuth2クライアントモバイルアプリケーションでLaravel Passportを使用する

class OAuthController extends Controller 
{ 
    public function registerUser(Request $request){ 

    $email = $request->email; 
    $password = $request->password; 
    $name = $request->name; 
    $user = User::create([ 
     'name' => $name, 
     'email' => $email, 
     'password' => bcrypt($password) 
    ]); 

    $oAuthClient = new OAuthClient(); 
    $oAuthClient->user_id = $user->id; 
    $oAuthClient->id = $user->email; 
    $oAuthClient->name = $user->name; 
    $oAuthClient->secret = base64_encode(hash_hmac('sha256',$password, 'secret', true)); 
    $oAuthClient->password_client=1; 
    $oAuthClient->redirect = ''; 
    $oAuthClient->personal_access_client = 0; 
    $oAuthClient->revoked = 0; 
    $oAuthClient->save(); 

    return response()->json(['message', 'User successfully created']); 
} 
} 

2)私が作ったモデルを作成するための記事

1)コントローラがあります)

use Illuminate\Database\Eloquent\Model; 

class OAuthClient extends Model 
{ 
    protected $table = 'oauth_clients'; 
} 

3 oauth_clientsテーブルを参照するために、私は、ユーザーの電子メールの整数をインクリメントからoauth_clientsテーブルの主キーを変更しました。私は、ユーザー/ oauth_clientを作成したら、私は基本的にはちょうどこのSO記事 Laravel Passport Password Grant Tokens: own mobile app

4)に従っていました、パラメータ

enter image description here

でのOAuth /トークンにPOSTリクエストのw/POSTMANを通じてトークンを取得事は、これは私にとって本当に間違っていると感じています。 oauth_clientsにはuser_id列があります。したがって、oauth_clientトークンを取得しようとすると、ユーザーがポストリクエストをして関連するoauth_clientを取得できるはずです。 1.)を登録し、新しいユーザー

2)ユーザーを登録する場合は、oauth_clientを作成して次のように私は私のモバイルアプリのユーザー認証のためのパスポートを使用することができるはず方法については、理にかなっているものを私の心に

ユーザーの電子メール/ PWが確認された後、ログインには、そのユーザ

3)のために、oauth_clientを探し、その後

4.トークンoath_clientを取得)検証し、認証に今後APIへの要求にoauth_clientトークンを使用しますユーザー。

これは正しいと思いますか?私はそれが明らかだと確信していますが、このプロセスは私が混乱しているので、任意の指針は非常に高く評価されるでしょう。

答えて

0

okだから、誰もが興味を持っている、または将来の提案を持っている、これは私が最後にこの作業を得るためにしたものです。

私は

Route::post('/mobile_register', 'Auth\[email protected]'); 

は、その後、私は基本的には実際のregisterメソッドをコピーしたが、情報に

を登録成功したユーザーのオフに基づいて新しいoauth_clientを作成するために新しい機能を追加し、モバイルレジスタのための新しいルートを作成
/** 
* Register a new user through the mobile application. Send back the oauth_client ID which will be used 
* to retrieve the oauth token 
* 
* @param Request $request 
* @return \Illuminate\Http\JsonResponse 
*/ 
public function mobileRegister(Request $request){ 

    $this->validator($request->all())->validate(); 

    $password = $request->password; 
    event(new Registered($user = $this->create($request->all()))); 

    $oAuthClient = $this->registerOAuthClient($user, $password); 

    return response()->json(['message' => 'user created successfully', 'client_id' => $oAuthClient->id]); 
} 

/** 
* Create the associated oauth_client for this user. 
* 
* @param User $user 
* @param $password 
* @return \Illuminate\Http\JsonResponse|OAuthClient 
*/ 
public function registerOAuthClient(User $user, $password){ 

    $oAuthClient = new OAuthClient(); 
    $oAuthClient->user_id = $user->id; 
    $oAuthClient->name = $user->name; 
    $oAuthClient->secret = base64_encode(hash_hmac('sha256',{{whatever you want your secret to be based off of}}, 'secret', true)); 
    $oAuthClient->password_client=1; 
    $oAuthClient->redirect = ''; 
    $oAuthClient->personal_access_client = 0; 
    $oAuthClient->revoked = 0; 
    if(!$oAuthClient->save()) 
     return response()->json(['error' => 'Unable to create oAuthClient! User will need one made to access website']); 

    return $oAuthClient; 
} 

これで新しいoAuthClient IDがモバイルアプリに返され、モバイルアプリケーションのINSIDEには、oauthトークンを取得するために送信する必要がある 'client_secret'を作成できます。また、client_id APIから返されたあなたのoauth/token post要求の 'client_id'も同様です。その後、ユーザーの実際のoauthトークンを取得するための2回目のポストリクエストを送信します。

これは、アプリケーションに機密ユーザー情報を格納する必要はなく、クライアントIDを返信しても、悪意のある当事者があなたがそのアプリケーションに使用しようとしていることを知っていない限り、 'client_secret'も同様に、oauthクライアントにアクセスしてトークンを取得することはできません。また、ユーザーはoauthクライアントをユーザーから判別できないため、ユーザーを認識しません。 oauth_client情報の2回目の検証を行う前に、ユーザーが存在していることをまだ確認しているので、このソリューションが好きでした。& pwが正しいことを確認しました。

免責事項::これは初めてのPassportの使用、または実際には何らかの認証を行うための試みであるため、確かにこれに問題がある可能性があります。もしあなたが何かを見たら、私に知らせるためにコメントや投稿をしてください!私はこれが可能な限り良いことを確認したいので、私はそれを高く評価します!

関連する問題