Hệ thống triển khai sử dụng Oauth2, các website comsume cần tuân theo giao thức Oauth 2 cho việc authenticate user.
Ví dụ, các hệ thống sử dụng sẽ tích hợp nút đăng nhập (Login with TDA Passport), tương tự như Login with Google.
- Khi user click sẽ được redirect sang passport để xác thực
- Passport redirect lại link callback của website với grant code
- Website sử dụng code này cho việc lấy thông tin user, và cấp quyền đăng nhập cho user đó
Mô hình hệ thống:
TDA passport sử dụng Laravel passport để triển khai thành 1 Oauth Server.
Hệ thống chỉ gồm 2 đối tượng chính
- User: có 2 role:
adminvàstaff - Project
Đối với user admin, có thể đăng nhập vào toàn bộ các project, Đối với user staff, chỉ có thể đăng nhập vào các project khi được cấp quyền.
Triển khai cho 1 project mới
Admin tạo 1 project trong backoffice Tạo Oauth client cho các project

Các project sẽ sử dụng cặp client credentials này để triển khai authentication.
Ví dụ triển khai cho các website Laravel:
Cài packages:
composer require laravel/socialite
composer require socialiteproviders/laravelpassport
Trong config/services.php, thêm credentials, có thể load từ .env hoăc hardcode
'tda_passport' => [
'host' => env('TDA_PASSPORT_HOST', 'https://passport.tdagroup.online'),
'client_id' => env('TDA_PASSPORT_CLIENT_ID', 'client-id'),
'client_secret' => env('TDA_PASSPORT_CLIENT_SECRET', 'client-secret'),
'redirect' => 'auth/callback',
]
Thêm đoạn code sau vào trong boot method của AppsServiceProvider hoặc trong service provider để khai báo tda_passport oauth provider
\Illuminate\Support\Facades\Event::listen(
function (\SocialiteProviders\Manager\SocialiteWasCalled $event) {
$event->extendSocialite(
'tda_passport',
\SocialiteProviders\LaravelPassport\Provider::class
);
}
);Cấu hình route handle cho redirect và callback, có thể viết trong routes/web.php:
Chú ý, nếu project sử dụng guard name khác hoặc custom auth, cần điều chỉnh lại nội dung trong callback cho phù hợp
use App\Models\User;
use Illuminate\Support\Facades\Route;
use Laravel\Socialite\Facades\Socialite;
Route::prefix('auth')->group(function () {
// Redirect users to the tda_passport OAuth authorization page
Route::get('/login', function () {
return Socialite::driver('tda_passport')
->with([
'redirect_uri' => route('auth.callback'),
])
->redirect();
})->name('auth.login');
// Handle the callback from tda_passport service
Route::get('/callback', function () {
$user = Socialite::driver('tda_passport')
->with([
'redirect_uri' => route('auth.callback'),
])
->user();
$staff = User::firstOrCreate([
'email' => $user->getEmail(),
], [
'name' => $user->getName(),
'password' => Str::random(7),
]);
// login as the staff
Auth::login($staff);
// redirect
return redirect()->intended('/backoffice');
})->name('auth.callback');
});Nếu sử dụng auth guard khác web, ví dụ customer, thì phần login điều chỉnh lại
Auth::guard('staff')->login($staff)Tiếp theo, tại giao diện đăng nhập, tạo 1 button hoặc 1 link đến /login url bên trên để chuyển hướng sang TDA passport cho việc đăng nhập.
Các project đang đươc sử dụng
Hướng dẫn triển khai cho Wordpress
- Tạo project cho các site wordpress trên Passport, chú ý check Ignore redirect URL validation…
2. Tạo 1 Oauth client trong project, ko cần nhập redirect url

-
. Cài plugin Authorizer cho wordpress site

-
Settings như sau


Nhập client_id, client_secrect của Oauth client Các thông tin như Authorization Url, Access Token Url, Resoure Owner Url như hình
