Laravel Passport: Chìa khóa vàng mở cửa API an toàn!
Lavarel

Laravel Passport: Chìa khóa vàng mở cửa API an toàn!

Author

Admin System

@root

Ngày xuất bản

19 Mar, 2026

Lượt xem

2 Lượt

Passport

Chào mừng các bạn sinh viên thân mến của anh Creyt! Hôm nay, chúng ta sẽ cùng nhau khám phá một khái niệm cực kỳ quan trọng trong thế giới API hiện đại: Laravel Passport. Nghe cái tên “Passport” chắc các bạn nghĩ đến cuốn hộ chiếu để đi du lịch đúng không? Đúng một nửa đấy! Nó là hộ chiếu, nhưng là hộ chiếu để các ứng dụng của bạn “du lịch” an toàn vào khu vực API được bảo vệ của hệ thống.

1. Laravel Passport là gì và để làm gì?

Để anh Creyt kể các bạn nghe câu chuyện này nhé. Tưởng tượng ứng dụng Laravel của các bạn là một tòa nhà chọc trời hoành tráng, bên trong chứa đựng bao nhiêu là dữ liệu quý giá (API). Giờ, có một anh chàng mobile app hoặc một cô nàng Single Page Application (SPA) muốn vào lấy dữ liệu. Liệu bạn có để họ tự do đi lại không? Chắc chắn là KHÔNG rồi! Bạn cần một hệ thống bảo vệ, một anh bảo vệ kiểm tra thẻ ra vào.

Laravel Passport chính là anh bảo vệ thông minh đó! Nó là một gói cài đặt cực kỳ tiện lợi, giúp biến ứng dụng Laravel của bạn thành một máy chủ OAuth2 đầy đủ chức năng. Thay vì phải tự mình viết tất cả logic phức tạp để cấp phát và quản lý các "thẻ ra vào" (hay còn gọi là API tokens), Passport làm tất cả giúp bạn theo chuẩn quốc tế OAuth2.

Vậy nó dùng để làm gì? Đơn giản là để:

  • Cấp phát token: Khi một ứng dụng bên ngoài (client) muốn truy cập API của bạn, họ cần "xin" một cái token. Passport sẽ xác minh danh tính và cấp cho họ một "chìa khóa" tạm thời.
  • Bảo vệ tài nguyên: Chỉ những ai có "chìa khóa" hợp lệ và còn hạn sử dụng mới được phép truy cập vào các tài nguyên API được bảo vệ (ví dụ: thông tin người dùng, danh sách sản phẩm, v.v.).
  • Quản lý quyền hạn (Scopes): Tưởng tượng chìa khóa có thể mở được cửa phòng khách, phòng ngủ hay cả két sắt. Passport cho phép bạn định nghĩa các "phạm vi" (scopes) cho token, để một token chỉ có thể làm những việc nhất định (ví dụ: chỉ đọc dữ liệu, không được sửa).

Tóm lại, Passport giúp bạn xây dựng API mạnh mẽ, an toàn và dễ dàng tích hợp với các ứng dụng khác mà không phải đau đầu với bảo mật.

Illustration

2. Code Ví Dụ Minh Họa: Cấp phát Personal Access Token

Để các bạn dễ hình dung, anh Creyt sẽ hướng dẫn các bạn cách sử dụng Personal Access Tokens – một loại token cực kỳ tiện lợi để truy cập API của chính bạn, hoặc dùng cho các ứng dụng nội bộ, testing. Nó giống như việc bạn tự cấp cho mình một chiếc thẻ VIP để đi lại thoải mái trong tòa nhà vậy.

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

Đầu tiên, bạn cần cài đặt gói Passport vào dự án Laravel của mình:

composer require laravel/passport

Sau đó, chạy migrate để tạo các bảng cần thiết cho Passport:

php artisan migrate

Tiếp theo, chạy lệnh passport:install để tạo các khóa mã hóa cần thiết và client mặc định:

php artisan passport:install

