Chuyển đến nội dung chính

レッスン 11: OAuth2、パスポート、社交家

Laravelパスポート(OAuth2サーバー)。社交家 (Google、GitHub、Facebook ログイン)。アカウントリンク、カスタムプロバイダー。 JWT 対パスポート トークン。 API スコープ。

💻 プログラミング — レッスン 11 レッスン 11: OAuth2、パスポート、社交家

Laravel: 基本から上級まで

パート 3: 認証と認可

xdev.asia

1. Laravel 社交家

composer require laravel/socialite
// config/services.php
'google' => [
    'client_id' => env('GOOGLE_CLIENT_ID'),
    'client_secret' => env('GOOGLE_CLIENT_SECRET'),
    'redirect' => env('APP_URL') . '/auth/google/callback',
],

// Routes
Route::get('/auth/{provider}/redirect', [SocialAuthController::class, 'redirect']);
Route::get('/auth/{provider}/callback', [SocialAuthController::class, 'callback']);

// Controller
use Laravel\Socialite\Facades\Socialite;

class SocialAuthController extends Controller
{
    public function redirect(string $provider)
    {
        return Socialite::driver($provider)->redirect();
    }

    public function callback(string $provider)
    {
        $socialUser = Socialite::driver($provider)->user();

        $user = User::updateOrCreate(
            ['email' => $socialUser->getEmail()],
            [
                'name' => $socialUser->getName(),
                'provider' => $provider,
                'provider_id' => $socialUser->getId(),
                'avatar' => $socialUser->getAvatar(),
            ],
        );

        Auth::login($user, remember: true);
        return redirect('/dashboard');
    }
}

2.Laravelパスポート

composer require laravel/passport
php artisan passport:install
// User model
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens;
}

// config/auth.php
'guards' => [
    'api' => ['driver' => 'passport', 'provider' => 'users'],
],

// Scopes
Passport::tokensCan([
    'read-products' => 'Xem sản phẩm',
    'write-products' => 'Thêm/sửa sản phẩm',
    'manage-orders' => 'Quản lý đơn hàng',
]);

// Middleware
Route::middleware(['auth:api', 'scope:write-products'])->group(function () {
    Route::post('/products', [ProductController::class, 'store']);
});

3. サンクタム vs パスポート

特長サンクタムパスポート
SPA認証✅✅
APIトークン✅ (シンプル)✅ (OAuth2 フル)
OAuth2サーバー❌✅
サードパーティのアプリ❌✅
複雑さ低い高

次の記事: セキュリティのベストプラクティス。