Haruskah izin akses dan peran dimasukkan dalam payload JWT?

9

Haruskah informasi tentang izin dan peran klien dimasukkan dalam JWT?

Memiliki informasi seperti itu di token JWT akan sangat membantu karena setiap kali token yang valid datang, akan lebih mudah untuk mengekstrak informasi tentang izin tentang pengguna dan tidak perlu menghubungi database untuk hal yang sama. Tetapi apakah memasukkan informasi seperti itu dan tidak memeriksa dua kali di database akan menjadi masalah keamanan?

Atau,

Informasi seperti yang disebutkan di atas seharusnya tidak menjadi bagian dari JWT, dan hanya database yang harus digunakan untuk memeriksa peran akses dan izin pengguna?

Anshul Sahni
sumber

Jawaban:

7

Tujuan menyertakan klaim dalam token adalah agar Anda tidak harus memiliki komunikasi antara sumber daya dan penyedia otentikasi.

Sumber hanya dapat memeriksa bahwa token memiliki tanda tangan yang valid dan mempercayai konten.

Dengan asumsi kunci pribadi adalah pribadi ke server auth Anda baik. Beberapa penyedia mengubah kunci mereka untuk mengurangi risiko.

Jika Anda memikirkannya, jika sumber daya melakukan panggilan kembali ke server auth untuk mendapatkan klaim. Maka pada dasarnya memastikan bahwa itu berbicara ke server yang tepat dengan metode kepercayaan serupa.

Ewan
sumber
Terima kasih atas jawaban yang indah, boleh saya tahu lebih banyak tentang apa yang Anda maksud dari pernyataan Anda, "Beberapa penyedia mengubah kunci mereka untuk mengurangi risiko." ?
Anshul Sahni
1
Jadi, alih-alih memiliki kunci penandatanganan yang tetap, penyedia auth akan sering mengubahnya dan memberikan titik akhir bagi server sumber daya untuk mengunduh setengah publik dari itu. Sumber daya harus melakukan panggilan ke server auth begitu sering, tetapi tidak sekali per permintaan
Ewan
Jadi semua token tidak valid setiap kali tanda kunci diubah oleh layanan
Anshul Sahni
1
biasanya mereka akan memiliki lebih dari satu kunci yang mungkin, sehingga dalam token penerbangan tidak akan dibatalkan. token akan berisi 'id kunci' untuk memberi tahu sumber daya mana yang digunakan
Ewan
Satu-satunya hal yang saya lewatkan di sini adalah bagaimana melanjutkan ketika data di JWT tidak valid. Katakanlah peran berubah di sisi server tetapi klien masih memegang token dengan semua set peran. Anda harus dapat mencabut token di sisi server sehingga token yang menyimpan info kedaluwarsa tidak lagi valid dan dapat digunakan untuk permintaan lebih lanjut. Ini sesuai dengan apa yang disarankan Ewans (memungkinkan server untuk mencabut token) karena satu atau lain alasan.
Laiv
1

Dari pengalaman saya, jika semua sistem Anda menggunakan beberapa peran sentral dan basis data izin, Anda dapat menambahkan semua itu ke JWT.

Namun, pendekatan ini mungkin tidak berfungsi dengan baik dalam skenario SSO ketika server auth itu sendiri tidak tahu sama sekali tentang sistem target yang akan menerima dan mempercayai token.

Peran dan izin pengguna sepenuhnya ada pada penerima token JWT. Terutama ketika Anda mengintegrasikan SSO auth dengan JWT ke beberapa sistem lama yang sudah memiliki subsistem izin mereka dan karenanya mereka hanya perlu satu klaim untuk hadir di JWT - klaim identitas pengguna.

JustAMartin
sumber
Saya setuju dengan ini. Izin pengguna tidak boleh menjadi bagian dari jwt khususnya di SSO karena idp tidak mengetahui layanan apa yang akan dibicarakan oleh pengguna ini. Sebaliknya, sumber daya harus mengimplementasikan bagian otorisasi setelah identitas telah dikonfirmasi untuk pengguna.
Manish Rawat
Saya juga setuju bahwa klaim izin dalam JWT bukan ide yang baik di luar API monolitik sederhana. Saya menulis posting blog tentang hal itu: sdoxsee.github.io/blog/2020/01/06/…
sdoxsee