Laravel ユーザなら知っておくべきAuthオートログイン

24,340 views

Published on

2014/04/05 Laravel Meetup Tokyo vol.3
http://www.1x1.jp/blog/2014/04/lararavel-artisan-should-know-auto-login-by-auth.html

Published in: Technology
0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
24,340
On SlideShare
0
From Embeds
0
Number of Embeds
19,995
Actions
Shares
0
Downloads
0
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

Laravel ユーザなら知っておくべきAuthオートログイン

  1. 1. 2014/04/05 shin1x1 Laravel Meetup Tokyo Vol.3 知っておくべき Authオートログイン
  2. 2. (c) 2014 Masashi Shinbara @shin1x1 最近、開発している構成
  3. 3. (c) 2014 Masashi Shinbara @shin1x1 Authによる ログイン
  4. 4. (c) 2014 Masashi Shinbara @shin1x1 サンプル • email と pass でログイン • remember me にチェックを付けると
 オートログインが有効に
  5. 5. (c) 2014 Masashi Shinbara @shin1x1 サンプル • users テーブルに 10 人登録済
  6. 6. 実装 (c) 2014 Masashi Shinbara @shin1x1 • ログイン ! Route::post('/login', function() {! $remember = (bool)Input::get('remember');! if (Auth::attempt(Input::only(['email', 'password']), $remember)) {! return Redirect::to('/');! }! ! return View::make('login');! });!
  7. 7. 実装 (c) 2014 Masashi Shinbara @shin1x1 • 認証 ! Route::group(['before' => 'auth'], function() {! Route::get('/', function () {! return View::make('home')->with('user', Auth::user());! });! });!
  8. 8. (c) 2014 Masashi Shinbara @shin1x1 •ログインする ログイン
  9. 9. ログイン結果 (c) 2014 Masashi Shinbara @shin1x1 •ログインユーザを表示 •セッションクッキーを発行
  10. 10. (c) 2014 Masashi Shinbara @shin1x1 Authによる オートログイン
  11. 11. (c) 2014 Masashi Shinbara @shin1x1 •ログイン(オートログイン有効) ログイン
  12. 12. ログイン結果 (c) 2014 Masashi Shinbara @shin1x1 •ログインユーザを表示 •セッションクッキーと
 オートログインクッキーを発行
  13. 13. オートログイン (c) 2014 Masashi Shinbara @shin1x1 •ログインセッション削除 •リロードするとオートログイン
  14. 14. (c) 2014 Masashi Shinbara @shin1x1 どうやって 認証してるの?
  15. 15. オートログインクッキー (c) 2014 Masashi Shinbara @shin1x1 •Laravel ではクッキーの値を自動で暗号化 •オートログインクッキーの値を複合 $ php decrypt.php COOKIE_VALUE! string(1) "1" • 1 という文字列だけ • これだけで認証???
  16. 16. 実装を確認 (c) 2014 Masashi Shinbara @shin1x1 • オートログインの処理 • $id = 複合されたオートログインクッキーの値 • この処理は、Authフィルタを使っていれば、
 オートログインクッキーがあり、
 かつログインセッションが無ければ常に呼ばれる protected function getUserByRecaller($id)! {! $this->viaRemember = ! is_null($user = $this->provider- >retrieveByID($id));! ! return $user;! }
  17. 17. 実装を確認 (c) 2014 Masashi Shinbara @shin1x1 •$identifier = オートログインクッキーの値 •オートログインクッキーの値を identifier として、
 ユーザを取得 public function retrieveById($identifier)! {! return $this->createModel()->newQuery()->find($identifier);! } !!!!
  18. 18. 検証(悪用厳禁) (c) 2014 Masashi Shinbara @shin1x1 • 偽装クッキーでアクセスすると。。。 • 手順割愛 !!!!
  19. 19. いったん整理 (c) 2014 Masashi Shinbara @shin1x1 • Auth フィルタにはオートログイン機能がある • オートログインは、暗号化したクッキーで認証 • 偽装したクッキーでもオートログインできる • アプリケーションがオートログインを
 使っているかは関係無い
 (Authフィルタ側ではオートログイン認証が動く)
  20. 20. (c) 2014 Masashi Shinbara @shin1x1 どうすれば良いか?
  21. 21. 1. 暗号鍵を漏洩させない (c) 2014 Masashi Shinbara @shin1x1 • app/config/app.php の key • 暗号鍵が分かると簡単に偽装クッキーができる • 開発環境と本番環境でキーを変える • OSSなどで公開するときは注意!
  22. 22. (c) 2014 Masashi Shinbara @shin1x1 • artisan で暗号鍵を再生成 ! $ php artisan key:generate! ! // environment を指定! $ php artisan key:generate —-env=production ! • composer create-project では実行 "post-create-project-cmd": [! "php artisan key:generate"! ] 暗号鍵を再生成
  23. 23. (c) 2014 Masashi Shinbara @shin1x1 • environment によって変える ! app/config/local/app.php <—— 開発環境用! production/app.php <—— 本番環境用! 暗号鍵を本番環境用にする • 本番用の鍵はリポジトリに含めない
 (例えば、環境変数から取得) 'key' => getenv(‘LARAVEL_AUTH_KEY’),
  24. 24. (c) 2014 Masashi Shinbara @shin1x1 2. オートログインを変える • カスタムドライバを実装 • app/config/auth.php を設定 • Auth::extend()で指定 • 実装例 http://www.1x1.jp/blog/2014/02/how-to- implement-custom-auth-driver-in-laravel.html
  25. 25. (c) 2014 Masashi Shinbara @shin1x1 まとめ • オートログインはクッキーのみで実現 • key が重要なものであることを認識 • カスタムドライバでの対応がおすすめ
  26. 26. @shin1x1 (c) 2014 Masashi Shinbara @shin1x1

×