Ngobrolin JWT - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #ngobrolinWEB! Malam ini akan membahas tentang JWT, auth, acess token, refresh token dll. Tentu saja bersama Ivan dan Eka. 🔔 Akan mulai mengudara pukul 20:00WIB ya. Yuk mari diramaikan! Kunjungi https://ngobrol.in untuk catatan, tautan dan informasi topik lainnya.
Ringkasan Episode
Bantu KoreksiEpisode ini membahas secara mendalam tentang JWT (JSON Web Token), mulai dari cara pengucapan yang benar menurut spesifikasi resmi yaitu "jot", hingga struktur dan cara kerjanya. Para host menjelaskan komponen JWT yang terdiri dari header (hijau), payload (putih), dan signature (biru/ungu), serta bagaimana data di dalamnya hanya di-encode dengan Base64, bukan di-encrypt. Diskusi juga menyentuh pentingnya membaca RFC dan spesifikasi teknis, dengan contoh kasus menarik tentang perbedaan perilaku redirect 301 di berbagai browser yang ternyata dijelaskan di RFC. Selain itu, dibahas juga penggunaan JWT dalam autentikasi, perbedaan dengan session-based authentication, serta best practices dalam implementasinya.
Poin-poin Utama
- •JWT secara resmi diucapkan "jot" menurut spesifikasi di papernya, bukan "jay-double-u-tee"
- •JWT terdiri dari 3 bagian: header (algoritma), payload (data/claims), dan signature (untuk verifikasi)
- •Data di JWT hanya di-encode dengan Base64, bukan di-encrypt, sehingga bisa dibaca siapa saja
- •Membaca RFC dan spesifikasi teknis penting untuk memahami behavior yang tidak dijelaskan di tutorial biasa
- •Contoh kasus: redirect 301 di-cache permanent oleh browser sesuai RFC, yang bisa menyebabkan masalah jika tidak dipahami
- •JWT debugger di jwt.io dapat digunakan untuk melihat dan memverifikasi isi token
- •Pentingnya memahami kapan menggunakan JWT vs session-based authentication sesuai kebutuhan aplikasi
Transkrip Bantu Koreksi
0:00[Musik]
0:09[Music]
0:13Halo, halo, halo, selamat malam.
0:16Selamat malam.
0:18- Halo semuanya. - Mana suara soundboard-nya?
0:20Mana, pelo let, om?
0:22[Music]
0:24- Oh bukan ya? - Oh apaan ya?
0:26[Music]
0:28[Gelak]
0:30Apa kabar, apa kabar?
0:32Selasa malam, mudah-mudahan.
0:34Waktunya ngobrolin web nih.
0:36Waktunya ngobrolin web.
0:38Apaan, nggak nungguin gitu langsung?
0:40Selasa malam waktunya ngobrolin web.
0:42Nggak berengan.
0:44Kita udah lama ya, nggak berengan gitu.
0:46Nggak berusaha berengan.
0:48Nggak berusaha berengan, udah capek.
0:50Soalnya waktu itu kan sempat ada sponsor,
0:52jadi sponsor duluan.
0:54Waktu Sasa malam.
0:56Ya tetap aja, sebenarnya bisa aja.
0:58Abis kelar sponsor kan bisa.
1:00- Iya, iya, iya. - Bisa langsung aja.
1:04Apa kabar, apa kabar?
1:06Coba chat, itu dulu.
1:08Apa, absent dulu.
1:10Di kanan bawah itu nanti muncul
1:12chat-nya.
1:14Pengen nyobain.
1:16Ada overlay-nya.
1:18Fitur baru dari Streamyard.
1:20Automatis gitu.
1:22Coba di chat.
1:24Halo, coba ya, halo.
1:26Kalau gitu bahaya dong.
1:28Nah, muncul kan?
1:30- Kelihatan nggak? - Keren sih.
1:32Oh iya, muncul.
1:34Jadi kalau teman-teman...
1:36Kok Imbre itu bahaya?
1:40Imbre itu
1:42teranjur image-nya.
1:44Image-nya bahaya gitu.
1:46Konotasinya, Imbre itu
1:48konotasinya negatif gitu maksudnya.
1:50Bukan, kan bahaya
1:52bukan bahaya negatif.
1:54Bahaya negatif lah.
1:56Bahaya negatif, cuman kadang-kadang...
1:58Walaupun yang ngomong
2:00sembarangan orang lain, tetap aja
2:02Imbre yang kena.
2:04Padahal image-nya nggak ada.
2:06Saya kehilangan konteks ini kayaknya
2:08inside jokes-nya
2:10waktu di Shanghai ya.
2:12Enggak kok.
2:14Dari sebelumnya.
2:16Dari sebelumnya.
2:22- Halo teman-teman. - Malem ini bahasa apa kita?
2:24Yang di YouTube
2:26yang juga di link-in.
2:28Yang di link-in kita nggak bisa...
2:30Comment bisa, comment bisa.
2:32Nggak tahu masuk apa nggak.
2:34Masuk nggak kalau di link-in?
2:36Yang 6 ton di link-in
2:38masuk harusnya.
2:40Coba dulu, coba dulu.
2:42Kalau teman-teman yang di link-in, boleh jangan komentar kayak maksa gitu.
2:44Itu juga enak.
2:48Jadi malam ini kita akan
2:50bahas tentang JWT.
2:52Tapi sebelum kita bahas tentang
2:54apa itu JWT?
2:56Cara penggunanya gimana?
2:58Kenapa pakai JWT? Dan lain-lain.
3:00Pertanyaan terbesar
3:02yang harus dijawab sebelum kita bahas
3:04tentang JWT adalah bagaimana
3:06cara melafalkannya.
3:08Nah, ya JWT.
3:10Bahasa Indonesia.
3:12Itu kan bahasa Indonesia.
3:14JWT.
3:16JWT.
3:18Kalau bisa bahasa Inggris,
3:20JWT.
3:22Emang gimana?
3:24JWT.
3:26Kan ada kalau SQL
3:28kan ada yang bilang SQL.
3:30Ada yang bilang SQL.
3:32Ada yang bilang
3:34apa lagi? Cuma itu sih ya?
3:36Cuma itu doang sih. Biasa yang debat kan
3:38cuma GIF lawan
3:40GIF doang kan.
3:42Ada perdebatannya.
3:44Sama itu.
3:46Itu bukanya, pisang itu
3:48bukanya dari mana? Dari atas apa dari bawah?
3:50Itu juga ada perdebatan ya, Marin.
3:52Itu bukan...
3:54Itu doangnya itu yang gimana?
3:56Bisa bayangin pisang ga?
3:58Bisa.
4:00Lu buka pisang itu dari mana?
4:02Dari atas apa dari bawah?
4:04Atas itu yang dekat.
4:06Nanti ada Jusan jawab.
4:08Nah, itu lebih kecil.
4:10Bebas, bebas.
4:12Itu kan ASHAB ya.
4:14Mau yang mana, pilih. Bebaskan.
4:16Sama kayak bubur diaduk atau tidak diaduk.
4:18Diaduk atau engga.
4:20Diaduk dong.
4:22Ga diaduk itu salah.
4:24Dan seset.
4:26Jadi jawaban temen-temen
4:28ternyata keliru.
4:30Jadi JWT itu
4:32ada pronunciasi
4:34di papernya.
4:36Jadi kalau buka
4:38papernya.
4:40Ada pronunciasi segala.
4:42Di bagian introduction.
4:44Di sini ada jod.
4:46Jod.
4:48Ga pernah sih gue pake jod.
4:50Selalu JWT.
4:52JWT gitu.
4:54Terus sampe
4:56ada spesifikasi teknisnya gitu.
4:58Di paper lo buat apa ya?
5:00Menarik juga ya?
5:02Oke. Ini sering banget.
5:04Itu dia island ya.
5:08Jadi JWT itu
5:10disarankan
5:12oleh papernya atau
5:14open standard.
5:16Untuk ngomongin
5:18apa? Pronunciasi atau
5:20penyebutannya adalah jod.
5:22Iseng banget sih.
5:24Pasti ga disikir gitu loh.
5:26Ga maksudnya
5:28ya aduh.
5:30Kayak masih ga kebayang.
5:32Komprehensif.
5:34Papernya komprehensif.
5:36Sampai pronunciasi segala dibahas.
5:38Ini bacanya
5:40biar cepet jod aja.
5:42Itu kan kayak.
5:44Halo mas
5:46Ferdy.
5:48Ferdy Kruger.
5:50Pedri, oh Pedri.
5:52Sorry, salah.
5:54Pedri.
5:56Sudah jawabnya.
5:58Pedri Kruger.
6:00Tuh kan.
6:02Salah semua kan kita selama ini
6:04ngomongnya kan.
6:06Ya JWT jod.
6:08Kalo kita ngomong jod ga ada yang tau karena ga ada yang
6:10baca papernya.
6:12Malas juga.
6:14Atau kita aja yang ga pernah baca papernya.
6:16Iya.
6:18Orang lain disekitar kita yang kerja sama
6:20kita baca papernya atau ga?
6:22Pasalanya kan itu.
6:24Coba temen-temen yang ada disini
6:26ada 9 atau 10
6:28orang yang katanya
6:30menonton.
6:32Ada yang baca paper
6:34jod ga? JWT ga?
6:36Ga, dan itu
6:38juga bisa ditarik lagi.
6:40Kalau kita belajar sesuatu, baca
6:42paper spesifikasi teknisnya
6:44atau ga? Karena gue juga ga.
6:46Engga.
6:48Baca MDN ya.
6:50Tidak pernah.
6:52Tidak pernah.
6:54Spesifikasi
6:56apa lagi ya?
6:58Kadang ga ngerti. Maksudnya kadang ga paham
7:00cari artikel yang
7:02ngin, tapi kayak nyampeinnya dengan bahasa
7:04lebih ramah manusia, ada gambarnya.
7:06Gampangnya aja deh JavaScript.
7:08Kita berkuarkor ngomong
7:10event loop contohnya.
7:12Ada yang pernah ga baca spesifikasi event loop-nya?
7:14Ya dong.
7:16Nah kan harusnya baik ya, karena itu spesifikasi
7:18teknis ya. Tapi kan itu
7:20lebih baik buat yang bikin browser kan?
7:22Bangga gitu ya, ga baca itu bangga.
7:24Yang bikin runtime.
7:26Yang bikin runtime JavaScript.
7:28Iya.
7:32Memang jarang sih ya.
7:34Biasanya kan kita cari tutorial ya.
7:36GraphQL saya juga ga baca
7:38spesifikasinya.
7:40Contoh atau demo.
7:42Karena kan praktikal.
7:44Ingin langsung di praktekkan
7:46pada saat bikin produk
7:48atau bikin tutorial atau bikin
7:50aplikasi.
7:52Sebagai salah satu
7:54contohnya yang
7:56membuat saya
7:582 hari lalu
8:00memenangkan sebuah
8:02perdebatan.
8:04Jadi ada ceritanya gini.
8:06Menang heketong atau menang ombak ya?
8:08Perdebatan.
8:10Perdebatannya lumayan ini.
8:12Karena perdebatan
8:14soal redirect 301.
8:16Oke.
8:18Karena keputusannya
8:20sangat besar.
8:22Permanen atau ga?
8:24Jadi
8:26kita lagi
8:28memutuskan
8:30apakah perlu memakai 301
8:32atau 302.
8:34Ada case di user yang
8:36tadinya
8:38butuh URL itu
8:40maksudnya URL itu tadinya
8:44ga ada
8:46dan harus di redirect.
8:48Tapi kemudian akan
8:50ada.
8:52URL itu akan dipakai.
8:54Slug itu akan dipakai.
8:56Tadinya ga ada.
8:58Jadi daripada 404
9:00mau dilarikan ke tempat lain
9:02dulu.
9:04Tapi kemudian user membuat URL itu menjadi ada.
9:06Nah.
9:08Terus kemudian
9:10dari sisi user
9:12dia bilang
9:14ini gua sudah bikin URL
9:16page itu sudah ada.
9:18Namun tetap redirect.
9:20Nah.
9:22Datang lah kita
9:24mungkin case di browser.
9:26Kalau dipakai incognito case.
9:28Tapi dia kembali ke kita.
9:30Berarti user-user yang di luar sana
9:32yang publik sudah mengunjungi
9:34URL itu sebelumnya.
9:36Gimana kita bisa
9:38nge-clear case mereka?
9:40Gak bisa kan?
9:42Gak bisa.
9:44Berarti kan bahaya itu kan.
9:46Dan itu kebetulan compliance.
9:48Jadi URL itu khusus compliance.
9:50Jadi ga bisa ada apa-apain.
9:52Kalau ga, kacau.
9:54Secara compliance-nya.
9:56Oke.
9:58Kita telusuri. Kita sampai
10:00telusuri sampai ke
10:02sisi CDN.
10:04Provider.
10:06Dari sisi CDN provider mengatakan
10:08engga kita ga ngasih
10:10cash header
10:12di 301.
10:14Ga ngasih
10:16cash header blablabla.
10:18Akhirnya ditelusuri. Memang ga ada cash header.
10:20Gak ada.
10:22Terus kenapa si browser nge-cash?
10:24Barulah dipahami
10:26di pelajarisannya.
10:28Ternyata ada di RFC
10:30kalau 301 itu
10:32si browser
10:34akan nge-cash
10:36forever.
10:38Dan itu sesuai implementasi
10:40si browser.
10:42Make sense ya.
10:44Jadi meskipun kita kirim
10:46cash header untuk 301
10:50ada browser yang akan mengignore.
10:52Jadi secara implementasi
10:54ga
10:56sama browser satu
10:58dengan browser lain.
11:00Jadi dari situ juga baru belajar.
11:02Dan setelah belajar itu
11:04menelusurinya dengan menggunakan
11:06Jemenai dan panjang lewati
11:08tanya Jemenai. Akhirnya Jemenai
11:10menunjukin ke sebuah dokumentasi
11:12di RFC.
11:14Barulah saya baca RFC-nya.
11:16Oh, today I learn.
11:18Ternyata perlu
11:20baca RFC.
11:22-Itulah gunanya ya. Gunanya membaca
11:24RFC, paper,
11:26spesifikasi, dan lain-lain ya.
11:28Kalau udah detail.
11:30-Nggak mendeskripsikan implementasinya.
11:32Tapi dia ngasih inspektif
11:34behavior-nya, ya kan?
11:36Browser menerapinnya gimana terserah.
11:38Nah, ya itu berarti
11:40RFC-nya bilang
11:42move permanently.
11:44301 kan udah pindah nih
11:46permanently. Ting! Yang bikin
11:48browser, oh, permanent. Ya udah.
11:50Dibuat permanent. Maksudnya itu understandable
11:52banget sih ya, kalau dari
11:54perspektif itu.
11:56Cuma kita kan nggak baca
11:58RFC sehari-hari.
12:00-Buru-buru baca
12:02RFC. Kita
12:04developer high-level.
12:06Maksudnya
12:08sebuah teknologi
12:10itu kan kita pake banyak
12:12banget teknologi sepotong-sepotong
12:14ya kita ambil, ya misalnya kita
12:16pake HTTP lah ya. Kita pake
12:18apapun itu, ECMAScript,
12:20segala macem apalah, misalnya
12:22event listener juga kan pasti ada
12:24spesifikasinya. Masa kita
12:26mau baca satu persatu?
12:28Agak sulit juga ya.
12:30-RFC.
12:32RFC kepanilannya apa ya?
12:34Disini ada nih. RFC.
12:36-RFC.
12:38Ya dibuka aja.
12:40-Request for comment.
12:42-Bukan. Request for comment.
12:44Apa panjangannya? Request for comment.
12:46-Oh, request for comment.
12:48Iya.
12:50Spesifikasi teknisnya
12:52suatu teknologi.
12:54-Yes. Mas Gayu itu
12:56benar. Request for comment.
12:58Saya baru tahu
13:02Jot dan Oout
13:04itu beda tapi saling melengkapi. Betul.
13:06Kita
13:08perlu ngomong jot atau jeli?
13:10-Jot.
13:12-Ngemain level dulu ya.
13:14-Jot dong. Biar kita
13:16bisa nge-flexing, bisa pamer bahwa
13:18kita udah baca spesifikasinya.
13:20-Oh iya. Soalala kita udah
13:22baca ya.
13:24-Ya udah baca bagian itu tepatnya.
13:26-Request
13:28for comment itu apa? Request
13:30for comment itu jadi misalkan
13:32kita bikin sebuah dokumen teknis.
13:34Baik itu
13:36secara publik atau internal perusahaan.
13:38Terus mau
13:40di review sama teman-teman
13:42kita, itu biasanya kita
13:44minta RFC dong. Request for comment
13:46gitu. Benar gak sih?
13:48-Ya, tapi kalau konteks
13:50teknologi web kan ya
13:52itu hampir semua
13:54teknologi web itu kan bukan
13:56milik siapapun ya.
13:58Maksudnya gak, bukan punya satu perusahaan
14:00atau apapun. Jadi
14:02apa yang nentuin adalah
14:04konsorsium yang
14:06anggotanya juga banyak
14:08dari berbagai
14:10pihak. Ya itu buat
14:12buat meloloskan
14:14atau mempublish suatu
14:16standar, standar teknis
14:18yang berarti
14:20mereka yang bikin, yang mempropos
14:22bakal bikin semacam
14:24spesifikasi teknis.
14:26Nah itu overview-nya sih
14:28kayak yang dibeskripsikan itu
14:30behavior-nya seperti apa, kegunaan
14:32seperti apa, cara pakenya seperti apa.
14:34Nah semua pihak-pihak lain
14:36yang konsorsium kayak W3C
14:38atau semacamnya, ya pihak-pihak
14:40lain bakal pada ngasih input
14:42sampai nanti
14:44voting atau, ya voting ya
14:46kelihatannya voting, kalau semua
14:48udah oke, ya they publish.
14:50-Yuntinya ini ya,
14:52apa namanya?
14:54Publikasi atau sebuah
14:56tulisan
14:58yang dipublikasi dan kemudian
15:00diminta untuk
15:02mereview ya, orang lain diminta untuk
15:04mereview. -Oleh semua
15:06stakeholder atau pihak-pihak ya?
15:08-Oleh semua stakeholder, ya.
15:10Kalau ada yang tahu
15:12misalkan untuk acara
15:14apa namanya?
15:16CHP, oh beda lagi ya.
15:18Call for Paper.
15:20-Tidak, kalau itu mah paper
15:22buat jadi
15:24bicara di acara itu. -Jadi gue bicara
15:26buat teknologi yang dirilis
15:28dipake buat ya semua
15:30maksudnya apapun kita mau pakai
15:32library atau framework atau
15:34kita bikin aplikasi jenis apapun
15:36kan tetap pakai teknologi yang
15:38sama, behavior-nya harus sama.
15:40-Ya, kadang-kadang
15:42di kantor juga ada
15:44proses seperti ini, jadi misalkan
15:46kita punya
15:48ide untuk implementasi
15:50sebuah teknologi baru.
15:52Misalkan waktu itu Ivan pernah propose apa ya?
15:54-Denu
15:56atau Bun, gitu ya.
15:58Mengandikan OJS.
16:00Sudah pakai ya? -Denu.
16:02-Itu ada proses RFC-nya dulu nggak?
16:04Bikin dokumen alasannya
16:06atau langsung POC?
16:08-POC aja, terus
16:10kutik-kutik sama
16:12teman sebelah.
16:14"Ayo dong kita pakai Denu, ayo dong."
16:16"Ya sudah, cobalah."
16:18-Oh, ini ternyata
16:20ada penjelasannya
16:22RFC itu kalau buat
16:24di IETF
16:26ada kayak
16:28format-nya.
16:30Ada kayak standar-standar diskusinya.
16:32Yang apa?
16:34Ya, consortium yang
16:36memproduksi standar-standar
16:38teknologi internet, macam-macam sih.
16:40-Ada RFC editor.
16:46-Wuh, keren amat.
16:48-Oh, IETF, internet
16:50engineering task force,
16:52ternyata ada gugus kerjanya.
16:54-Internet
16:56engineering task force.
16:58-Internet engineering ya.
17:00Oh, ada strukturnya
17:08udah diatur ya?
17:10-Pokoknya udah ada struktur
17:12format-nya yang
17:14terstandarisasi.
17:18Format-nya bisa
17:20ATML, bisa PlantX, atau
17:22ATML Live.
17:24Dari PlantX jadi ATML,
17:26bisa PDN, bisa
17:28SML ya.
17:30-Yang lebih menarik, ini status
17:32jadi bisa informasional
17:34dulu.
17:36Kalau baru di Godok, Pier tahu aja.
17:38Maksudnya, menginformasikan
17:40semua stakeholder bahwa
17:42ada ini nih.
17:44Iya, statusnya paling
17:46bahkan sebelum experimental
17:48itu ada informasional.
17:50-Ada draft standar,
17:52internet standar,
17:54based current practice,
17:56historic,
17:58sudah jadi masa lalu ya,
18:00sejarah. -Kalau udah pre-created.
18:02-Kalau udah pre-created ya.
18:04Oke, menarik-menarik.
18:06-Jadi semua kayak udah ada
18:08workflow-nya gitu ternyata.
18:10-Ya, oke.
18:12Sekarang kita masuk apa itu?
18:14JSON Web Token.
18:16-Jod itu harus pakai
18:18JSON gak sih? Bisa gak sih pakai?
18:20-SML? Namanya
18:22udah JSON. -Namanya
18:24Sock nanti, Sock.
18:26-Gak bisa.
18:28-Jadi XWT.
18:30-XWT.
18:32JSON Web Token
18:34ini berarti
18:36salah satu
18:38apa ya, kan
18:40awalnya kan format
18:42pengiriman
18:44interchangeable itu apa ya, format
18:46bertukar data itu kan
18:48formatnya awalnya SML ya.
18:50Sebelum SML ada lagi gak sih?
18:52Ya, mungkin text biasa ya.
18:54alien text, habis itu jadi
18:56SML,
18:58habis itu sekarang yang terkenal ya
19:00JSON kan, formatnya JSON kan.
19:02Kalau kita hit
19:04REST API apa, returnnya JSON.
19:06Mungkin masih ada yang returnnya
19:08SML, mungkin masih ada, tapi
19:10bagian besar JSON.
19:12Terus habis itu
19:14munculah teknik-technik,
19:16beberapa teknik autentikasi kan, salah satu
19:18tadi dari KSA bilang ada
19:20out-out, ada macem-macem,
19:22jadi populer juga nih
19:24si GWT-nya ya,
19:26bertukar token,
19:28bertukar token antar client dan server ya.
19:30-Cuma sebenarnya
19:32dari namanya, ini kayak kurang deskriptif
19:34gak sih? Sebenarnya, apa?
19:36Ini kan
19:38GWT itu ada karena
19:40kebutuhannya yaitu ada
19:42securely transmitting, jadi kayak
19:44justru kalau kita lihat
19:46penggunaannya, fokusnya di secure
19:48sama signing,
19:50kan ini yang, signing
19:52ini yang gak ada di
19:54pokoknya sistem-system
19:56pertukaran informasi sebelumnya,
19:58jadi ada faktor yang pentingnya adalah
20:00secure, signing, sama
20:02yaitu bisa encrypt, decrypt, bisa
20:04pilih jenis algoritmanya.
20:06-Oh iya, ada lagi
20:08kalau yang baru-baru ada yaml ya,
20:10bener ya, ada yaml.
20:12-Json5 itu
20:14supaya bisa commenting. -Json juga ada banyak ya.
20:16Json juga ada banyak, ada Bson.
20:18-Ada JsonC, JsonC
20:20yang bisa ada comment-nya.
20:22Tapi terlalu json5
20:24supaya bisa commenting kan.
20:26-Oh json5 ya, bukan
20:28jsonS ya, keren.
20:30Oh iya, jsonK ya, harusnya comment ya.
20:32Json5.
20:34Apa namanya,
20:36kalau,
20:38kita kembali ke Jot ini dulu ya.
20:40Jot ini awalnya itu
20:42kayak, di desain itu sebenarnya
20:44untuk komunikasi sih,
20:46transmitting information.
20:48-Ya, transmisi data kan,
20:50pertukaran data.
20:52-Authenticasi itu
20:54adalah salah satu
20:56implementasi karena ada
20:58pertukaran data di sana aja.
21:00Cuman bukan, json5 itu
21:02bukan khusus untuk autentikasi.
21:04-Ia dijual terpisah gitu.
21:06-Oh, khusus autentikasi.
21:08Json web token.
21:10-Memunakan json web token.
21:12-Nah, si sebenarnya
21:18data yang
21:20dibawa sama json web token
21:22saat di-transmit itu sebenarnya
21:24hanya di-encoding
21:26base64 aja sebenarnya.
21:28Jadi, sebenarnya
21:30kalau kita ada json web token,
21:32kita decode,
21:34ada sih sebenarnya
21:36data-nya bisa kelihatan,
21:38json-nya itu kelihatan.
21:40Namun,
21:42yang terpenting di sini ya,
21:44menurut pengalaman,
21:46yaitu signing,
21:48digital signing-nya itu loh,
21:50signing token-nya itu yang antara di,
21:52nanti di-echornya sih,
21:54kalau di-headernya kan ngasih tahu
21:56dia pakai,
21:58algoritma apa,
22:00terus kemudian body,
22:02terus kemudian ditutup sama
22:04sign key-nya.
22:06Nah, kita di sisi server
22:08punya private key-nya
22:10untuk
22:12memvalidasi
22:14si sign token-nya itu.
22:16Kalau sign token-nya itu
22:18tidak valid,
22:20kita tidak perlu process
22:22dah tuh body-nya.
22:24Berarti ya itu sudah ada campur tangan
22:26something di tengah-tengah.
22:28Itu scenario.
22:34Authorization itu cuma salah satu scenario
22:36yang dipakai, yang menggunakan
22:38teknik.
22:40Di dunia nyata,
22:42umumnya developer ketemu,
22:44pertama kali ketemu JWT,
22:46ketemu Jod, ya pas karena
22:48penggunaan authorization kan.
22:50Walaupun penggunaan lain juga bisa.
22:52Cuma yang paling umum adalah
22:54authorization.
22:56Karena
22:58kalau di web itu biasanya untuk
23:00information exchange itu
23:02terbuka, jadi datanya
23:04dilihat nggak apa-apa kan, kayak recipe I
23:06gitu kan.
23:08Meskipun tidak semua.
23:10Kalau misalkan kita mau kirim sesuatu
23:14yang rahasia, gunakanlah
23:16JWT.
23:18Tapi sebenarnya
23:20rahasia seperti apa?
23:22Nggak bisa juga sih, Mas.
23:24Kalau rahasia misalnya sangat
23:26penting, nggak bisa juga pakai JWT.
23:28Karena body-nya itu
23:30bisa di decrypt tetap.
23:32Tetap bisa ya, walaupun
23:34kita nggak punya private key-nya.
23:36Coba aja cari contoh.
23:38Ada kan debuggernya? Cari contoh
23:40JSON Web Token deh.
23:42Dibuggernya
23:44token.io
23:46Eh, salah.
23:50Oh iya.
23:52Ini.
23:54Oh iya, ini
23:56yang ijo itu apa?
23:58Ini ada 3 kan, ijo, putih,
24:00sama biru.
24:02Yang
24:04itu generate example coba
24:06pencet dulu, generate example.
24:08HS
24:12HS aja, HS 256.
24:14Udah.
24:16Contohnya kan
24:18sudah ya, sudah.
24:20Kalau ganti mungkin baru panjang.
24:22Oke.
24:26Payload-nya itu kan sebenarnya cuma
24:28itu kan, sub, name, sama
24:30admin kan, itu yang di tengah
24:32yang warna putih.
24:34Iya, putih isinya. Ijo
24:36atas, putih tengah, yang
24:38ungu atau apa itu.
24:40Yang ungu itu
24:42adalah
24:44sign token-nya.
24:46Nah, kalau misalnya mau kita lihat ya
24:48coba di-copy aja yang putihnya.
24:50Copy.
24:52Copy yang putihnya aja.
24:54Nah, cari
24:56Base64 decoder
24:58di online.
25:00Base.
25:10Decode.
25:12Jadi sebenarnya bisa gitu.
25:14Panjang, jadi cuma Base64 decode
25:16aja, encoding Base64
25:18aja, gak ada yang di-encrypted
25:20disitu. Cuma
25:22ekornya tadi
25:24yang si warna
25:26biru ini
25:28adalah
25:30yang mengatakan
25:32saya menandatangani
25:34message ini.
25:38Si klien, si klien menandatangani
25:40message ini. Nanti di server
25:42yang si penerima
25:44memvalidasi, oke
25:46surat ini
25:48valid nih
25:50message-nya dari si klien A.
25:54Itu misalnya.
25:56Jadi baru bisa diproses.
25:58Jadi, yang
26:00utamanya adalah
26:02standarisasi disini adalah cara
26:04melakukan signing-nya
26:06dan cara melakukan
26:08validasinya. Isi itu standarnya.
26:10Nah, ini di debugger
26:12coba aja. Itu kan kursornya
26:1430 tuh di paling
26:16bawah. Dihapus aja 1 karakter
26:18coba. Nanti
26:20jadi merah. Scroll kebawah.
26:22Scroll kebawah.
26:24Nah, signature verification
26:26failed karena
26:28secret-nya yang buat matching adalah
26:30string secret blablabla itu. Nah,
26:32sekarang balikin lagi tuh. Nah,
26:34valid. Jadi, masih biar
26:36gak bisa diutak-atik pihak
26:38yang tidak
26:40berenang. Ini
26:42Base64 juga, bukan? Base64
26:44juga. Oh, enggak, itu
26:46dipake HS256 itu
26:48algoritma itu.
26:50Itu, itu, itu. Yang HS
26:52algoritma-nya itu
26:54dia mengambil
26:56hash. Menjenerate
26:58data itu.
27:00Banyak sih yang dijenerate pakai
27:02pakai
27:04ini, si hash
27:06dari body.
27:08Terus kemudian
27:10si key-nya
27:12tadi, yang pakai key-nya
27:14tadi, terus ada
27:16beberapa pakai algoritma
27:18HS256 itu.
27:20Oh, jadi ini
27:22secret-nya. Gak bisa
27:24apa? Kalau tadi kan tinggal dikopas
27:26aja tuh yang karakter yang dikolom
27:28kiri tuh, terus di decode
27:30Base64. Nah, kalau
27:32yang bawah itu gak bisa.
27:34Kalau mau ganti key-nya, generate
27:36ulang. Ini udah
27:38generate tadi. Oh, harus pilih dulu.
27:40Sekarang ganti
27:42badan. Oh,
27:44harus di generate ulang.
27:46Karena example
27:48Oh, gak bisa ya?
27:50Bisa sih, harus ya.
27:52Tapi...
27:54Bisa.
27:56None.
27:58Kalau none,
28:00gak itu ya, gak ada secret-nya ya.
28:04Oh, ini udah nggak.
28:06Tapi gimana cara
28:10nge-gerate ulang ya?
28:12Gak ada di sini.
28:14Ya, begitulah.
28:16Oke.
28:18Saya cuma tahu pakai,
28:20tapi gak tahu standar ini-nya.
28:22Saya gak tahu seluk beluk.
28:24Nah, ini ada nih, strucure
28:26dan teknisnya. Ya, sama-sama.
28:28Sebagai pengguna, cuma tahu sejauh ini aja sih.
28:32Nah, untuk validasinya sih
28:34sudah pakai library yang sudah
28:36exist. Pakai aplikasi.
28:38Di atas kan ada tuh link-nya.
28:40Ya, selama ini juga gitu.
28:42Kalau
28:44yang PHP ada di Firebase,
28:46punya Firebase JWT.
28:48Ada library-nya.
28:50Sudah ready-made.
28:52Jadi sebenarnya gak tahu banget.
28:54Cuma ya udah, sambil dibaca tuh.
28:56Ya, kalau header itu berarti kita kasih
28:58tahu bahwa algoritma yang digunakan apa.
29:00Tipenya adalah
29:02JWT tadi.
29:04Kemudian kalau payload-nya sendiri,
29:06itu base 64.
29:08Terus, apa nih?
29:10Claims are statement about the entity.
29:14Atau data ya.
29:16Registered public
29:18and private claim.
29:20Public claim itu
29:22this can be defined at will
29:26by those using JWT.
29:28But to avoid collision,
29:30they should define in
29:32IANA JSON Web Token
29:34registry or be defined as
29:36URI
29:38that contain a collision resistant namespace.
29:40Kalau yang private, custom
29:46claim created by share information
29:48between parties. Biasanya ini ya.
29:50Yang umum ini ya. Kita pakai ini ya.
29:52Contohnya, ya
29:56macam-macam ya. Bisa ID,
29:58bisa email, dan lain-lain.
30:00Admin true.
30:02Apakah saya
30:04ganti admin false jadi true?
30:06Ya itu, kalau gak design,
30:08kalau algoritma-nya not,
30:10ya bisa diganti kan.
30:12Nah, ini kan yang tengah bisa diganti
30:14tinggal pakai
30:16base 64 encoder
30:18aja kan.
30:20Kalau misalnya, kalau gak
30:22designing algoritma-nya,
30:24misalnya di header tadi, out
30:26titik 2 non, gitu. Ya bisa
30:28tengahnya diganti sesukanya kan.
30:30Adminnya jadi false atau adminnya
30:32jadi true.
30:34Bisa jelasin ini gak
30:36proses
30:38apa namanya
30:40flow-nya dari
30:42mulai request, kemudian
30:44sampai kita balik lagi ke
30:46kliennya untuk
30:48JWT-nya sendiri.
30:50Sejujurnya, cuma pakai library
30:52selama ini.
30:54Atau sampai bawah aja dulu.
30:56Baca artikelnya sampai bawah
30:58dulu gimana?
31:00Itu ada pertanyaan bagus tuh.
31:02Apa tuh?
31:04Secara keamanan
31:06lebih baik PHP session
31:08atau PHP session?
31:10Hah?
31:12Secara keamanan lebih baik PHP session.
31:14Dibandingkan sama
31:16JWT maksudnya.
31:18Ya.
31:20Sebenarnya JWT
31:22Oke.
31:24Kita bandingkan aja.
31:26Kalau kita menggunakan
31:28authentication, ini khusus
31:30authentication ya. Jadi si user A, si user B,
31:32user C, login lah.
31:34Simple-nya.
31:36Kalau pakai JWT
31:38dia
31:42gak state, gak nyimpan
31:44state di server.
31:46Ya.
31:48Unstateful ya bahasanya ya.
31:50Atau kalau session itu stateful,
31:52JWT itu non-stateful.
31:54Stateless, stateless.
31:56Stateless. Nah.
31:58Mas Riza bahasanya lebih baik. Stateless.
32:00Nah.
32:02Akibatnya apa?
32:04Kalau JWT itu,
32:06scalability-nya lebih bagus.
32:08Karena kita gak perlu simpan session tadi,
32:10gak perlu simpan state di server.
32:12Sedangkan kalau misalnya
32:14stateful, secara
32:16scalable, lebih sulit.
32:18Karena contohnya kalau ada
32:20container-base.
32:22Yang bisa kembang-kempis nih.
32:24Kembang-kempis web container-nya.
32:26EM-nya lebih dari satu ya.
32:28Ya. Akibatnya.
32:30Session yang tadinya kita
32:32kunjungi di mesin A sama
32:34mesin B gimana? Akhirnya harus nambah
32:36lagi namanya Redis
32:38atau third party.
32:40Key value store lah. Harus kita simpan key value.
32:42Jadi session itu
32:44bisa disimpan. Session management ya.
32:46Ya. Mau di database kek.
32:48Atau mau di key value
32:50kayak Redis.
32:52Atau Memcash. Pokoknya yang bisa cluster deh.
32:54Gitu ya. Sendiri gitu.
32:56Berarti kan nambah biaya.
32:58Sedangkan kalau si
33:00JWT stateless,
33:02kita mengenali si klien
33:04berdasarkan dia punya
33:06signing token.
33:08Oh dari signing token, ini si X. Tahu.
33:10Dah. Gitu ya.
33:12Namun secara keamanan
33:14saya nggak bisa bilang banyak
33:16karena JWT ini sudah
33:18industry standard juga ya.
33:20Kalau
33:22PHP session apalagi
33:24lebih aman atau tidak
33:26tergantung konfigurasi.
33:28Jadi sebenarnya secara keamanan,
33:30dua-duanya sudah standard yang sama.
33:32Secara industry standard dipakai.
33:34Tinggal mau pakai yang mana.
33:36Ya.
33:38Ini pertanyaannya untuk satu VM.
33:40Kalau nggak,
33:42nggak banyak,
33:44kalau nggak,
33:46nggak banyak,
33:48mesin?
33:50Nggak banyak mesin.
33:52Dan cuma
33:54user-nya sedikit, ya mungkin
33:56nggak perlu pakai yang rib.
33:58Kalau JWT lebih banyak setup-nya.
34:00Awalnya. Oh berarti ini ya.
34:02Ada flow autentikasi kan.
34:04Ya.
34:06Secara keamanan mungkin sama-sama
34:08aman, tapi
34:10secara simpliciti, kemudahan
34:12mungkin lebih mudah via PHP session ya.
34:14Kalau untuk satu VM. Yes.
34:16Kalau misalnya request-response
34:18aja yang
34:20server-side rendering, standard
34:22pakai traditional.
34:24Tapi kalau sudah SPA,
34:26SPA,
34:28lainnya terpisah,
34:30lebih mudah
34:32menggunakan JWT untuk komunikasinya.
34:34Mungkin itu
34:36jebedanya.
34:38Dua-duanya kalau dikonfigurasi
34:40dengan benar, aman kok.
34:42Ya. Secara keamanan sama,
34:44cuma
34:46tergantung kebutuhannya pada
34:48saat VM-nya apa, mesinnya
34:50satu atau lebih, itu
34:52atau
34:54dipisah antara apa, monolitik
34:56sama ya, bukan monolitik ya, apa ya,
34:58yang front-end sama back-end-nya
35:00terpisah atau yang jadi satu-semua.
35:02Itu
35:04pemilihannya disitu.
35:06JWT ribet.
35:08Iya benar. Ribet.
35:12Lanjut itu dong.
35:14Kita lanjut ya. Lanjut ya.
35:16Ini payload ya, payload kan
35:18teman-teman data yang mau dikirim ya.
35:20Dan terakhir,
35:22nah, yang bawahnya itu, baru
35:24tersanggannya, signature.
35:26Itu tuh, header tambah payload,
35:28tambah secret.
35:30Eh, salah, header tambah payload,
35:32di-encode
35:34pakai secret.
35:36Ya, encode pakai secret dengan
35:38algoritma apa?
35:40Biasanya in practice, ini tuh udah ada
35:42library-nya, jadi sebetulnya sampai sekarang
35:44buat gue dan mungkin banyak
35:46developer lain.
35:48Maksudnya, ini dia apain?
35:50Ini cara kerjanya gimana? Sebenernya
35:52jujur nggak tahu sih, karena ini
35:54umumnya sih pakai library
35:56yang udah jadi ya.
35:58Tinggal encrypt
36:00kita masuk-masukin itu aja, itu kayak
36:02yang dilihat itu.
36:04Mending, masih pakai
36:06library. Jaman sekarang
36:08udah pada pakai autentikasi
36:10library, eh bukan library
36:12lagi, ya library, autentikasi
36:14kayak out-zero, terus apa lagi banyak
36:16ya sekarang. Firebase out atau apa?
36:18Firebase,
36:20Cognito, apalagi itu yang sekarang
36:22banyak loh.
36:24Itu lebih-lebih abstrak lagi ya.
36:26Semakin abstrak.
36:30Oke, kalau digabungnya jadi seperti ini,
36:32ini header, ini content,
36:34ini sitnya, Ca.
36:36Nah, itu
36:38wording-nya, phrasing-nya
36:40menarik sih itu tadi,
36:42kejawab yang tadi
36:44kita bahas di awal banget,
36:46katak sedikit deh.
36:48Output-nya cukup
36:50kayak Base64 URL string
36:52dipisah oleh titik,
36:54jadi kayak gampang ngirinya,
36:56jadi salah satu keumulannya adalah
36:58mudah dikirim
37:00di HTML dan HTTP
37:02lebih compact dibanding
37:04XML-based standard.
37:06Nah, tadi kan kita bahas tuh.
37:08Itu saya paling
37:10pusing dengan
37:12baca XML.
37:14Kalau sudah SSO,
37:16SSO kan pakai,
37:18kalau SSO kan pakenya XML,
37:20XML-based.
37:22Single sign-on?
37:24Iya.
37:26Yang ini ya, maksudnya ya, pakai
37:28yang dari Azur itu
37:30apa namanya?
37:32Active Directory.
37:36Active Directory.
37:38Itu masih pakai XML.
37:40Nah, ini yang tadi saya mau
37:44tanya bagaimana
37:46proses flow-nya.
37:48Jadi kan dari
37:50browser, atau dari
37:52JavaScript, pokoknya
37:54kita mau akses
37:56sebuah res API
37:58yang dilindungi
38:00oleh akses scheme.
38:02Ya, kita pakai
38:04header authorization,
38:06terus pakai bearer,
38:08ditambah tokennya kan.
38:10Nanti dari server,
38:12ngeliat header itu,
38:14dia cek si tokennya
38:16valid atau nggak.
38:18Kalau valid, lanjut.
38:20Kalau valid, maka
38:22dibuka frank access-nya,
38:24dikirimkan datanya.
38:26Dan ada timenya juga,
38:28ada time frame juga loh.
38:30Ada timenya.
38:32Bisa expired juga.
38:34Ini kan protected routes ya.
38:44Akan ngecek apakah JWT-nya valid
38:46atau nggak.
38:48Kalau valid, maka
38:50datanya atau
38:52dibukakan aksesnya,
38:54jika JWT contains
38:56the necessary data, the need to query
38:58for the data.
39:00Oh ya, kita bisa juga kirimin data kan.
39:02Jadi header-nya bearer, token,
39:04kemudian kita post. Datanya kita
39:06kirimkan untuk disimpan ke database,
39:08misalkan, bisa
39:10si apa,
39:12si server-nya akan melakukan query
39:14atau mengeksekusi query
39:16untuk insert data. Ya, dicek.
39:20Ya, ada maksimalnya.
39:22Ya, itu standar lah.
39:24Limitasi jatah yang dikirim di header ya.
39:26Yang berusaha.
39:28Ya, jangan semua data user
39:30ditaruh di tengah itu ya, jangan.
39:32Ya, bisa kepotong soalnya.
39:34Masih penasaran kenapa
39:40tidak token
39:42langsung, tapi harus pakai bearer.
39:44Sama asli, kenapa ya?
39:46Terima kasih.
39:48Sama asli, kenapa ya?
39:50state ini, pengalaman pribadi pernah
39:52gara-gara. Oh, skema-nya.
39:54Ya, bearer, skema.
39:56Emang ada selain bearer?
39:58Selain bearer, berarti ada
40:00ada kayak keyboard lain.
40:02Saya cuma menerima nasib
40:04aja kalau dokumentasi mengatakan
40:06pakai bearer, pakai bearer.
40:08Coba kita lihat. Apa sih bearer, skema?
40:10Selain bearer, skema.
40:12Kayaknya ada ini deh.
40:14Ada itu lain ya? Ada kayak keyboard.
40:16Ada penanda lain.
40:18Ada kayaknya.
40:20Ardy selamat datang menujuin.
40:22GWT bisa di decode, bisa.
40:24Senahnya ya.
40:26Ya, harus.
40:28Karena ini tujuannya kan
40:32saling ngirim
40:34informasi ya.
40:36Nah, ini dia flow-nya.
40:42Jadi dari klien
40:44kirimin
40:46token
40:48ke server, dari
40:50server, kirimin balik.
40:52Kemudian,
40:54kalau valid ya, kalau valid
40:56kirimin balik, kemudian kita bisa
40:58apa namanya?
41:00Token yang valid
41:04apa ya?
41:06Token yang dinyatakan valid oleh server
41:08kita bawa ke
41:10server yang ada datanya.
41:12Ya.
41:14Membuka akses
41:16terhadap resource yang sedang kita lindungi.
41:18Oh, dikasih
41:20kunci lah ya ceritanya ya.
41:22Eh, saya mau akses ini nih.
41:24Karena kita ngecek tanda-tanganya.
41:26Betul nggak ya tanda-tanganya?
41:28Kalau cocok.
41:30Ya, silahkan masuk.
41:32Ya, jadi
41:34kalau kita mau minta sesuatu
41:36ke data ini
41:38kita harus lewat dia dulu, dicek apakah
41:40permintaan
41:42atau request kita itu
41:44dilegalisir atau nggak ya?
41:46Dilegalisir.
41:48Kayak sertifikat
41:50kayak ijazah, harus
41:52setempel basah.
41:54Wah, setempel basah.
41:56Tangan basah.
41:58Basah beneran.
42:00Sekarang sudah
42:02sertifikat loh.
42:04Karena tangan juga digital, masa-masa
42:06dilegalisir ya.
42:08Sama
42:10digital signing key.
42:12Digital
42:14signing key.
42:16Maka jadi
42:18ada istilahnya
42:20akses token ya. Berarti dari
42:22server, authorization server
42:24ngirimin akses token ke
42:26client atau ke browser.
42:28Dari client ini, mau
42:30request API
42:32atau resource, mau ngambil data
42:34itu harus menggunakan akses token ya.
42:36Yang valid.
42:38Sekarang juga memberi tahu
42:42siapa dia.
42:44Si identifikasi.
42:46Identifikasi.
42:48Siapa?
42:50Kan itu penting itu. Dia hanya
42:52boleh akses berdasarkan permisinnya
42:54dia. Nanti kan di J-wait itu ada
42:56permisinya, ada user ID-nya.
42:58Oh iya.
43:00Itu bebas kan. Kita mau
43:02gimana kan. Kalau misalkan semuanya user
43:04yang dianggap sama juga boleh-boleh aja.
43:06Terus ada
43:08aplikasi.
43:10Oh ternyata ada
43:14sort. Ini bacanya sort ya.
43:16Jot dan sort.
43:18Simple web token.
43:20Baru tahu nih, simple web token ada ya.
43:26Apakah dia...
43:28Belum pernah pake dan belum pernah liat.
43:30Nah dan
43:32sama security assumption
43:34language.
43:36Simmetically signed by a shared
43:40secret using the
43:42HMAC algorithm.
43:44Kalau Jot sama-sama
43:48pakai public-private key.
43:50JSON is less
43:56verbose than
43:58XML. Yes.
44:00It's encoded, it's size is also
44:02smaller. Yes. Karena kan
44:04kalau XML ada
44:06buka penutup.
44:08Ada persistnya.
44:10Ada banyak ya.
44:12Ada logo.
44:14Ada GDG.
44:16GDG.
44:18Ada ini yang XML kan?
44:20Benar.
44:22XML.
44:28XML nggak ada.
44:30SVT nggak dibahas SVT.
44:32Karena ini kan situs
44:34JWT.
44:36Secure wise, security wise.
44:38Cuma bilang bahwa
44:40apa, mungkin
44:42signing optionnya terbatas kali ya.
44:44Nggak bisa milih.
44:46Kalau SVT can only be symmetrically
44:48signed
44:50by a shared secret.
44:52Jadi secret yang nge-signed sama
44:54secret yang nge-validasi
44:56sama.
44:58Artinya kurang
45:00secure gitu. Kurang secure.
45:02Kalau JWT
45:04bisa
45:06asymmetric, bisa
45:08private key sama public key.
45:10Ya.
45:12Oh itu sebabnya jadi nggak dipake ya.
45:18Tuh, bedanya tuh.
45:22Panjang sekali.
45:24Antara yang ini sampe ini.
45:26Jauh ya.
45:28Karena datanya besar.
45:32Ini samil soalnya itu.
45:34Iya ini.
45:36Dari opening
45:38closing aja udah banyak dia.
45:40Kalau
45:42JWT, kalau Jason kan cuman
45:44kurung kerawal atau kurung Siku kan.
45:46Iya.
45:48Saya berkutat dengan samil selama
45:50hidup saya dan saya capek dengan
45:52itu.
45:54Ini barulah screenshot satu aja.
45:56Udah capek kok.
45:58The difference between validating and
46:02verifying.
46:04Apa ini? Validation.
46:08Validation.
46:10Pemastikan tokennya itu
46:12formatnya betul.
46:14Tokennya betul dan
46:16contains enforceable claims.
46:18Bisa diproses kali ya
46:20berarti. Nah verifikasi
46:22baru memastikan tokennya
46:24genuine, asli, dan
46:26tidak diutakkan.
46:28Coba kita lihat.
46:30JWT validation.
46:34Oh coba. Nah JWT validation
46:36tadi berarti sebetas bentuknya
46:38aja ya.
46:40Ada header payload signature
46:42dipisah oleh titik formatnya
46:44betul. Base 64
46:46beneran bisa di decode, bisa di encode.
46:48Claim content apa tuh.
46:50Oh ada kayak expire.
46:52Expire-nya, issue-nya.
46:54IAT dan
46:56lain-lain. Udah expire atau belum.
46:58Berarti dia belum nge-check
47:00isinya apa? Legitimate
47:02atau kayak.
47:04Ya sama kayak kita subdued dokumen lah.
47:06Ini duit tangan ini belum. Kalau belum ya
47:08di-check-in gitu. Mungkin gitu ya.
47:10Salah satunya. Jadi
47:12di-check port strukturnya.
47:14Udah ada header content dan
47:16signature atau belum.
47:18Formatnya base 64 bisa di decode
47:20atau enggak. Sama isinya itu
47:22mengandung
47:24beberapa data seperti
47:26expire date, issue
47:28ad dan lain-lain.
47:30Berarti kan kayak field-field-nya itu key-nya betul.
47:32Field-field-nya dibutuhkan ya.
47:34Kalau verification
47:36itu di-check signature-nya
47:38valid atau enggak.
47:40Terus issuer
47:44verification.
47:46Issuer claim matches
47:48unexpected issuer.
47:50Issuer ini orang yang
47:52request ya?
47:54Iya.
47:56Bukan.
47:58Issuer itu yang
48:00nge-generate si token.
48:02Oke.
48:06Ya kalau tadi kayaknya si out-zero.
48:08Out-zero.
48:10Ya yang provider-nya ya.
48:12Yang buat token.
48:14Issuer itu yang buat token.
48:16Iya.
48:18Iya.
48:20Yang generate token di awal ya.
48:22Oke.
48:24Audience check.
48:26Ensuring the audience claim
48:28matches the expected audience.
48:30Oh yang tadi akan sebutin ya?
48:32Apakah dia punya...
48:34Bukan ya? Beda ya?
48:40Ya ini
48:42step-by-step untuk
48:44verifikasi si token-nya
48:46kan ya?
48:48Iya. Verifikasi.
48:50Ya panjang sih ya.
48:52Saya enggak mengerti 100%
48:54di sini.
48:56Tapi kita harus mengerti ini sekarang hari ini.
48:58Validate GVT makes a token makes
49:00sense.
49:02Terus...
49:04Intinya adalah kalau validasi itu
49:08memastikan token-nya
49:10sesuai dengan format
49:12yang di setujui.
49:14Kalau verifikasi
49:16itu isinya benar.
49:18Kalau ini formatnya benar,
49:20ini isinya benar.
49:22Nah cara meng...
49:24Kita kan pengen, ini kan kita mau belajar
49:26bagaimana cara memverifikasi
49:28supaya tahu isinya benar itu tadi yang di atas kan.
49:30Nah signature verifikasi.
49:34Berarti kan
49:36di-decode lagi.
49:38Tunggu ya.
49:42Signature doesn't match what
49:44expected the token might have temple.
49:46Dia kan di-encrypt
49:48pakai kayak
49:50algoritmonnya tadi.
49:52HMAC misalnya.
49:54Terus...
49:56Tadi yang
49:58kalau nggak salah base 64 header
50:00titik
50:02sama base 64 payload
50:04sama secret.
50:06Ya kan? Itulah jadi token.
50:08Jadi
50:10di sisi server, itu juga akan
50:12dicoba, di...
50:14di generate ulang seperti itu
50:16dan dilihat hasilnya sama nggak.
50:18Gitu ya.
50:20Kalau sudah
50:22lolos ini,
50:24issuer verifikasi ini, dan audience check ini
50:26saya nggak mengerti malah.
50:28Bagaimana caranya?
50:32In practical terms.
50:34Nah, dia ngasih practical terms.
50:36You validate.
50:38Kita mau validasi JOD
50:40untuk memastikan
50:42tokennya make sense.
50:44Oh, itu kan jadi validate ya.
50:46Verify. Nah, kalau verify berarti intinya
50:48tokennya belum
50:50diputak-atik, belum
50:52dimodifikasi.
50:54Dan datang dari
50:56sumber yang kita percaya.
50:58Nah, itu berarti kayak issuer
51:00verifikasi.
51:02Issuer verifikasi berarti issuer
51:04yang buat token, kalau audience
51:06itu yang pakai.
51:08Kayaknya benar.
51:10Yang pakai tokennya.
51:14Audience yang pakai token.
51:16Cek GPT dulu.
51:18In many systems,
51:20kedua langkah ini di
51:22combined, disebutnya
51:24GWT JOD verifikasi.
51:26Yang terdiri
51:28dari validation dan verification.
51:30Sejujurnya sih
51:32selama ini pakai, coba deh, bukan
51:34di private chat.
51:36Ini tuh salah satu library yang
51:44paling umum ya, JSON Web Token.
51:46Nah, itu tuh kayak udah ada
51:48metode-metode-nya sih kayak verify.
51:50Nah, jbt.sign,
51:52jbt.verify.
51:54Verify.
51:56Terus apa lagi?
51:58Ya udah banyak, ya scroll aja ke bawah
52:00liat contoh-contohnya metode-nya.
52:02Ya intinya sih kayak jbt.sign,
52:04jbt.verify.
52:06Verify.
52:08Gimana-gimana?
52:10Ini buat authorization.
52:12Gimana?
52:14Ini buat authorization
52:16si jbt.
52:18Untuk, sorry,
52:20untuk process login ya,
52:22ceritanya ya.
52:24Menggunakan jbt.sign untuk process login.
52:26Sekarang kita, ya intinya
52:28dulu.
52:30Tadi abis nanya chat jbt.sign,
52:32ini sama-sama belajar aja ya.
52:34Kelihatan nggak sih?
52:38Belum, belum.
52:40Ulang lagi, ulang lagi. Remove dulu.
52:42Remove dulu.
52:44Ya, tunggu-tunggu.
52:46Terus, dah.
52:48Eh, gimana sih?
52:50Udah tadi, udah tadi.
52:52Ilang.
52:54Tunggu, belum di-share.
52:56Sudah?
53:00Loading, loading, udah.
53:04Nah, udah.
53:06Oke.
53:08Zoom in, zoom in.
53:10Oke. Jbt.
53:22Ya, sudah. Kita tadi ada header, payload,
53:24sama signature.
53:26Di payload tadi,
53:28di payload-nya itu ada ISS,
53:30ada sub, ada, ada,
53:32ini kayak issuer, sama audience,
53:34sama expired date.
53:36Sub itu saya nggak tahu apa.
53:38Oh, iya, iya, iya.
53:40Jadi, sebenarnya token
53:42untuk memastikan si,
53:44itu adalah si user x,
53:46kita selalu ngebawa ISS,
53:48audience, sama expirednya itu.
53:50Itu kan tadi yang register
53:52claims, itu kan yang claims,
53:54kan tadi, inget nggak, di atas, pas bahas body,
53:56kan ada kayak public claim,
53:58blablabla, claim lah pokoknya.
54:00Nah, itu kan yang register claims-nya kan.
54:02Ya, lanjut.
54:04Oke, oke.
54:06Claim meaning,
54:08ISS identifies
54:10the token issuer,
54:12usually identity provider,
54:14OIDP,
54:16or authorization server.
54:18Ya, ini berarti isinya adalah
54:20provider-nya. Auth0 misalnya,
54:22atau Firebase,
54:24atau nama server-nya deh,
54:26ada identity-nya biasanya.
54:28Terus, kemudian,
54:30the extract,
54:32terus,
54:34compare to
54:36pre-configured trusted
54:38issuer, yorai, open,
54:40and sdtps yorai.
54:42Oke, berarti misalnya kalau pakai Auth0,
54:44ISS-nya itu
54:46adalah HTTPS, Auth0,
54:48blablabla. Seperti itu ya, sebagai
54:50identity provider-nya ya.
54:52Make sense, make sense.
54:54Ya, kita matching aja kan,
54:56harus matching apa yang
54:58pre-defined yang kita tahu, yang kita pakai kan
55:00servicenya.
55:02Sandanya, ini diroba,
55:04berarti kan hashing-nya semuanya berubah.
55:06Karena jika salah satu dari sini berubah,
55:08semua hashing-nya kan,
55:10signature-nya kan berubah.
55:12Makanya, nggak bisa dibata datanya,
55:14nggak valid kalau misalnya ISS-nya itu
55:16salah.
55:18Terus, kemudian,
55:20claim,
55:22meaning audience
55:24specifies the intended
55:26recipient of the token. It can be
55:28a single string or an array.
55:30Sebenarnya nggak dijelasin
55:32siapa sih misalnya.
55:34Isinya apa, berarti suka-suka ya, bebas.
55:36Kalau saya,
55:38pembuat aplikasinya
55:40yang server lah,
55:42beratnya server yang nentuin,
55:44yang penting kan matching kan.
55:46Jadi dari siapa untuk siapa,
55:48kalau bahasa begonya, berarti kan
55:50dari siapa untuk siapa itu
55:52dari jodnya
55:54sama servernya, harus
55:56paket, harus sama kan.
55:58Kalau dari siapa
56:00berbeda, berarti itu
56:02udah kayak, udah itu nggak bisa dipercaya,
56:04stop.
56:12Oke.
56:14"Please make an example of
56:18jod when it comes from
56:20Auth0 and..."
56:22Oke.
56:24Iya, kita tanya aja.
56:26CWT,
56:28saya nggak tahu apa kit.
56:30YOTenant, Auth0,
56:32audience-nya,
56:34oh, hanya boleh,
56:36audience-nya itu hanya boleh, mungkin situsnya
56:38kita kan... -Course tadi ada,
56:40ini ada isu course kan tadi ya?
56:42Kalau nggak salah. -Iya kan bisa
56:44API, apa?
56:46URL,
56:48REST API kita, apa mungkin
56:50mau kita limit by endpoint kan bisa.
56:52Itu kan ya mesti free, isinya
56:54suka-suka kita, yang penting harus sama.
56:56Itu aja kan.
56:58Nah.
57:00Yang verifikasinya tadi ya, kit
57:02kita skip aja kan, dan mungkin
57:04spesifik ya. Ada lagi
57:06bahasanya kit, nggak tahu itu apa.
57:08Berarti kan kita cek isuurnya,
57:10berarti
57:12hal ini kan kita bisa simpan
57:14di server, karena ini static ya,
57:16kita tahu pakai Auth0 kita punya
57:18konfigurasinya
57:20sebagai tenant.
57:22Dan kita bisa cek juga
57:24identifernya,
57:26kalau, ini kan datanya
57:28kan didapat dari saat
57:30kembali dari Auth0, dan
57:32si token ini hanya bisa
57:34dipakai jika kita mengakses
57:36URL tertentu.
57:40Yang kita
57:42define di sini.
57:44Jadi waktu JSON web
57:46token yang dikirimkan ke URL
57:48hanya bisa dipakai di URL yang kita.
57:50Yang kita
57:54daftarkan di sini juga.
57:56Oke.
57:58Jelas, jelas, jelas.
58:00Ngerti, mengerti.
58:02Berguna juga.
58:04Berguna juga AI
58:06untuk belajar.
58:08Teman-teman, ada yang masih pusing?
58:10Atau makin pusing?
58:12Jadi intinya misalkan kita
58:14pakai...
58:16Ini benar nih kata mas Kaisa,
58:18JWT ribet aja.
58:20Sebetulnya kalau tidak
58:22peduli-peduli kayak tadi kan tinggal
58:24masuk-masukin aja, nah cuma
58:26apa yang terjadi ya, sekarang kita jadi tahu.
58:28Itu tadi TIL.
58:30Tapi kan
58:32berarti jadi lebih make sense sih. Sebenarnya kalau
58:34pakenya kan tinggal pakai library yang
58:36udah ada, pakai metodnya, verify.
58:38Nah berarti kalau isunya
58:40ISS atau apa claim-claimnya
58:42tadi ada yang nggak cocok ya, bakal direject
58:44juga kan.
58:46Iya.
58:48Dan kayaknya dari library-nya udah
58:50dimasukin secara
58:52otomatis ya, ISS dan
58:54audiensenya tadi ya.
58:56Atau kalau kita mau
58:58menambahin juga bisa ya.
59:00Ya, pokoknya server dan
59:02client harus kumpak lah.
59:04Nah, pas kita nunggu skodinya ya kita harus
59:06apa?
59:08Masuk-masukin argumen yang
59:10expected.
59:12Hmm.
59:14Oke.
59:16"Bisakah OA
59:18selain JWT?"
59:20Mana dia?
59:24Belum disiap. Ini pertanyaan menarik sih.
59:26Ini pertanyaan menarik, tapi
59:28kalau nggak pakai JWT, pakai apa dong?
59:30Berarti kan harus ada cara buat
59:32kayak kirim
59:34memastikan animasi user yang
59:36itu atau bukan.
59:38Samel tadi, ya kan? Samel.
59:40SWT.
59:42Asal tahu cara pakenya berarti.
59:44Asal tahu cara pakenya.
59:46Samel bisa dipakai untuk autentikasi kan?
59:50OAuth 2 bisa
59:52tanpa JWT.
59:54Pakai apa?
59:56OPEC token.
59:58Apa itu?
1:00:02Maksudnya, ya kan
1:00:04OAuth 2 kan
1:00:06hanya token begitu saja ya.
1:00:08Kita tadinya mau mengirimkan
1:00:10OAuth 2 tokennya itu sebagai
1:00:12part dari
1:00:14autentikasi dan saat kita
1:00:16mengirimkan data ke server kita
1:00:18menggunakan token itu.
1:00:20Jadi sebenarnya OAuth 2 token itu bukan
1:00:24bukan bagian dari
1:00:26JWT
1:00:30atau JWT.
1:00:32Sebentar, baca lagi ya.
1:00:34Namanya OPEC tokens.
1:00:38Share screen aja, share screen.
1:00:40Oke. Kita share screen lagi.
1:00:44Coba belajar bersama.
1:00:46Pertanyaan lagi juga menarik, tapi
1:00:52kita jawab abis ini ya.
1:00:54OPEC berarti
1:00:56step full.
1:00:58Gue tanya, OAuth
1:01:02without JWT, yes OAuth bisa bekerja
1:01:04pakai OPEC token sama
1:01:06self-contained
1:01:08tokens often JWT. Ya, udah ini salah sih.
1:01:10OAuth 2
1:01:14without JWT
1:01:16atau JWT, client flow
1:01:18as unchanged token format resource OK.
1:01:20The response include
1:01:22whether active or not.
1:01:24Jadi data yang dikirimkan
1:01:26example into
1:01:28response seperti ini.
1:01:30Ya, gak jelas.
1:01:32Katanya kenapa?
1:01:34Kita pilih OPEC token,
1:01:36simplicity, confidentiality,
1:01:38and legacy. Bisa,
1:01:40tapi sudah legacy.
1:01:42Oh, kata Mas Kesa tadi
1:01:44bener tuh. Berarti kalau misalnya
1:01:46dia tampak JWT
1:01:48jadinya token
1:01:50OOP2-nya itu disimpan di server
1:01:52jadinya step full.
1:01:54Itu bedanya ya.
1:01:58Step full dan step plus.
1:02:00Karena
1:02:02tokennya itu kan
1:02:04kunci untuk mengakses banyak hal
1:02:06sebenarnya.
1:02:08Yang OAuth 2 token ya, maksudnya.
1:02:12Bukan JSON Web Token.
1:02:14Jadi sisi user, setiap
1:02:16request di header-nya, kirim apa?
1:02:18Gak kirim apa-apa? Gak ada. Mungkin
1:02:20pakai cookies saja. Jadi session.
1:02:22Jadi si server
1:02:28jadi proxy
1:02:30untuk ke API.
1:02:32Misalnya kita pakai
1:02:36Google API.
1:02:38Google API kan pakai
1:02:40OAuth tuh untuk
1:02:42komunikasinya.
1:02:44Anggap aja
1:02:46Google Analytics API.
1:02:48Kita kan sebagai user autentikasi
1:02:50dulu, masuk ke Google,
1:02:52login, habis sudah kita
1:02:54kasih permission, kembali
1:02:56dapat OAuth 2 token.
1:02:58Kita simpan OAuth
1:03:002 tokennya di server kita.
1:03:02Di sisi client, misalnya kita bikin
1:03:06aplikasi yang mau minta data
1:03:08analytics.
1:03:10Mungkin hari ini
1:03:12gitu ya. Atau page view hari ini
1:03:14berapa gitu. Si JavaScript
1:03:16akan request ke
1:03:18API ya kita.
1:03:20Terus server kita tahu
1:03:24kan, ini si user
1:03:26yang sudah login, mau request
1:03:28analytics. Dari server
1:03:30kita jadi proxy menggunakan
1:03:32token OAuth token tadi ke
1:03:34Google Analytics API.
1:03:36Ambil datanya, balikin.
1:03:38Jadi kan jadi proxy aja.
1:03:42Tapi itu kan stateful, karena tokennya
1:03:44disimpan di server.
1:03:46Jadi butuh server ya.
1:03:48Apakah perlu pakai
1:03:54access dan refresh token menerapkan
1:03:56best practice atau cukup pakai access
1:03:58token saja?
1:04:00Best practice-nya tuh
1:04:02adalah sebetulnya bukan refresh
1:04:04tokennya sendiri, tapi access tokennya
1:04:06nggak boleh terlalu
1:04:08long live. Kayak nggak boleh. Makin
1:04:10jadi apa? Itu kayak manajemen
1:04:12Resiko sih. Makin lama
1:04:14expiry-nya si access token,
1:04:16makin besar risiko.
1:04:18Lake atau kecolong atau
1:04:20apa ilang. Nah, berarti kan
1:04:22solusinya kayak access tokennya
1:04:24durasinya harus dibatasi.
1:04:26Nah, itu kan retop-nya sama UX.
1:04:28Mungkin tidak tergantung
1:04:30industri sih. Kalau kayak banking gitu kan
1:04:32malah nggak ada refresh token kan.
1:04:34Kita misalnya website
1:04:36bank, ya
1:04:385 menit atau 3 menit ke lockout
1:04:40ya udah login lagi. User harus
1:04:42take username sama password di mana.
1:04:44Maksudnya itu ada
1:04:46jenis website yang
1:04:48ya emang standard
1:04:50practice-nya begitu. Cuma kalau kayak
1:04:52yang email atau sosmed
1:04:54dan lain-lain, ya user marah-marah
1:04:56pasti kalau setiap
1:04:58sejam sekali atau setiap berapa jam
1:05:00sekali harus login ulang kan.
1:05:02Jadi, nah,
1:05:04refresh token kan solusinya kan
1:05:06buat menyembatani
1:05:08kebutuhan security sama
1:05:10kebutuhan UX.
1:05:12Iya, iya, iya. Benar, benar, iya.
1:05:14Cara lockout JWT gimana?
1:05:20Blacklist kan? Blacklist.
1:05:22Ini aja di clear.
1:05:28Clear.
1:05:32Clear apa? Reforge. Reforge.
1:05:34Reforge. Reforge.
1:05:36Bisa request ke server, Reforge,
1:05:40jadi session token yang, apa,
1:05:42sorry, token yang tadi ada. Tidak valid lagi.
1:05:44Iya ya, kita request
1:05:50ke server,
1:05:52minta tolong sama server untuk
1:05:54membuat si
1:05:56public key atau ya
1:05:58public key-nya tidak valid gitu ya.
1:06:00Atau signature-nya tidak valid.
1:06:02Bukan signature kan.
1:06:04Key-nya lah ya.
1:06:06Key-nya tidak valid ya.
1:06:08Kalau di sisi user kan tinggal hapus
1:06:10aja cookie-nya. Nah,
1:06:12kalau dari server, apa ya, di invalidate ya.
1:06:14Nanti kan nabis sendiri juga
1:06:16kan, apa, expire sendiri.
1:06:18Iya, akan expire juga
1:06:20memang, betul, betul.
1:06:22Nah, invalidate-nya gimana ya?
1:06:32Yang mau,
1:06:34apa, mau tahu
1:06:36lebih lanjut, di sini ada
1:06:38link ke bukunya ya.
1:06:40Buku apa?
1:06:44Buku JWT.
1:06:46Handbook for free
1:06:48dari OutZero.
1:06:50Harus
1:06:52belajar banyak sih.
1:06:54OutZero itu punya ebook gratis
1:06:56banyak itu,
1:06:58scroll aja ke bawah.
1:07:00Jadi ada paski juga
1:07:02introduction. Sebenernya nggak
1:07:04mendalam banget sih, cuma kalau pengen tahu cara kerjanya
1:07:06ya, baca ebook-nya itu.
1:07:08Jadi ada delapan
1:07:10chapter ya.
1:07:12Tapi jujur
1:07:14kok baca segila skimming?
1:07:16Nggak ngerti.
1:07:18Nggak ngerti.
1:07:20Kalau bacanya diniatin
1:07:22tuh, bawahnya.
1:07:24Tuh, bawah. Nah, itu.
1:07:30Ah, blur.
1:07:32Apa?
1:07:34Ini?
1:07:38Bukan.
1:07:40Coba ke atas aja, scroll ke
1:07:42paling atas. Ya, salah satunya itu ya.
1:07:44Cuma kalau mau lihat semua, ebooks.
1:07:46Ngerjain breadcrumbnya.
1:07:48Oh, out.
1:07:50Nah, itu dia.
1:07:52Ada
1:07:54apa lagi ini? Ada paski sih.
1:07:56Cuma, ya, sebagian ada yang
1:07:58tentang produknya mereka. Cuma ada yang
1:08:00general
1:08:02tentang security juga.
1:08:04Make your UX dance with
1:08:08Siam. Apa ini Siam?
1:08:10Samel.
1:08:16Nah, paski Siam Hanbu.
1:08:18CSP itu.
1:08:26For dummies.
1:08:28Authentication after password.
1:08:32Menarik ya.
1:08:36Kita share lah ya.
1:08:38Resource ebooks.
1:08:40Oke, tadi untuk bahas yang tadi
1:08:42yang pertanyaan Mas Kaisa yang
1:08:44yang cara
1:08:46nge-invalidate
1:08:48token itu, memang
1:08:50ada salah satunya deny list
1:08:52atau blacklist tokennya.
1:08:56Bisa juga di sisi server.
1:08:58Atau bisa pakai short TTL
1:09:00untuk akses tokennya.
1:09:02Jadi
1:09:045-5 menit aja.
1:09:06Ya, expire sendiri.
1:09:08Cuma, tetap harus
1:09:10ada cara destroy-nya kan ya.
1:09:12Harusnya server-side.
1:09:14Harus di-rotate.
1:09:16Ya, kalau itu kan berarti kayak TTL
1:09:18aja kan tadi, expire sendiri.
1:09:20Rotate itu.
1:09:22Signing key-nya, rotate ini.
1:09:24Oh, private key-nya.
1:09:26Private key-nya.
1:09:28Private key-nya di-rotate.
1:09:30Begitu di-rotate, semuanya kan
1:09:32invalidate.
1:09:34Semua token yang sudah
1:09:36desain pakai
1:09:38semua client, jadi
1:09:40force lockout ceritanya.
1:09:42Karena lagi-lagi
1:09:46karakternya dia stateless ya
1:09:48sebetulnya.
1:09:50Jadi kayak nggak bisa di
1:09:52baru baca lagi.
1:09:54Itu kan.
1:09:58Kita
1:10:00pakai, tetapi sebenarnya nggak tahu.
1:10:02Ini lah salah satu contoh
1:10:04nyajot.
1:10:06Belum tahu lebih
1:10:08dalam. Taunya cuma kulitnya
1:10:10doang. Yang penting bisa
1:10:12menyelesaikan. Ya, tahu cara pakai.
1:10:14Tapi belum tahu dalam cara kerjanya.
1:10:16Tapi senang sih karena ada
1:10:18episode ini kita jadi tahu.
1:10:20Karena
1:10:22apa ceran topiknya
1:10:24ini juga kan di chat?
1:10:26Siapa?
1:10:28Ceran ini siapa kemarin?
1:10:30Kaisa bukannya?
1:10:32Gak tahu.
1:10:34Saya kan dari
1:10:36GitHub di session.
1:10:38Gak, dari chat kemarin.
1:10:40Gara-ganti keybase practice gimana
1:10:42biar tidak lockout semua user-nya kasihan.
1:10:44Kasihan, biar sih.
1:10:46Cara blacklist itu.
1:10:48Blacklist itu.
1:10:50Caranya blacklist
1:10:52kalau bahasanya issue tokens.
1:10:54Ya, blacklist yang
1:10:56si...
1:10:58kalau bahasanya JTI. JTI itu apa sih?
1:11:00JTI.
1:11:02Cara kick semua user.
1:11:04Ini yang bawah malah chaos gini mau
1:11:06kick semua user.
1:11:08Yang tadi kan cara kick semua user yang tadi.
1:11:10Ya, tadi udah komen bawahnya.
1:11:12Nah, komen yang atasnya.
1:11:14peduli user.
1:11:16Yang paling simpel ya. Berarti emang
1:11:18TTL-nya. Maksudnya expire-nya dibuat
1:11:20cepet aja kan.
1:11:22Itu lumayan bikin masalah sih.
1:11:24Walaupun gak ngejawab pertanyaan yang tadi ya.
1:11:26JWT ID-nya
1:11:28kan tetap ada di server.
1:11:30Nah, itu di
1:11:32di
1:11:34di destroy atau di blacklist.
1:11:36Dihapus dari database.
1:11:38Oh, iya.
1:11:42Waktu itu pernah ini apa?
1:11:44Saya pernah ngalamin waktu pakai
1:11:46Vertex AI.
1:11:48API-nya Google Cloud.
1:11:50Itu
1:11:54TTL-nya cepet.
1:11:56Jadi harus
1:11:58degenerate terus-menerus
1:12:00setiap kali request, hampir
1:12:02setiap request.
1:12:04Oh, mau tahu
1:12:10ide, dapet ide
1:12:12random lagi, kalau user lockout.
1:12:14Jadi kita handle separately dari
1:12:16jangan mikir JWT-nya.
1:12:18Cuma kalau user lockout, dari sisi user
1:12:20ya selain cookies-nya dihapus
1:12:22either kasih cookies
1:12:24baru, kayak lockout add
1:12:26atau semacamnya.
1:12:28atau restore aja di database
1:12:30database data user lockout pada
1:12:32jam sekian.
1:12:34Nah, kalau misalnya masuk.
1:12:36Jadi dibikin satu cek lagi.
1:12:38Apakah user barusan lockout?
1:12:42Ya bisa juga.
1:12:44Jadi misalnya TTL kita berapa?
1:12:46Satu jam.
1:12:48Kalau misalnya user lockout
1:12:50sebelum, kan kita
1:12:52cuma perlu ngantisipasi untuk
1:12:54keperluan keamanan, ngantisipasi
1:12:56waktu antara setelah user
1:12:58lockout sampai
1:13:00issue-nya
1:13:02TTL-nya expire.
1:13:04Ya dicek aja dihitung.
1:13:06Kalau misalnya setelah user
1:13:08lockout, masih
1:13:10tiba-tiba ada request
1:13:12dari user itu, berarti kan
1:13:14itu pansu, itu bohong.
1:13:16Belum pakai sih
1:13:20ini cuma
1:13:22random idea
1:13:24aja.
1:13:26Ada lagi yang mau dibahas?
1:13:34Best practice-nya itu tadi
1:13:38bikin sort TTL aja.
1:13:40Ya, cuma maksudnya
1:13:42ini ngantisipasi
1:13:44setelah user lockout sampai TTL-nya
1:13:46expire. Kan kita nggak tahu user-nya
1:13:48lockout-nya short-nya misalnya satu jam.
1:13:50Tapi misalnya
1:13:52expire-nya baru nanti
1:13:54user lockout-nya sekarang.
1:13:56Kalau farno
1:13:58banget soal security,
1:14:00dicek aja user
1:14:02terakhir lockout kapan.
1:14:06Habis user lockout
1:14:08rupanya ada network glitch.
1:14:10Ada request ghost.
1:14:12Itu beda lagi
1:14:14kasusnya. Kalian berapa lama
1:14:16waktu access token dan refresh token?
1:14:18Biasanya umumnya.
1:14:20Standard 3600 ya?
1:14:22Eh berapa satunya?
1:14:24Ini ya, dari
1:14:26Auth0 atau Faribas itu
1:14:28kayaknya sudah nggak ngatur
1:14:30begituan.
1:14:32Itu nggak luah
1:14:34ngubah konfigurasi ya?
1:14:36Nggak, nggak ngubah
1:14:38konfigurasi, kecuali
1:14:40diminta. Sudah dimanjakan dengan tools, tapi good
1:14:42question sih sebenarnya.
1:14:44Kalau
1:14:46access token, yang
1:14:48pernah saya kerjakan,
1:14:50authentication-nya itu pakai
1:14:5230 menit.
1:14:54Dan refresh token-nya
1:14:56itu bisa. Refresh token-nya 1
1:14:58bulan gitu. 1 bulan.
1:15:00Ya, nggak tahu lah.
1:15:022 minggu atau 1 bulan
1:15:04atau 3 bulan. Tapi kalau Google API
1:15:06Google API saya tahu itu refresh token-nya
1:15:086 bulan.
1:15:10Refresh token-nya. Sampai apa?
1:15:12Terlalu sering dulu.
1:15:14Tapi kalau yang
1:15:16yang access token sendiri
1:15:20itu sejam sama
1:15:22Access token kayaknya standard 1 jam ya?
1:15:24Ya, antara 30 menit sampai 1 jam
1:15:28pokoknya scope-nya
1:15:30begitu.
1:15:32Kemarin pakai Vertex AI
1:15:34setiap kali kita ngirimin
1:15:38apa? Request
1:15:40itu bikin
1:15:42token baru.
1:15:44Oh.
1:15:46Oh ya?
1:15:48Iya. Karena yang saya lakukan
1:15:50pertama adalah, saya jalanin ini
1:15:52kan. Google
1:15:54Google Cloud. Oh, kalau kopas dari yang sebelumnya
1:15:56nggak mau lagi. Gak bisa kan statif kan?
1:15:58Iya.
1:16:00Jadi secara dinamis dia langsung
1:16:02jalanin setiap kali
1:16:04request.
1:16:06Nah itu solusi kayak yang tadi kita bahas
1:16:08cuma versi extreme ya sih?
1:16:10Berarti kan tiap request
1:16:12baru lagi
1:16:14ya, token baru.
1:16:16Waktu itu
1:16:18masalahnya di sini. Saya udah
1:16:20apa? Abis kopas, kok masih kena
1:16:22red-linie? Itu iya.
1:16:24Kadang sama.
1:16:26Kadang sama. Jadi dia
1:16:28prosesnya itu di G-Cloud-nya ini
1:16:30dia
1:16:32TTL-nya. Dia ngecek TTL-nya masih
1:16:34hidup atau nggak, masih valid
1:16:36atau nggak. Kalau masih valid, dia pakai yang lama.
1:16:38Kayaknya gitu sih.
1:16:40Tiap request berpanjang expired date.
1:16:50Bisa juga.
1:16:54Bisa, bisa. Kan si JWT itu ada expired-nya.
1:16:56Expired date-nya.
1:16:58Tapi itu
1:17:00signing token-nya berbeda-beda tuntut terus.
1:17:02Bisa nggak ya?
1:17:04Kayaknya nggak bisa deh.
1:17:06Nanti
1:17:08signing token-nya jadi beda.
1:17:10Nggak bisa.
1:17:14Expired-nya nggak bisa diubah.
1:17:16Nggak bisa ya?
1:17:18Iya. Jadi
1:17:20udah berubah intinya ya.
1:17:22S-nya berubah.
1:17:24Waktu di decode.
1:17:26Eh, di encode.
1:17:28Oke.
1:17:30Gimana? Cukup?
1:17:32Cukup.
1:17:34Cukup. Kalau cukup, berarti saatnya
1:17:36kita memilih topik untuk
1:17:38minggu depan.
1:17:40Punya topik lagi? Kayak kemarin?
1:17:42Minggu lalu? Yang bahas
1:17:44yang minta bahas JWT? Kayak saya ya?
1:17:46Kalau nggak salah ya? Langsung dari chat ya.
1:17:48Jadi teman-teman yang live, yang hadir
1:17:50live sekarang itu punya privilege.
1:17:52Bisa suggest topik
1:17:54langsung.
1:17:56Kalau kita bisa. Atau kita belajar
1:17:58kalau kita mau.
1:18:00Kalau menarik.
1:18:02Kalau kita nggak mau ya tetap bisa
1:18:04diposting di
1:18:06discussion juga kan?
1:18:08Ya, betul.
1:18:10Buku lagi dong.
1:18:12Buku lagi? Oke.
1:18:14Buku apa?
1:18:16Growing Algorithm.
1:18:18Growing Algorithm?
1:18:20Udah baca belum?
1:18:22Belum.
1:18:24Udah beli. Baca beberapa halaman pertama.
1:18:26Makanya
1:18:28makanya pengen bahas
1:18:30biar maksa buat baca.
1:18:32Ada intinya nggak?
1:18:36Tuh.
1:18:38Save 45%.
1:18:40Mending kalau mau buku 2 minggu lagi deh.
1:18:44Karena kalau beli takutnya telat nggak
1:18:46nyampe jadi nggak bisa tahu deh.
1:18:48Kurang mendalam ya
1:18:50bahasanya ya.
1:18:52Iya, bebas sih ya.
1:18:54Aditya
1:18:56kok namanya kayak nama Indonesia ya?
1:18:58Ya, kita lock aja
1:19:002 minggu lagi kita
1:19:02Growing Algorithm.
1:19:04Oke, 2 minggu lagi Growing Algorithm.
1:19:06Oke, saya cekati dia.
1:19:08Cari bukunya dulu.
1:19:10Episode
1:19:12sekarang 147 berarti 149.
1:19:14Kalau
1:19:16boleh bagi saya.
1:19:18Episode
1:19:32minggu depan berarti 148.
1:19:34Ada yang membahas
1:19:36CSS.
1:19:38Aduh, CSS PDF.
1:19:44CSS PDF.
1:19:46Apa ya?
1:19:50Bahas toolkit boleh nggak?
1:19:52Toolkit, toolkit.
1:19:54Nggak.
1:19:58Toolkit kayaknya
1:20:00menarik.
1:20:02Yang mana ini? Toolkit?
1:20:04Biar upgrade ya?
1:20:06Iya.
1:20:08Buat ganti-ganti
1:20:10yang... Sekalian pengen belajar aja juga
1:20:12webpack sama turbo pack.
1:20:14Oke, mau ini?
1:20:18Ya boleh. Toolkit modern nih.
1:20:20Perlu di-vote? Nggak perlu?
1:20:24Kita Veto aja.
1:20:26Veto aja ya.
1:20:28Maaf ya.
1:20:30Void Zero. Mana Void Zero?
1:20:32Void Zero.
1:20:36Void Zero itu perusahaan
1:20:38yang mengembangkan VT.
1:20:40Bukan?
1:20:42Kita kayaknya pernah bahas ya. Cuma lupa.
1:20:44Void Zero itu kan
1:20:46yang ini kan?
1:20:48EFANU kan?
1:20:50Yang dia bikin semua
1:20:52kayak apa? Kayak ngerombak
1:20:54ekosistem JavaScript Tooling
1:20:56itu kan?
1:20:58Yang di-announce
1:21:00di VT Conf
1:21:02apa gitu.
1:21:04Ini kan?
1:21:06Iya, yang di-announce.
1:21:08Timnya adalah
1:21:10benar, EFANU.
1:21:12Dia bikin modern Toolkit.
1:21:14EFANU.
1:21:16VT, VT,
1:21:18Scrolldown, OXC itu.
1:21:20Sebagian besar yang kita pilih disini.
1:21:22Kita pernah bahas ini kan?
1:21:24Ya, kita pernah bahas.
1:21:26Website-nya ini.
1:21:28Betul.
1:21:30Oke, deal ya. Berarti
1:21:32kita bahas modern.
1:21:34Oke.
1:21:36Sambil kita belajar...
1:21:38Groknya di mana?
1:21:40Di Amazon, Kindle.
1:21:42Amazon, Amazon.
1:21:44Oh, cari yang fisik.
1:21:46Kalau fisik ya Amazon, bisa
1:21:48cuma nunggu mirimnya lama sih.
1:21:50Gatau kalau Kindle
1:21:52di Amazon.
1:21:54Kalau di Toko Ijo
1:21:56tata-tata pangsu.
1:21:58Ya, bacakan pasti.
1:22:00Kapan lagi? Minggu depan.
1:22:04Selasa malam.
1:22:06Ingat, selasa malam waktunya ngobrolin web.
1:22:08Ngobrolin web.
1:22:10Supaya gampang ingat. Senin, harga naik.
1:22:12Selasa, waktunya ngobrolin web.
1:22:14Itu
1:22:20ide-nya Eka itu.
1:22:22Iya, benar.
1:22:24Cuma gue juga
1:22:26nggak ngulang catchphrase
1:22:28itu lagi sih.
1:22:30Buat t-shirt bagus sih. Buat t-shirt
1:22:32bagus. Jangan, jangan, jangan.
1:22:34Eh udah liat pisanya kita
1:22:38belum sih.
1:22:40Waret tuh yang punya
1:22:42duluan tuh.
1:22:44Intinya apa namanya
1:22:48sampelnya dikasih satu.
1:22:50Langsung kasih warat.
1:22:52Ilham baru ya, baru join ya.
1:22:56Kita live setiap
1:22:58Selasa jam 8.
1:23:00Tungguin aja minggu depan.
1:23:02Topiknya kita minggu depan bahas
1:23:04toolkit modern
1:23:06yang mungkin bisa menggantikan
1:23:08beberapa
1:23:10alat bantu yang biasa kita pakai
1:23:12jadi lebih panjang.
1:23:14Biasanya ditulis dengan RAS.
1:23:16Biasanya pakai RAS.
1:23:18Biasanya pakai RAS atau yang
1:23:20lain yang lebih modern gitu ya.
1:23:22Misalkan kayak webpack ya.
1:23:24Kan konfigurasinya yang jelimet
1:23:26tuh. Nah sekarang udah ada
1:23:28banget kan. Mungkin temen-temen
1:23:30ada yang sudah tahu, ada beberapa
1:23:32yang juga belum tahu.
1:23:34Kita akan bahas minggu depan. Oke.
1:23:36Untuk malam ini kita udahan dulu.
1:23:38Kenapa?
1:23:39Pakai roll up.
1:23:41Roll up, roll down ya. Banyak ya.
1:23:43Ada roll up, ada roll down.
1:23:45Iya.
1:23:47Jadi kita tunggu minggu depan untuk
1:23:49pembahasan tentang JavaScript toolkit
1:23:51modern. Kita ketemu lagi
1:23:53minggu depan.
1:23:55Jangan lupa Selasa malam waktunya
1:23:57ya. Bye bye.
1:23:59Bye bye.
Suka episode ini?
Langganan untuk update episode terbaru setiap Selasa malam!
Episode Terkait
10 Sep 2025
Ngobrolin Dokumentasi - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #ngobrolinWEB! Mari membahas tentang berbagai alat untuk membuat dan menampilkan dokumentas...
26 Agu 2025
Fundamental JavaScript - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #ngobrolinWEB! Malam ini kita akan membahas tentang berbagai topik fundamental JavaScript. ...
13 Okt 2025
Desain Aplikasi CLI - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #ngobrolinWEB! Topiknya agak beda nih, kita akan diskusi tentang mendesain dan mengembangka...