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:
1
laravel new sso-server
jika sebelumnya sudah memiliki aplikasi Laravel, abaikan langkah ini dan lanjut ke langkah berikutnya.
-
Install library
Laravel Passport
Pada aplikasi Laravel yang baru dibuat, install library
Laravel Passport
dengan menjalankan perintah berikut:1
php artisan install:api --passport
Dokumentasi lebih lengkap tentang
Laravel Passport
bisa 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 Breeze
atauLaravel Jetstream
. Dokumentasi lebih lengkap tentangLaravel Breeze
bisa dilihat di https://laravel.com/docs/starter-kits#laravel-breeze danLaravel Jetstream
bisa 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 Passport
lewat keajabiannya.Pertama, pastikan model
User
pada laravel telah menggunakanHasApiTokens
trait. 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.php
pastikan driverapi
menggunakanpassport
: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.php
kita akan melihat route baru yang mengarah ke/user
yang 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
user
tanpa dibungkus olehkey
lain.1 2 3
Route::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.php
tambahkan 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 Grant
untuk mendapatkan token autentikasi. Implicit Grant adalah salah satu metode autentikasi OAuth2 yang memungkinkan aplikasi client untuk mendapatkan token autentikasi tanpa perlu menggunakanclient_id
danclient_secret
. Hal ini karena Odoo menggunakangrant type
implicit
untuk mendapatkan token autentikasi. Walaupun laravel passport tidak merekomenasikan penggunaanImplicit Grant
karena alasan keamanan, namun untuk kebutuhan integrasi dengan Odoo, kita perlu menggunakanImplicit Grant
.Selain itu, kita juga perlu mendefinisikan
scope
yang akan digunakan oleh aplikasi client untuk mendapatkan token autentikasi. Pada contoh diatas, kita mendefinisikan scopeuser
yang digunakan untuk mengakses informasi user yang sedang login. Kita juga mendefinisikandefault scope
yang akan digunakan jika aplikasi client tidak mendefinisikan scope yang akan digunakan. -
Terakhir, untuk konfigurasi pada sisi laravel, kita perlu membuat
client
baru. Client adalah aplikasi yang akan menggunakanLaravel Passport
sebagai SSO server. Untuk membuat client baru, jalankan perintah berikut:1
php artisan passport:client
Isikan 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_id
danclient_secret
yang akan digunakan oleh aplikasi client untuk mendapatkan token autentikasi, catatclient_id
danclient_secret
tersebut.Setelah mendapatkan
client_id
danclient_secret
, kita perlu mengkonfigurasi aplikasi Odoo untuk menggunakanLaravel Passport
sebagai 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 Mode
dengan cara klik tombolActivate the developer mode
di bagian bawah halaman. -
Setelah
Developer Mode
aktif, pilih menuTechnical
->System Parameters
. -
Klik tombol
New
untuk membuat parameter baru. -
Pada form yang muncul, isikan
Key
denganauth_oauth.authorization_header
danValue
dengan1
.Parameter ini dibutuhkan agar Odoo mengirimkan token autentikasi ke aplikasi Laravel pada headers request. Laravel secara default memerlukan
Bearer Token
pada headers request untuk autentikasi pengguna. -
Konfigurasi SSO Provider dengan cara mengaktifkan
OAuth Authentication
pada menuSettings
->General Settings
.Lalu klik pada menu
OAuth Providers
dan klik tombolCreate
untuk membuat provider baru. -
Isikan form yang muncul dengan informasi berikut:
Name
: Nama provider, misalnyaLaravel Passport
Client ID
:client_id
yang didapatkan dari aplikasi LaravelAllowed
: CentangAuthorization URL
:{base_url_laravel}/oauth/authorize
User Info URL
:{base_url_laravel}/api/user
Scope
: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 SSO
dan 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 SSO
dan 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.