• Tidak ada hasil yang ditemukan

Autentikasi

Dalam dokumen Dr. Joseph Teguh Santoso, M.Kom. (Halaman 96-99)

BAB 5 PENGEMBANGAN BACKEND

5.8 Autentikasi

menyimpan id dan beberapa metadata lain seperti waktu pembuatan dan waktu pembaruan (terutama berguna untuk melacak dari perubahan). Kami kemudian mendefinisikan tabel relasi yang disebut user_course, di mana kami mengatakan bahwa itu terkait dengan tabel pengguna dan tabel kursus.

Perhatikan kunci utama—di sini, kami dapat dengan sempurna mengatakan bahwa kunci utama dapat berupa user_id dan course_id bersama-sama, tetapi kami ingin agar orang-orang dapat mendaftar lebih dari satu kali dalam kursus yang sama, tetapi tidak pada waktu yang sama. Tampaknya sah-sah saja jika Anda mendaftar di satu kursus, menyelesaikannya, dan kemudian Anda ingin memulainya lagi—contoh kursus yang benar-benar baru dengan semuanya kosong (kuis, jawaban, dll.). Sekarang Anda penasaran bagaimana semua ini bekerja, buka proyek kami dan kompilasi secara keseluruhan (folder root proyek):

mvn clean install -DskipTests

Setelah Anda selesai dengan itu, jalankan yang berikut ini untuk membuat database:

cd liquibase

mvn liquibase:update

Ini akan membuat beberapa file database di direktori /tmp Anda. Jika Anda menggunakan Windows, Anda mungkin harus mengubah folder sementara di parameter url dari pom.xml proyek liquibase dan juga di file ketekunan-layer.properties (di dalam modul lapisan ketekunan). Pada tahap ini Anda memiliki database sederhana yang dibuat di sistem Anda. Jika Anda menjalankan perintah ini lagi, Anda akan melihat bahwa tidak ada yang terjadi, karena tidak ada log perubahan baru yang akan diterapkan. Sekarang jika Anda ingin menambahkan kolom, misalnya, Anda dapat membuat set perubahan baru, mengkompilasi proyek, dan menjalankan perintah lagi, dan hanya perubahan baru yang akan dijalankan.

Cukup keren, bukan? Jika karena alasan tertentu Anda berakhir dengan masalah pada database Anda saat mencobanya atau Anda ingin menghapusnya, hapus saja semua file, dimulai dengan kursus, di folder tmp Anda:

rm /tmp/courses.*

Dan kita sudah selesai dengan database. Jika Anda tertarik dengan topik ini dan ingin mempelajarinya lebih dalam, ada banyak materi di Internet. Kami mengundang Anda untuk memeriksanya!

Dalam rekayasa perangkat lunak tidak ada bedanya. Ada beberapa cara untuk menerapkan otentikasi, beberapa metode dan teknik, dan coba tebak: ya, tidak ada cara terbaik yang bekerja untuk semuanya; setiap kasus adalah kasus. Bahkan untuk HTTP Basic Auth, yang merupakan salah satu cara autentikasi yang paling tidak disarankan karena pengguna dan kata sandi berjalan berdampingan dalam permintaan yang sama dan harus disertakan untuk setiap permintaan, ada tempatnya. Protokol OAuth2, yang akan kami gunakan untuk proyek kami, juga menggunakan HTTP Basic Auth saat meminta untuk mengautentikasi pengguna, dan penyedia layanan pembayaran (PSP) juga menggunakan Basic Auth untuk mendorong notifikasi ke server merchant, di antara contoh lainnya adalah di luar cakupan bagian ini. OAuth2 adalah salah satu protokol otentikasi paling populer yang digunakan saat ini.

Kami percaya alasan mengapa itu menjadi sangat populer adalah karena fitur yang Anda dapat mendelegasikan otentikasi ke otoritas tepercaya. Bayangkan Anda ingin membangun situs web Anda sendiri, tetapi Anda tidak ingin menerapkan mekanisme otentikasi Anda. Anda cukup mendelegasikan bagian ini ke Google atau Facebook, misalnya.

Tapi ini hanyalah salah satu mode yang disediakan OAuth2 untuk otentikasi. Ini disebut Hibah Kode Otorisasi. Dalam contoh kami, kami akan menggunakan Hibah Kredensial Kata Sandi Pemilik Sumber Daya, yang berarti bahwa pengguna akan memberikan nama pengguna dan kata sandi untuk diautentikasi dengan otoritas kami. Siap? Ayo mulai! Untuk latihan ini gunakan "kursus" proyek lengkap. Beralih di dalam proyek kami dan kompilasi:

mvn clean install -DskipTests

Kemudian beralih di dalam modul yang disebut rest-api dan jalankan (jika Anda tidak mengatur database, jalankan "mvn liquibase: update" di dalam modul liquibase).

mvn tomcat7:run