Bước 2: Cấu hình User Model và Auth Service Provider

Thêm trait HasApiTokens vào User model để nó có thể tạo và quản lý token:

// app/Models/User.php
namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens; // <--- Thêm dòng này

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable; // <--- Thêm HasApiTokens vào đây

    // ... các thuộc tính và phương thức khác
}

Trong AuthServiceProvider, bạn cần đăng ký các route của Passport. Mở app/Providers/AuthServiceProvider.php và thêm Passport::routes(); vào phương thức boot():

// app/Providers/AuthServiceProvider.php
namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
use Laravel\Passport\Passport; // <--- Thêm dòng này

class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        // 'App\Models\Model' => 'App\Policies\ModelPolicy',
    ];

    public function boot()
    {
        $this->registerPolicies();

        Passport::routes(); // <--- Thêm dòng này

        // Tùy chọn: Đặt thời gian hết hạn cho token
        // Passport::tokensExpireIn(now()->addDays(15));
        // Passport::refreshTokensExpireIn(now()->addDays(30));
        // Passport::personalAccessTokensExpireIn(now()->addMonths(6));
    }
}

Cuối cùng, cập nhật cấu hình auth trong config/auth.php để sử dụng Passport làm driver cho guard api:

// config/auth.php
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport', // <--- Thay đổi từ 'token' sang 'passport'
        'provider' => 'users',
        'hash' => false,
    ],
],

Bước 3: Tạo một API Route được bảo vệ

Trong routes/api.php, tạo một route và sử dụng middleware auth:api để bảo vệ nó:

// routes/api.php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

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

Route::middleware('auth:api')->get('/protected-data', function () {
    return response()->json(['message' => 'Bạn đã truy cập dữ liệu bảo mật thành công! Chúc mừng!']);
});

Bước 4: Tạo Personal Access Token

Bạn có thể tạo token bằng cách dùng php artisan tinker hoặc trong một controller nào đó. Anh Creyt sẽ dùng tinker để minh họa nhanh gọn:

php artisan tinker

Sau đó, trong tinker, chạy lệnh sau (giả sử bạn có một user với ID là 1):

$user = App\Models\User::find(1); // Lấy một user bất kỳ
$token = $user->createToken('My Personal Access Token')->accessToken;
echo $token;

Lệnh này sẽ trả về một chuỗi token dài loằng ngoằng. Đó chính là "chìa khóa" của bạn!

Bước 5: Gọi API với Token

Bây giờ, hãy dùng Postman hoặc curl để gọi API /api/protected-data với token vừa tạo. Bạn phải thêm token vào header Authorization với tiền tố Bearer.

curl -X GET \
  http://your-laravel-app.test/api/protected-data \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE'

Hãy thay YOUR_ACCESS_TOKEN_HERE bằng token bạn vừa tạo. Nếu thành công, bạn sẽ nhận được phản hồi:

{
    "message": "Bạn đã truy cập dữ liệu bảo mật thành công! Chúc mừng!"
}

Nếu bạn gọi mà không có token hoặc token sai, bạn sẽ nhận được lỗi 401 Unauthorized.

3. Mẹo (Best Practices) để sử dụng Passport hiệu quả

