Laravel Passport là một thư viện cung cấp các giải pháp xác thực API cho ứng dụng Laravel. Được phát triển bởi đội ngũ Laravel, Passport giúp bạn dễ dàng thiết lập và quản lý xác thực OAuth2 cho ứng dụng của mình. Với Passport, bạn có thể bảo mật API của mình, cho phép người dùng truy cập vào các tài nguyên một cách an toàn thông qua token. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về Laravel Passport, các thành phần của nó, và hướng dẫn cách sử dụng để triển khai xác thực API trong ứng dụng Laravel.

Laravel Passport là gì?

Laravel Passport là một thư viện hoàn chỉnh cho việc xác thực API sử dụng tiêu chuẩn OAuth2. Thư viện này cho phép bạn tạo ra các token truy cập cho người dùng và thực hiện xác thực mà không cần phải lưu trữ các thông tin nhạy cảm như mật khẩu của người dùng. Passport hỗ trợ nhiều loại token như token cá nhân, token dành cho ứng dụng của bên thứ ba và token cho các tác vụ khác nhau.

Tính năng nổi bật của Laravel Passport

  • Xác thực OAuth2: Hỗ trợ các loại xác thực OAuth2 như Authorization Code, Client Credentials, Password Grant và Personal Access.
  • Dễ dàng tích hợp: Passport dễ dàng tích hợp vào ứng dụng Laravel hiện tại của bạn với cấu hình đơn giản.
  • Token và Refresh Token: Passport cho phép bạn tạo và quản lý token truy cập và token làm mới một cách dễ dàng.
  • Giao diện người dùng: Passport cung cấp giao diện người dùng để quản lý client và các token.

Cách sử dụng Laravel Passport

Bước 1: Cài đặt Laravel Passport

Trước tiên, bạn cần cài đặt Laravel Passport trong dự án của mình. Bạn có thể thực hiện điều này bằng cách sử dụng Composer:

composer require laravel/passport

Bước 2: Cấu hình Passport

Sau khi cài đặt xong, bạn cần chạy các lệnh sau để tạo ra các bảng cần thiết cho Passport:

php artisan migrate
php artisan passport:install

Lệnh passport:install sẽ tạo ra các client để xác thực, bao gồm client cho “Password Grant” và client cho “Personal Access”.

Bước 3: Thêm Passport vào User Model

Mở tệp User.php trong thư mục app/Models và thêm trait HasApiTokens vào model người dùng:

namespace AppModels;

use IlluminateFoundationAuthUser as Authenticatable;
use LaravelPassportHasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens;

    // Các thuộc tính và phương thức khác của model
}

Bước 4: Cấu hình Auth

Mở tệp cấu hình config/auth.php và thay đổi driver xác thực cho API thành passport:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

Bước 5: Tạo các route cho Passport

Trong tệp routes/api.php, bạn có thể định nghĩa các route cho xác thực API:

use LaravelPassportHttpControllersAccessTokenController;

Route::post('login', [AccessTokenController::class, 'issueToken']);

Bước 6: Xác thực người dùng và tạo token

Bạn có thể tạo một phương thức trong controller để xử lý xác thực người dùng và tạo token:

use IlluminateHttpRequest;
use AppModelsUser;
use IlluminateSupportFacadesAuth;

public function login(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (Auth::attempt($credentials)) {
        $user = Auth::user();
        $token = $user->createToken('Personal Access Token')->accessToken;
        return response()->json(['token' => $token]);
    }

    return response()->json(['error' => 'Unauthorized'], 401);
}

Bước 7: Bảo vệ các route bằng token

Để bảo vệ các route bằng token, bạn có thể sử dụng middleware auth:api. Ví dụ:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Bước 8: Sử dụng token để truy cập API

Khi bạn đã có token, bạn có thể sử dụng nó để truy cập các API được bảo vệ. Ví dụ, bạn có thể gửi yêu cầu GET đến route /user với token trong header:

curl -H "Authorization: Bearer {token}" http://your-domain.com/api/user

Bước 9: Xử lý token làm mới

Nếu bạn sử dụng Refresh Tokens, bạn cần thêm một route để làm mới token:

Route::post('token/refresh', [RefreshTokenController::class, 'refresh']);

Kết luận

Laravel Passport là một công cụ mạnh mẽ giúp bạn quản lý xác thực API một cách dễ dàng và an toàn. Với Passport, bạn có thể triển khai xác thực OAuth2 trong ứng dụng Laravel của mình mà không cần phải lo lắng về việc lưu trữ thông tin nhạy cảm như mật khẩu của người dùng. Bằng cách làm theo các bước hướng dẫn trên, bạn có thể thiết lập Passport trong ứng dụng của mình và bảo vệ các API một cách hiệu quả. Hãy thử nghiệm và áp dụng Passport vào dự án của bạn để tận dụng những lợi ích mà nó mang lại!