Kami mengonfigurasi plugin Tomcat7 Maven dengan modul kami, sehingga kami dapat menjalankan server dengan aplikasi kami. Tomcat adalah salah satu server de facto untuk menjalankan aplikasi Java, tetapi tentu saja jumlahnya banyak. Ini akan membuka port yang mendengarkan pada 8080. Sekarang mari kita coba mengautentikasi pengguna:

curl -u webapp:test -X POST localhost:8080/oauth/token -H "Content-type: application/x-www-form-urlencoded" -d "grant_type=password&username=test

@example.com&password=123456a$"

Anda akan melihat bahwa jawabannya adalah

{"error":"invalid_grant","error_description":"Bad credentials"}

Faktanya, tidak apa-apa... pengguna itu belum ada di database kami! Ayo daftarkan:

curl -v -X POST localhost:8080/api/v1/public/users -H "Content-type: application/json" -d '{"username":"[email protected]","password": "123456a$"}'

curl -u webapp:test -X POST localhost:8080/oauth/token -H "Content-type: application/x-www-form-urlencoded" -d "grant_type=password&username=test

@example.com&password=123456a$"

Sekarang responsnya terdiri dari dua token:

{"access_token":"7977c2f9-6664-4bdf-9bab-8d8ce6f0bc44",

"token_type":"bearer","refresh_token":"587d6ee2-5cb2-479d-Mari kita jelaskan apa yang baru saja kita lakukan di sini. Untuk mengautentikasi pengguna di server autentikasi, kita perlu mengautentikasi panggilan ke server autentikasi menggunakan HTTP Basic Auth; maka kami menggunakan kredensial "webapp" (pengguna) dan "test" (kata sandi). Kemudian kami meneruskan ke badan permintaan kredensial pengguna kami (yang baru saja kami buat). Hasilnya, kami menerima dua token:

1. Token akses: Token yang akan kita gunakan untuk membuat permintaan selanjutnya. Token ini digunakan untuk mengakses sumber daya server dan biasanya token berumur pendek. Ini meningkatkan keamanan, karena jika karena alasan tertentu seseorang memegang token ini, itu tidak akan memiliki akses lama.

2. Refresh token: Token yang akan kita gunakan untuk mendapatkan token akses baru setelah token yang kita gunakan kedaluwarsa.

Jika token akses yang baru saja kami terima kedaluwarsa, kami dapat memperbaruinya dengan tidak mengirimkan kredensial pengguna lagi (inilah yang terjadi ketika, misalnya, Anda membuka aplikasi di ponsel setelah 1 atau 2 hari—Anda tidak perlu mengetik di lagi kredensial Anda). Untuk memperbarui token, kita harus melakukan hal berikut:

curl -u webapp:test -X POST localhost:8080/oauth/token -H "Content-type: application/x-www-form-urlencoded" -d "grant_type=refresh_token&refresh_ token=587d6ee2-5cb2-479d-b64f-9bd8724f56e1"

dan Anda menerima sepasang token akses dan penyegaran baru. Untuk kesederhanaan pengaturan kami, kami menyimpan semua token ini di dalam memori. Ini berarti bahwa ketika kami me-restart server atau jika kami nanti dalam produksi memutuskan untuk menambahkan server baru ke server farm kami, token ini tidak akan berlaku lagi. Ini dapat dengan mudah diperbaiki dengan menyimpannya di penyimpanan persisten (seperti database) atau menggunakan JSON Web Tokens (JWT), yang merupakan token otomatis di mana token itu sendiri menggambarkan pengguna dan aspek keamanannya. Sekarang Anda dapat mulai menggunakan token untuk membuat permintaan seperti berikut (ingat bahwa untuk Anda, token berbeda!)

curl -v -X GET localhost:8080/api/v1/secured/users/me -H "Content-type:

application/json" -H "Authorization: bearer 7977c2f9-6664-4bdf-9bab8d8ce6f0bc44"

Di mana Anda akan mendapatkan sesuatu yang mirip dengan

{"id":1,"password":null,"name":null,"age":null,"gender":null,"username":

"[email protected]"}

Sebagai penutup, kami ingin memperkenalkan Anda pada istilah baru yang sejalan dengan Otentikasi. Istilah ini adalah Otorisasi. Orang sering menyalahgunakannya, tetapi sebenarnya sangat jelas. Kami telah mendefinisikan otentikasi sebagai mekanisme yang memverifikasi seseorang sebenarnya siapa atau apa yang mereka katakan, sementara otorisasi pada dasarnya berarti apa yang mereka otorisasi untuk akses. Misalnya, saat ini platform pendidikan online kami hanya akan memberikan akses kepada siswa, tetapi di masa depan akan memberikan akses kepada administrator dan guru. Otorisasi sering dilakukan dengan menetapkan peran saat pengguna mengautentikasi. Dalam kasus kami, kami

menetapkan peran SISWA. Di masa mendatang, kami mungkin perlu memiliki beberapa metadata dalam database, sehingga kami dapat memasukkan peran yang tepat saat pengguna login.

Dalam dokumen Dr. Joseph Teguh Santoso, M.Kom. (Halaman 96-99)