目的
本記事の目的は、LaravelのSocialite・Microsoft Graphを使用し、OAuth認証でMicrosoftアカウントのユーザー情報を取得することです。
前提
フレームワーク・ライブラリ | バージョン |
---|---|
PHP | 7.3 |
Laravel | 5.8.36 |
socialiteproviders/microsoft-graph | 3.* |
適宜、各自の環境に合わせたバージョンを使用してください。
手順
手順 | 概要 |
---|---|
手順1 | Microsoft Azure Directory admin centerで各種設定 |
手順2 | socialiteproviders/microsoft-graphをインストール |
手順3 | 設定 |
手順4 | ルート |
番外編 | Socialiteの便利なメソッド |
- ComposerやLaravelのインストール等の環境構築は各自で行ってください。
- Microsoftアカウントは各自で用意してください。
手順1 Microsoft Azure Directory admin centerで各種設定
こちらの記事がわかりやすいので参考にしてください。
手順2 socialiteproviders/microsoft-graphをインストール
composer require socialiteproviders/microsoft-graph
バージョンを指定する場合はcomposer require socialiteproviders/microsoft-graph 3.*
手順3 設定
config/app.php
'providers' => [
// ...
\SocialiteProviders\Manager\ServiceProvider::class,
],
app/Providers/EventServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
// 下記を追加
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
'SocialiteProviders\\Graph\\GraphExtendSocialite@handle',
],
// ここまで
];
/**
* Register any events for your application.
*/
public function boot(): void
{
parent::boot();
}
}
config/services.php
return [
'graph' => [
'client_id' => env('GRAPH_CLIENT_ID'),
'client_secret' => env('GRAPH_CLIENT_SECRET'),
'redirect' => env('GRAPH_REDIRECT_URI')
],
];
こちらの記事を参考にして設定した値を入力してください。
GRAPH_CLIENT_ID=client_id
GRAPH_CLIENT_SECRET=secret_key
GRAPH_REDIRECT_URI=設定したリダイレクトURL
手順4 ルート
routes/web.php
Route::get('login/graph', 'Auth\LoginController@redirectToProvider');
Route::get('login/graph/callback', 'Auth\LoginController@handleProviderCallback');
app/Http/Controllers/Auth/LoginController.php
namespace App\Http\Controllers\Auth;
use Socialite;
class LoginController extends Controller
{
/**
* Microsoftの認証ページヘユーザーをリダイレクト
*
* @return \Illuminate\Http\Response
*/
public function redirectToProvider()
{
return Socialite::driver('graph')->redirect();
}
/**
* Microsoftからユーザー情報を取得
*
* @return \Illuminate\Http\Response
*/
public function handleProviderCallback()
{
$user = Socialite::driver('graph')->user();
dd($user); // 出力
}
}
ddでユーザー情報が取得できているはずです。
公式のGitHubで参考コードが多く載せられています。
番外編
Socialitの便利なメソッドの紹介です。
API開発の場合はstatelessメソッドが便利です。
return Socialite::driver('graph')->stateless()->user();
オプションのパラメータはwithメソッドが便利です。オプションのパラメータの詳細は、公式サイトでご確認ください。例えば、redirectToProviderアクションからhandleProviderCallbackアクションまで状態を保持したい場合は、stateオプションを使用することができます。
public function redirectToProvider()
{
return Socialite::driver('graph')->with(['state' => 'hoge'])->redirect();
}
public function handleProviderCallback(Request $request)
{
dd($request['state']); // hogeが出力される
$user = Socialite::driver('graph')->user();
}
参考
- https://docs.microsoft.com/ja-jp/azure/active-directory/develop/v2-oauth2-auth-code-flow#request-an-authorization-code
- https://github.com/microsoftgraph/msgraph-training-phpapp/tree/main/demo/graph-tutorial
- https://readouble.com/laravel/5.8/ja/socialite.html
- https://blog.hrendoh.com/oauth-to-microsoft-graph-with-laravel-socialite/#socialiteprovidersmicrosoft-graph
- https://qiita.com/chtzmrtshgh/items/802fd447804eef78bdce