Saya menggunakan token JWT di header HTTP untuk mengautentikasi permintaan ke server sumber daya. Server sumber daya dan server auth adalah dua peran pekerja terpisah di Azure.
Saya tidak dapat menentukan apakah saya harus menyimpan klaim dalam token atau melampirkannya ke permintaan / respons dengan cara lain. Daftar Klaim memengaruhi rendering elemen UI sisi klien serta akses ke data di server. Untuk alasan ini saya ingin memastikan bahwa klaim yang diterima oleh server adalah asli dan divalidasi sebelum permintaan diproses.
Contoh klaim adalah: CanEditProductList, CanEditShopDescription, CanReadUserDetails.
Alasan saya ingin menggunakan token JWT untuk mereka adalah:
- Perlindungan yang lebih baik terhadap pengeditan klaim sisi klien (mis. Meretas daftar klaim).
- Tidak perlu mencari klaim pada setiap permintaan.
Alasan saya tidak ingin menggunakan token JWT:
- Server auth kemudian harus mengetahui daftar klaim app-centric.
- Token menjadi satu titik masuk-hack.
- Saya telah membaca beberapa hal yang mengatakan bahwa token JWT tidak dimaksudkan untuk data tingkat aplikasi.
Tampak bagi saya bahwa keduanya memiliki kekurangan, tetapi saya condong ke arah dimasukkannya klaim ini ke dalam token dan hanya ingin menjalankan ini oleh orang-orang yang pernah menangani ini sebelumnya.
CATATAN: Saya akan menggunakan HTTPS untuk semua permintaan API, jadi bagi saya tampaknya token akan cukup 'aman'. Saya menggunakan AngularJS, C #, Web API 2 dan MVC5.
sumber
Jawaban:
Saya menyimpan klaim pengidentifikasi saja (userid, dll.) (Terenkripsi) di jwt saya.
Kemudian ketika saya mendapatkan token di server (API) saya bisa melakukan pencarian sisi server (db, atau panggilan jaringan lokal) dan mengambil semua asosiasi ke userid (aplikasi, peran, dll.)
Namun jika Anda ingin memasukkan lebih banyak ke jwt, berhati-hatilah dengan ukurannya karena kemungkinan akan dikirim pada setiap permintaan, tetapi pastikan untuk mengenkripsi data klaim sensitif.
sumber
Kedengarannya seperti otentikasi (siapa pengguna itu) dan otorisasi (apa yang diizinkan pengguna) tidak dibagi dengan jelas seperti yang Anda inginkan.
Jika Anda tidak ingin server otentikasi mengetahui hak pengguna untuk kemudian batasi klaim dalam JWT ke userid seperti yang disarankan wchoward. Anda bisa meminta server lain yang dikenal sebagai server otorisasi mencari tahu apa yang menjadi hak pengguna.
Langkah otorisasi dapat dilakukan oleh server sumber daya ketika pertama kali disajikan dengan token otentikasi oleh klien. Server sumber daya kemudian akan mengirim token ke klien yang berisi klaim otorisasi.
Catatan: Kedua JWT harus ditandatangani dengan kunci yang berbeda.
Pro:
Menipu:
sumber