Để làm chủ Passport như một lập trình viên lão luyện, bạn cần nhớ vài mẹo nhỏ này:

  • Thời hạn Token là tối quan trọng: Đừng bao giờ cấp token vĩnh viễn! Hãy đặt thời gian hết hạn hợp lý cho các loại token (ví dụ: vài giờ cho access token, vài tuần cho refresh token) để giảm thiểu rủi ro khi token bị lộ. Passport có các phương thức như Passport::tokensExpireIn(), Passport::refreshTokensExpireIn(), Passport::personalAccessTokensExpireIn() để bạn cấu hình.
  • Sử dụng Scopes một cách thông minh: Không phải ai cũng cần chìa khóa vạn năng. Hãy định nghĩa các scope cụ thể (ví dụ: view-profile, edit-posts, delete-users) và chỉ cấp những quyền cần thiết cho từng token. Điều này giống như việc bạn cấp thẻ ra vào chỉ cho phép người đó vào phòng ban của họ, chứ không phải toàn bộ tòa nhà.
  • Revoke Token khi cần thiết: Khi người dùng đổi mật khẩu, đăng xuất khỏi mọi thiết bị, hoặc token bị lộ, hãy cung cấp cơ chế để thu hồi (revoke) các token cũ. Passport cung cấp phương thức revoke() trên đối tượng token.
  • Bảo mật Client Secret: Nếu bạn dùng các grant types như Password Grant hay Authorization Code Grant, client secret là cực kỳ nhạy cảm. Đừng bao giờ để lộ nó ở phía client (trình duyệt, mobile app)!
  • Chọn đúng loại Grant Type: Passport hỗ trợ nhiều loại grant type khác nhau. Personal Access Tokens tiện lợi cho nội bộ. Password Grant phù hợp cho ứng dụng di động hoặc SPA của chính bạn. Authorization Code Grant là chuẩn mực cho các ứng dụng bên thứ ba muốn truy cập dữ liệu người dùng của bạn (ví dụ: đăng nhập bằng Google, Facebook).

4. Ứng dụng thực tế của Laravel Passport

Passport không phải là một công nghệ viển vông đâu nhé, nó đang được sử dụng rộng rãi trong rất nhiều ứng dụng và website thực tế. Hãy nhìn xung quanh mà xem:

  • Ứng dụng di động: Bất kỳ ứng dụng di động nào (iOS, Android) kết nối đến một backend Laravel đều có thể dùng Passport để xác thực người dùng và bảo vệ API. Ví dụ, một ứng dụng E-commerce, mạng xã hội, hoặc quản lý công việc.
  • Single Page Applications (SPAs): Các SPA được xây dựng bằng React, Vue.js, Angular thường giao tiếp với backend thông qua API. Passport là lựa chọn tuyệt vời để cung cấp cơ chế đăng nhập và bảo mật cho chúng.
  • Microservices: Trong kiến trúc microservices, khi các dịch vụ khác nhau cần giao tiếp an toàn với nhau, Passport có thể cấp phát token để xác thực các cuộc gọi API nội bộ.
  • API cho bên thứ ba (Third-party APIs): Nếu bạn muốn xây dựng một nền tảng mà các nhà phát triển khác có thể tích hợp ứng dụng của họ vào (ví dụ: tích hợp plugin, bot), Passport với Authorization Code Grant sẽ là xương sống để quản lý quyền truy cập.
  • Dashboard quản lý nội bộ: Các hệ thống quản lý nội bộ (CMS, CRM) có thể có một phần frontend riêng biệt (SPA) kết nối đến API Laravel, và Passport sẽ đảm bảo chỉ nhân viên có quyền mới được truy cập.

Thấy chưa? Laravel Passport không chỉ là một công cụ, nó là một giải pháp toàn diện, giúp bạn xây dựng các hệ thống API hiện đại, an toàn và dễ quản lý. Hãy nắm vững nó, và bạn sẽ có thêm một “siêu năng lực” trong hành trình lập trình của mình đấy!

Chúc các bạn học tốt và hẹn gặp lại trong bài học tiếp theo của anh Creyt!

Thuộc Series: Lavarel

Bài giảng này được tự động xuất bản ngẫu nhiên từ thư viện kiến thức. Đừng quên đón xem các Từ khoá Hướng Dẫn tiếp theo nhé!

#tech #cyberpunk #laravel
Chỉnh sửa bài viết

Bình luận (0)

Vui lòng Đăng Nhập để Bình luận

Hỗ trợ Markdown cơ bản
Nguyễn Văn A
1 ngày trước

Tính năng này đỉnh quá ad ơi, chờ mãi mới thấy một blog Tiếng Việt có UI/UX xịn như vầy!