SlideShare uma empresa Scribd logo
1 de 26
2014/04/05 shin1x1
Laravel Meetup Tokyo Vol.3
知っておくべき
Authオートログイン
(c) 2014 Masashi Shinbara @shin1x1
最近、開発している構成
(c) 2014 Masashi Shinbara @shin1x1
Authによる
ログイン
(c) 2014 Masashi Shinbara @shin1x1
サンプル
• email と pass でログイン
• remember me にチェックを付けると

オートログインが有効に
(c) 2014 Masashi Shinbara @shin1x1
サンプル
• users テーブルに 10 人登録済
実装
(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');!
});!
実装
(c) 2014 Masashi Shinbara @shin1x1
• 認証
!
Route::group(['before' => 'auth'], function() {!
Route::get('/', function () {!
return View::make('home')->with('user', Auth::user());!
});!
});!
(c) 2014 Masashi Shinbara @shin1x1
•ログインする
ログイン
ログイン結果
(c) 2014 Masashi Shinbara @shin1x1
•ログインユーザを表示
•セッションクッキーを発行
(c) 2014 Masashi Shinbara @shin1x1
Authによる
オートログイン
(c) 2014 Masashi Shinbara @shin1x1
•ログイン(オートログイン有効)
ログイン
ログイン結果
(c) 2014 Masashi Shinbara @shin1x1
•ログインユーザを表示
•セッションクッキーと

オートログインクッキーを発行
オートログイン
(c) 2014 Masashi Shinbara @shin1x1
•ログインセッション削除
•リロードするとオートログイン
(c) 2014 Masashi Shinbara @shin1x1
どうやって
認証してるの?
オートログインクッキー
(c) 2014 Masashi Shinbara @shin1x1
•Laravel ではクッキーの値を自動で暗号化
•オートログインクッキーの値を複合
$ php decrypt.php COOKIE_VALUE!
string(1) "1"
• 1 という文字列だけ
• これだけで認証???
実装を確認
(c) 2014 Masashi Shinbara @shin1x1
• オートログインの処理
• $id = 複合されたオートログインクッキーの値
• この処理は、Authフィルタを使っていれば、

オートログインクッキーがあり、

かつログインセッションが無ければ常に呼ばれる
protected function getUserByRecaller($id)!
{!
$this->viaRemember = ! is_null($user = $this->provider-
>retrieveByID($id));!
!
return $user;!
}
実装を確認
(c) 2014 Masashi Shinbara @shin1x1
•$identifier = オートログインクッキーの値
•オートログインクッキーの値を identifier として、

ユーザを取得
public function retrieveById($identifier)!
{!
return $this->createModel()->newQuery()->find($identifier);!
}
!!!!
検証(悪用厳禁)
(c) 2014 Masashi Shinbara @shin1x1
• 偽装クッキーでアクセスすると。。。
• 手順割愛
!!!!
いったん整理
(c) 2014 Masashi Shinbara @shin1x1
• Auth フィルタにはオートログイン機能がある
• オートログインは、暗号化したクッキーで認証
• 偽装したクッキーでもオートログインできる
• アプリケーションがオートログインを

使っているかは関係無い

(Authフィルタ側ではオートログイン認証が動く)
(c) 2014 Masashi Shinbara @shin1x1
どうすれば良いか?
1. 暗号鍵を漏洩させない
(c) 2014 Masashi Shinbara @shin1x1
• app/config/app.php の key
• 暗号鍵が分かると簡単に偽装クッキーができる
• 開発環境と本番環境でキーを変える
• OSSなどで公開するときは注意!
(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"!
]
暗号鍵を再生成
(c) 2014 Masashi Shinbara @shin1x1
• environment によって変える
!
app/config/local/app.php <—— 開発環境用!
production/app.php <—— 本番環境用!
暗号鍵を本番環境用にする
• 本番用の鍵はリポジトリに含めない

