Featured image of post Integrasi Odoo Dengan Laravel Sebagai SSO Server

Integrasi Odoo Dengan Laravel Sebagai SSO Server

Odoo adalah aplikasi ERP yang sangat populer, sedangkan Laravel adalah framework PHP yang sangat populer. Kedua aplikasi ini bisa diintegrasikan dengan mudah menggunakan SSO (Single Sign On). Pada artikel ini kita akan membahas bagaimana cara mengintegrasikan Odoo dengan Laravel sebagai SSO server.

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:

  1. 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.

  2. 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

  3. 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 atau Laravel Jetstream. Dokumentasi lebih lengkap tentang Laravel Breeze bisa dilihat di https://laravel.com/docs/starter-kits#laravel-breeze dan Laravel Jetstream bisa dilihat di https://laravel.com/docs/starter-kits

  4. 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 oleh Laravel Passport lewat keajabiannya.

    Pertama, pastikan model User pada laravel telah menggunakan HasApiTokens trait. Jika belum, tambahkan trait tersebut pada model User:

     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 driver api menggunakan passport:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    
        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],
    
  5. 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 oleh key 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"
    }
    
  6. Lalu pada file app/Providers/AppServiceProvider.php tambahkan kode berikut pada method boot:

     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 menggunakan Implicit Grant untuk mendapatkan token autentikasi. Implicit Grant adalah salah satu metode autentikasi OAuth2 yang memungkinkan aplikasi client untuk mendapatkan token autentikasi tanpa perlu menggunakan client_id dan client_secret. Hal ini karena Odoo menggunakan grant type implicit untuk mendapatkan token autentikasi. Walaupun laravel passport tidak merekomenasikan penggunaan Implicit Grant karena alasan keamanan, namun untuk kebutuhan integrasi dengan Odoo, kita perlu menggunakan Implicit Grant.

    Selain itu, kita juga perlu mendefinisikan scope yang akan digunakan oleh aplikasi client untuk mendapatkan token autentikasi. Pada contoh diatas, kita mendefinisikan scope user yang digunakan untuk mengakses informasi user yang sedang login. Kita juga mendefinisikan default scope yang akan digunakan jika aplikasi client tidak mendefinisikan scope yang akan digunakan.

  7. Terakhir, untuk konfigurasi pada sisi laravel, kita perlu membuat client baru. Client adalah aplikasi yang akan menggunakan Laravel 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 muncul client_id dan client_secret yang akan digunakan oleh aplikasi client untuk mendapatkan token autentikasi, catat client_id dan client_secret tersebut.

    Setelah mendapatkan client_id dan client_secret, kita perlu mengkonfigurasi aplikasi Odoo untuk menggunakan Laravel Passport sebagai SSO server.

Setelah semua konfigurasi dari sisi Laravel selesai, selanjutnya kita perlu konfigurasi aplikasi Odoo untuk menggunakan Laravel Passport sebagai SSO server.

  1. Buka aplikasi Odoo dan login sebagai admin.

  2. Pada menu Settings, pilih menu General Settings.

  3. Aktifkan Developer Mode dengan cara klik tombol Activate the developer mode di bagian bawah halaman.

    Developer Mode

  4. Setelah Developer Mode aktif, pilih menu Technical -> System Parameters.

  5. Klik tombol New untuk membuat parameter baru.

  6. Pada form yang muncul, isikan Key dengan auth_oauth.authorization_header dan Value dengan 1.

    System Parameters

    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.

  7. Konfigurasi SSO Provider dengan cara mengaktifkan OAuth Authentication pada menu Settings -> General Settings.

    OAuth Authentication

    Lalu klik pada menu OAuth Providers dan klik tombol Create untuk membuat provider baru.

  8. Isikan form yang muncul dengan informasi berikut:

    • Name: Nama provider, misalnya Laravel Passport
    • Client ID: client_id yang didapatkan dari aplikasi Laravel
    • Allowed : Centang
    • Authorization URL: {base_url_laravel}/oauth/authorize
    • User Info URL: {base_url_laravel}/api/user
    • Scope: user

    OAuth Provider

  9. 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.

  10. 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.

Sign in with 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.

Dibangun dengan Hugo
Tema Stack dirancang oleh Jimmy