EP 144

Ngobrolin JWT - Ngobrolin WEB

Bagikan:

🗣️🕸️ 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 Koreksi

Episode 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!

Langganan Sekarang

Episode Terkait

Komentar