(例えば、環境変数から取得)
'key' => getenv(‘LARAVEL_AUTH_KEY’),
(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
(c) 2014 Masashi Shinbara @shin1x1
まとめ
• オートログインはクッキーのみで実現
• key が重要なものであることを認識
• カスタムドライバでの対応がおすすめ
@shin1x1
(c) 2014 Masashi Shinbara @shin1x1

Mais conteúdo relacionado

Mais procurados

さわってみようTOPPERS/SSP
さわってみようTOPPERS/SSPさわってみようTOPPERS/SSP
さわってみようTOPPERS/SSPNSaitoNmiri
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本yoyamasaki
 
Laravelの認証について
Laravelの認証についてLaravelの認証について
Laravelの認証についてTakeo Noda
 
超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編Shin Tanigawa
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と DockerのキホンNaoki Nagazumi
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践Yoshifumi Kawai
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
Asp.net mvc 基礎
Asp.net mvc 基礎Asp.net mvc 基礎
Asp.net mvc 基礎Gelis Wu
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 
WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編Contest Ntt-west
 
PHP実践 ~外部APIを使って情報を取得する~
PHP実践 ~外部APIを使って情報を取得する~PHP実践 ~外部APIを使って情報を取得する~
PHP実践 ~外部APIを使って情報を取得する~schoowebcampus
 
超簡単!Apache SubverisonをWindows Serverにインストール
超簡単!Apache SubverisonをWindows Serverにインストール超簡単!Apache SubverisonをWindows Serverにインストール
超簡単!Apache SubverisonをWindows ServerにインストールShin Tanigawa
 
Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらいNaoki Nagazumi
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルMasahito Zembutsu
 

Mais procurados (20)

さわってみようTOPPERS/SSP
さわってみようTOPPERS/SSPさわってみようTOPPERS/SSP
さわってみようTOPPERS/SSP
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本
 
LXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoyaLXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoya
 
Laravelの認証について
Laravelの認証についてLaravelの認証について
Laravelの認証について
 
超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
MapReduce入門
MapReduce入門MapReduce入門
MapReduce入門
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
Asp.net mvc 基礎
Asp.net mvc 基礎Asp.net mvc 基礎
Asp.net mvc 基礎
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編
 
PHP実践 ~外部APIを使って情報を取得する~
PHP実践 ~外部APIを使って情報を取得する~PHP実践 ~外部APIを使って情報を取得する~
PHP実践 ~外部APIを使って情報を取得する~
 
超簡単!Apache SubverisonをWindows Serverにインストール
超簡単!Apache SubverisonをWindows Serverにインストール超簡単!Apache SubverisonをWindows Serverにインストール
超簡単!Apache SubverisonをWindows Serverにインストール
 
Nginx lua
Nginx luaNginx lua
Nginx lua
 
Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらい
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 

Destaque

ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDockerMasashi Shinbara
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築Masashi Shinbara
 
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチKazuaki KURIU
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebaseTakuji Shimokawa
 
20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With LaravelTakumi Yoshida
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントカスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントFumiya Sakai
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説Fumiya Sakai
 
わかってるフレームワーク Laravel
わかってるフレームワーク Laravelわかってるフレームワーク Laravel
わかってるフレームワーク LaravelMasashi Shinbara
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうSyouta Tada
 
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3Fumiya Sakai
 
アプリチームを支えるSlack bot
アプリチームを支えるSlack botアプリチームを支えるSlack bot
アプリチームを支えるSlack botKazuaki KURIU
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムKouhei Sutou
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付きMayumi Narisawa
 
Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Yuuki Takezawa
 
Laravel の学び方と得られる学び
Laravel の学び方と得られる学びLaravel の学び方と得られる学び
Laravel の学び方と得られる学びMasaru Matsuo
 
Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Futoshi Endo
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみたJaeseop Jeong
 
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Fumiya Sakai
 

Destaque (20)

ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebase
 
20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントカスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
 
わかってるフレームワーク Laravel
わかってるフレームワーク Laravelわかってるフレームワーク Laravel
わかってるフレームワーク Laravel
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろう
 
3 tips of Laravel
3 tips of Laravel3 tips of Laravel
3 tips of Laravel
 
Laravel LT
Laravel LTLaravel LT
Laravel LT
 
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
 
アプリチームを支えるSlack bot
アプリチームを支えるSlack botアプリチームを支えるSlack bot
アプリチームを支えるSlack bot
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
 
Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩
 
Laravel の学び方と得られる学び
Laravel の学び方と得られる学びLaravel の学び方と得られる学び
Laravel の学び方と得られる学び
 
Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみた
 
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
 

Mais de Masashi Shinbara

日本語消えたスライド
日本語消えたスライド日本語消えたスライド
日本語消えたスライドMasashi Shinbara
 
Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Masashi Shinbara
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-Masashi Shinbara
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2Masashi Shinbara
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPressMasashi Shinbara
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Masashi Shinbara
 
How to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationHow to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationMasashi Shinbara
 
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーションMasashi Shinbara
 
Azure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションAzure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションMasashi Shinbara
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Masashi Shinbara
 
開発現場で活用するVagrant
開発現場で活用するVagrant開発現場で活用するVagrant
開発現場で活用するVagrantMasashi Shinbara
 
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るPHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るMasashi Shinbara
 
Heroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションHeroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションMasashi Shinbara
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門Masashi Shinbara
 
キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!Masashi Shinbara
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンMasashi Shinbara
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようMasashi Shinbara
 

Mais de Masashi Shinbara (20)

日本語消えたスライド
日本語消えたスライド日本語消えたスライド
日本語消えたスライド
 
Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
 
How to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationHow to learn Laravel5 application from Authentication
How to learn Laravel5 application from Authentication
 
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション
 
Azure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションAzure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーション
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
 
開発現場で活用するVagrant
開発現場で活用するVagrant開発現場で活用するVagrant
開発現場で活用するVagrant
 
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るPHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知る
 
Heroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションHeroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーション
 
Vagrant体験入門
Vagrant体験入門Vagrant体験入門
Vagrant体験入門
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門
 
キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!
 
Composer 再入門
Composer 再入門Composer 再入門
Composer 再入門
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオン
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみよう
 
いまどきのPHP
いまどきのPHPいまどきのPHP
いまどきのPHP
 

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

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