Odoo merupakan salah satu software ERP yang sangat populer. Odoo memiliki banyak fitur yang sangat lengkap dan bisa digunakan untuk berbagai kebutuhan bisnis. Odoo digunakan oleh perusahaan dari berbagai ukuran untuk mengelola proses bisnis, termasuk: Penjualan, Akuntansi, Operasi, Manufaktur, dan Sumber Daya Manusia(HR).
Laravel adalah framework PHP yang sangat populer. Laravel sangat powerful dan mudah digunakan untuk membuat berbagai jenis aplikasi web. Laravel memiliki banyak fitur yang sangat lengkap, salah satunya adalah fitur autentikasi. Dengan fitur autentikasi ini, kita bisa membuat aplikasi web yang memerlukan login dan password untuk mengaksesnya.
Pada artikel ini kita akan membahas bagaimana cara mengintegrasikan Odoo dengan Laravel sebagai SSO server.
Apa itu SSO (Single Sign On)?
SSO (Single Sign On) adalah sebuah sistem autentikasi yang memungkinkan pengguna untuk login sekali saja dan bisa mengakses berbagai aplikasi tanpa perlu login lagi. Dengan SSO, pengguna bisa mengakses berbagai aplikasi dengan satu login saja. SSO sangat berguna untuk menghemat waktu pengguna dan meningkatkan keamanan.
Mengapa Menggunakan SSO?
Ada beberapa alasan mengapa kita perlu menggunakan SSO:
- Memudahkan pengguna: Dengan SSO, pengguna bisa login sekali saja dan bisa mengakses berbagai aplikasi tanpa perlu login lagi. Ini akan membuat pengguna lebih nyaman dan produkt
- Meningkatkan keamanan: Dengan SSO, kita bisa mengontrol akses pengguna ke berbagai aplikasi. Jika pengguna sudah logout dari satu aplikasi, maka dia juga akan logout dari aplikasi lainnya.
- Menghemat waktu: Dengan SSO, pengguna bisa login sekali saja dan bisa mengakses berbagai aplikasi tanpa perlu login lagi. Ini akan menghemat waktu pengguna.
Integrasi Odoo Dengan Laravel Sebagai SSO Server
Pertama-tama, kita perlu membuat aplikasi Laravel sebagai SSO server. Aplikasi Laravel ini akan digunakan untuk autentikasi pengguna dan memberikan token autentikasi kepada pengguna yang sudah login.
Berikut adalah langkah-langkah untuk mengintegrasikan Odoo dengan Laravel sebagai SSO server:
-
Buat aplikasi Laravel baru dengan menjalankan perintah berikut:
1laravel new sso-serverjika sebelumnya sudah memiliki aplikasi Laravel, abaikan langkah ini dan lanjut ke langkah berikutnya.
-
Install library
Laravel PassportPada aplikasi Laravel yang baru dibuat, install library
Laravel Passportdengan menjalankan perintah berikut:1php artisan install:api --passportDokumentasi lebih lengkap tentang
Laravel Passportbisa dilihat di https://laravel.com/docs/passport -
Jika membuat aplikasi Laravel baru, sebelum dapat menggunakan laravel passport sebagai SSO server, perlu dibuat fitur untuk autentikasi pengguna terlebih dahulu. Untuk mempermudah, kita bisa menggunakan
Laravel BreezeatauLaravel Jetstream. Dokumentasi lebih lengkap tentangLaravel Breezebisa dilihat di https://laravel.com/docs/starter-kits#laravel-breeze danLaravel Jetstreambisa dilihat di https://laravel.com/docs/starter-kits -
Setelah membuat fitur autentikasi pengguna, selanjutnya kita perlu konfigurasi
Laravel Passport. Tidak banyak yang akan kita ubah karena hampir semua kebutuhan untuk oAuth2 sudah disediakan olehLaravel Passportlewat keajabiannya.Pertama, pastikan model
Userpada laravel telah menggunakanHasApiTokenstrait. Jika belum, tambahkan trait tersebut pada modelUser:1 2 3 4 5 6 7 8 9 10 11 12 13<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; }Kedua, pada file
config/auth.phppastikan driverapimenggunakanpassport:1 2 3 4 5 6 7 8 9 10 11'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ], -
Setelah instalasi berhasil, pada file
routes/api.phpkita akan melihat route baru yang mengarah ke/useryang digunakan untuk mengambil data user yang sedang login. Route ini akan digunakan oleh Odoo untuk mendapatkan data user yang sedang login.Kita dapat mengkostumisasi route tersebut sesuai kebutuhan, hal yang perlu dicatat bahwa route ini harus mengembalikan
usertanpa dibungkus olehkeylain.1 2 3Route::get('/user', function () { return request()->user(); })->middleware(['auth:api']);Contoh response body dari route diatas adalah sebagai berikut:
1 2 3 4 5 6 7 8{ "id": 1, "name": "John Doe", "email": "[email protected]", "email_verified_at": "2024-10-12T21:49:20+08:00", "created_at": "2024-10-12T21:49:20+08:00", "updated_at": "2024-10-12T21:49:20+08:00" } -
Lalu pada file
app/Providers/AppServiceProvider.phptambahkan kode berikut pada methodboot:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Laravel\Passport\Passport; class AppServiceProvider extends ServiceProvider { /** * Register any application services. */ public function register(): void { // } /** * Bootstrap any application services. */ public function boot(): void { Passport::enableImplicitGrant(); Passport::tokensCan([ 'user' => 'Access your user information', ]); Passport::setDefaultScope(['user']); } }Kita perlu menambahkan
Passport::enableImplicitGrant();agar aplikasi dapat menggunakanImplicit Grantuntuk mendapatkan token autentikasi. Implicit Grant adalah salah satu metode autentikasi OAuth2 yang memungkinkan aplikasi client untuk mendapatkan token autentikasi tanpa perlu menggunakanclient_iddanclient_secret. Hal ini karena Odoo menggunakangrant typeimplicituntuk mendapatkan token autentikasi. Walaupun laravel passport tidak merekomenasikan penggunaanImplicit Grantkarena alasan keamanan, namun untuk kebutuhan integrasi dengan Odoo, kita perlu menggunakanImplicit Grant.Selain itu, kita juga perlu mendefinisikan
scopeyang akan digunakan oleh aplikasi client untuk mendapatkan token autentikasi. Pada contoh diatas, kita mendefinisikan scopeuseryang digunakan untuk mengakses informasi user yang sedang login. Kita juga mendefinisikandefault scopeyang akan digunakan jika aplikasi client tidak mendefinisikan scope yang akan digunakan. -
Terakhir, untuk konfigurasi pada sisi laravel, kita perlu membuat
clientbaru. Client adalah aplikasi yang akan menggunakanLaravel Passportsebagai SSO server. Untuk membuat client baru, jalankan perintah berikut:1php artisan passport:clientIsikan nama client dan callback url sesuai kebutuhan. Untuk callback url pada aplikasi Odoo, isikan dengan
{base_url_odoo}/auth_oauth/signin. Setelah itu, akan munculclient_iddanclient_secretyang akan digunakan oleh aplikasi client untuk mendapatkan token autentikasi, catatclient_iddanclient_secrettersebut.Setelah mendapatkan
client_iddanclient_secret, kita perlu mengkonfigurasi aplikasi Odoo untuk menggunakanLaravel Passportsebagai SSO server.
Setelah semua konfigurasi dari sisi Laravel selesai, selanjutnya kita perlu konfigurasi aplikasi Odoo untuk menggunakan Laravel Passport sebagai SSO server.
-
Buka aplikasi Odoo dan login sebagai admin.
-
Pada menu
Settings, pilih menuGeneral Settings. -
Aktifkan
Developer Modedengan cara klik tombolActivate the developer modedi bagian bawah halaman.
-
Setelah
Developer Modeaktif, pilih menuTechnical->System Parameters. -
Klik tombol
Newuntuk membuat parameter baru. -
Pada form yang muncul, isikan
Keydenganauth_oauth.authorization_headerdanValuedengan1.
Parameter ini dibutuhkan agar Odoo mengirimkan token autentikasi ke aplikasi Laravel pada headers request. Laravel secara default memerlukan
Bearer Tokenpada headers request untuk autentikasi pengguna. -
Konfigurasi SSO Provider dengan cara mengaktifkan
OAuth Authenticationpada menuSettings->General Settings.
Lalu klik pada menu
OAuth Providersdan klik tombolCreateuntuk membuat provider baru. -
Isikan form yang muncul dengan informasi berikut:
Name: Nama provider, misalnyaLaravel PassportClient ID:client_idyang didapatkan dari aplikasi LaravelAllowed: CentangAuthorization URL:{base_url_laravel}/oauth/authorizeUser Info URL:{base_url_laravel}/api/userScope:user

-
Setelah provider berhasil dibuat, untuk dapat login dengan SSO, silakan buat user baru dengan email yang sama dengan user yang ada di aplikasi Laravel. User yang baru dibuat ini akan digunakan untuk login ke aplikasi Odoo dengan SSO.
-
User yang dibuat akan mendapatkan undangan via email, klik link pada email tersebut dan pada saat di halaman registrasi, pilih
Sign in with SSOdan pilih provider yang sudah dibuat sebelumnya.
catatan: Jangan isikan password pada form registrasi, karena user akan login menggunakan SSO. Jika password diisi, maka user akan login menggunakan password yang diisi pada form registrasi. Klik pada login with SSO sehingga selanjutnya user akan selalu login menggunakan SSO.

Jika user yang sebelumnya sudah login menggunakan password dan ingin mengubah login menggunakan SSO, maka user perlu reset password terlebih dahulu. Pada saat berada di halaman reset password, pilih
Sign in with SSOdan pilih provider yang sudah dibuat sebelumnya alih-alih mengisikan password baru.
Kesimpulan
Dengan mengintegrasikan Odoo dengan Laravel sebagai SSO server, kita bisa membuat aplikasi yang lebih aman dan nyaman untuk digunakan. Pengguna bisa login sekali saja dan bisa mengakses berbagai aplikasi tanpa perlu login lagi. Dengan SSO, kita bisa mengontrol akses pengguna ke berbagai aplikasi dan menghemat waktu pengguna.