Custom OAuth2 Service di Moodle menggunakan Laravel Passport

Berikut implementasi yang saya lakukan untuk melakukan integrasi autentikasi Moodle menggunakan OAuth2 service dengaan bantuan Laravel Passport. Versi Moodle yang saya gunakan adalah 3.7 dan Laravel Passport versi 7.3. Tipe OAuth2 yang digunakan adalah Authorization Code Redirect Flow.

Pastikan Anda sudah menginstal Moodle, menginstal paket Laravel Passport dan membuat client id di Laravel Passport.

Pertama, Anda perlu membuat sebuah scope untuk mendapatkan identitas pengguna lewat OAuth2 yang disediakan moodle. Scope ini dibuat dari Laravel Project yang sudah ditanamkan Laravel Passport.

Untuk membuat scope, Anda gunakan fungsi Passport::tokensCan(). tokensCan umumnya berisi array yang berisi nama dan deskripsi scope. Tempatkan fungsi tersebut di dalam method boot pada class AuthServiceProvider di dalam Laravel.

use Laravel\Passport\Passport;

// Taruh fungsi ini di dalam method boot pada AuthServiceProvider class
Passport::tokensCan([
    'identity' => 'Get user identity'
]);

Kedua, login ke website Moodle sebagai admin dan masuk ke menu Site administration > pilih tab Server > pilih OAuth 2 services > pilih Create new custom service.

  1. Masukkan nama OAuth2 untuk di Moodle pada field Name. Wajib diisi. Saya berikan nama Testing OAuth.
  2. Masukkan client id yang didapatkan dari Laravel Passport pada field Client ID. Wajib diisi.
  3. Masukkan client secret yang didapatkan dari Laravel Passport pada field Client secret. Wajib diisi.
  4. Masukkan scope yang dimasukkan saat login request dan login request untuk offline access. Ini wajib diisi. Saya masukkan scope indentity.
  5. Centang opsi Show on login page.
  6. Klik tombol Save changes.

Hasilnya seperti pada gambar di bawah ini.

Hasil setting custom OAuth2 Service di Moodle

Ketiga, Anda perlu mengatur custom endpoints pada OAuth2 yang sudah dibuat dengan cara mengklik tautan nomor 2 yang berlambang todo list. Kemudian, klik tombol `Create new endpoint for issuer “Testing OAuth”.

  1. Masukkan nama endpoint pada field Name dan harus diakhiri dengan _endpoint. Umumnya Moodle menyediakan standar nama endpoint mulai dari authorization_endpoint, token_endpoint dan userinfo_endpoint.
  2. Masukan URL endpoint untuk authorization_endpoint, token_endpoint dan userinfo_endpoint. Protocolnya harus berupa HTTPS. Jika menggunakan Laravel Passport maka isinya seperti di bawah
authorization_endpoint : https://yourdomain.tld/oauth/authorize
token_endpoint : https://yourdomain.tld/oauth/token
userinfo_endpoint : https://yourdomain.tld/api/moodle_user
  1. Berikutnya simpan hasil endpoint yang sudah dibuat.

Hasilnya seperti gambar di bawah.

Hasil setting custom endpoints pada custom OAuth2 Service di Moodle

Keempat, Anda perlu memetakan user field yang ada di Moodle dengan custom OAuth2 yang sudah dibuat. Silakan masuk ke tautan nomor 3 yang berlambang pengguna. Kemudian klik tombol `Create new user field mapping for issuer “Testing OAuth”.

  1. Masukkan field dari OAuth2 yang dibuat ke field External field name. Wajib diisi.
  2. Pilih field internal dari Moodle ke field Internal field name.
  3. Simpan hasil perubahan yang sudah dibuat.

Field yang saya mapping mulai dari firstname, email, picture, username, lastname.

Hasilnya seperti di bawah.

Hasil user field mappings pada custom OAuth2 Service di Moodle

Persiapan selesai. Silakan logout dan masuk ke halaman login dengan OAuth2. :)

Login Moodle screen

Referensi

  1. Implementing a Laravel OAUTH IDP for OPENID Consumers.
  2. OAuth 2 Github service.