TL; DR
Jika Anda memiliki skenario yang sangat sederhana, seperti aplikasi klien tunggal, API tunggal maka mungkin tidak ada untungnya untuk pergi OAuth 2.0, di sisi lain, banyak klien yang berbeda (berbasis browser, ponsel asli, sisi server) , dll) kemudian berpegang teguh pada aturan OAuth 2.0 mungkin membuatnya lebih mudah dikelola daripada mencoba menggulir sistem Anda sendiri.
Seperti yang dinyatakan dalam jawaban lain, JWT ( Pelajari JSON Web Token ) hanyalah format token, itu mendefinisikan mekanisme yang kompak dan mandiri untuk mentransmisikan data antara pihak-pihak dengan cara yang dapat diverifikasi dan dipercaya karena ditandatangani secara digital. Selain itu, aturan penyandian JWT juga membuat token ini sangat mudah digunakan dalam konteks HTTP.
Menjadi mandiri (token yang sebenarnya berisi informasi tentang subjek yang diberikan) mereka juga merupakan pilihan yang baik untuk menerapkan mekanisme otentikasi stateless (alias Lihat ibu, tidak ada sesi! ). Saat menempuh rute ini dan satu-satunya hal yang harus disajikan oleh suatu pihak untuk diberikan akses ke sumber daya yang dilindungi adalah token itu sendiri, token yang dimaksud dapat disebut token pembawa.
Dalam praktiknya, apa yang Anda lakukan sudah dapat diklasifikasikan berdasarkan token pembawa. Namun, pertimbangkan bahwa Anda tidak menggunakan token pembawa sebagaimana ditentukan oleh spesifikasi terkait OAuth 2.0 (lihat RFC 6750 ). Itu akan menyiratkan, mengandalkan Authorization
header HTTP dan menggunakanBearer
skema otentikasi.
Mengenai penggunaan JWT untuk mencegah CSRF tanpa mengetahui detail pastinya, sulit untuk memastikan keabsahan praktik itu, tetapi jujur saja itu tampaknya tidak benar dan / atau tidak berharga. Artikel berikut ( Cookies vs Token: The Definitive Guide ) dapat menjadi bacaan bermanfaat tentang hal ini, khususnya bagian Perlindungan XSS dan XSRF .
Satu saran terakhir, bahkan jika Anda tidak perlu menggunakan OAuth 2.0 penuh, saya akan sangat menyarankan untuk melewatkan token akses Anda di dalam Authorization
header daripada menggunakan header kustom . Jika mereka benar-benar token yang mengikuti aturan RFC 6750, jika tidak, Anda selalu dapat membuat skema otentikasi khusus dan masih menggunakan header itu.
Header otorisasi diakui dan diperlakukan secara khusus oleh proxy HTTP dan server. Dengan demikian, penggunaan header semacam itu untuk mengirim token akses ke server sumber daya mengurangi kemungkinan kebocoran atau penyimpanan yang tidak diinginkan dari permintaan yang diautentikasi secara umum, dan terutama header Otorisasi.
(sumber: RFC 6819, bagian 5.4.1 )
OAuth 2.0 mendefinisikan protokol, yaitu menentukan bagaimana token ditransfer, JWT mendefinisikan format token.
OAuth 2.0 dan "otentikasi JWT" memiliki penampilan yang mirip ketika datang ke tahap (ke-2) di mana Klien menyajikan token ke Server Sumber Daya: token diteruskan dalam header.
Tetapi "otentikasi JWT" bukanlah standar dan tidak menentukan bagaimana Klien mendapatkan token di tempat pertama (tahap 1). Di situlah kompleksitas yang dirasakan berasal dari OAuth: ia juga mendefinisikan berbagai cara yang dapat diperoleh Klien token akses dari sesuatu yang disebut Server Otorisasi.
Jadi perbedaan sebenarnya adalah bahwa JWT hanyalah format token, OAuth 2.0 adalah protokol (yang mungkin menggunakan JWT sebagai format token).
sumber
Pertama, kita harus membedakan JWT dan OAuth. Pada dasarnya, JWT adalah format token. OAuth adalah protokol otorisasi yang dapat menggunakan JWT sebagai token. OAuth menggunakan penyimpanan sisi server dan sisi klien. Jika Anda ingin melakukan logout nyata, Anda harus menggunakan OAuth2. Otentikasi dengan token JWT sebenarnya tidak bisa keluar. Karena Anda tidak memiliki Server Otentikasi yang melacak token. Jika Anda ingin memberikan API ke klien pihak ke-3, Anda harus menggunakan OAuth2 juga. OAuth2 sangat fleksibel. Implementasi JWT sangat mudah dan tidak perlu waktu lama untuk diimplementasikan. Jika aplikasi Anda membutuhkan fleksibilitas semacam ini, Anda harus menggunakan OAuth2. Tetapi jika Anda tidak memerlukan skenario kasus penggunaan ini, menerapkan OAuth2 adalah buang-buang waktu.
Token XSRF selalu dikirim ke klien di setiap header respons. Tidak masalah apakah token CSRF dikirim dalam token JWT atau tidak, karena token CSRF diamankan dengan sendirinya. Oleh karena itu pengiriman token CSRF di JWT tidak perlu.
sumber
JWT (JSON Web Tokens) - Ini hanya format token. Token JWT adalah struktur data bersandi JSON yang berisi informasi tentang penerbit, subjek (klaim), waktu kedaluwarsa, dll. Ini ditandatangani untuk bukti dan keaslian tamper dan dapat dienkripsi untuk melindungi informasi token menggunakan pendekatan simetris atau asimetris. JWT lebih sederhana dari SAML 1.1 / 2.0 dan didukung oleh semua perangkat dan lebih kuat daripada SWT (Simple Web Token).
OAuth2 - OAuth2 memecahkan masalah yang pengguna ingin mengakses data menggunakan perangkat lunak klien seperti menelusuri aplikasi web berbasis, aplikasi seluler asli atau aplikasi desktop. OAuth2 hanya untuk otorisasi, perangkat lunak klien dapat diotorisasi untuk mengakses sumber daya atas nama pengguna akhir menggunakan token akses.
OpenID Connect - OpenID Connect dibuat di atas OAuth2 dan menambahkan otentikasi. OpenID Connect menambahkan beberapa kendala untuk OAuth2 seperti Titik Akhir UserInfo, ID Token, penemuan dan pendaftaran dinamis penyedia OpenID Connect dan manajemen sesi. JWT adalah format wajib untuk token.
Perlindungan CSRF - Anda tidak perlu menerapkan perlindungan CSRF jika Anda tidak menyimpan token di cookie browser.
Anda dapat membaca detail lebih lanjut di sini http://proficientblog.com/microservices-security/
sumber
Sepertinya semua orang yang menjawab di sini melewatkan titik perdebatan OAUTH
Dari Wikipedia
Poin kuncinya di sini adalah
access delegation
. Mengapa ada orang yang membuat OAUTH ketika ada otentikasi berbasis id / pwd, yang didukung oleh auth multifactored seperti OTP dan selanjutnya dapat diamankan oleh JWT yang digunakan untuk mengamankan akses ke jalan (seperti cakupan di OAUTH) dan mengatur kedaluwarsa dari mengaksesTidak ada gunanya menggunakan OAUTH jika konsumen mengakses sumber daya mereka (titik akhir Anda) hanya melalui situs web (atau aplikasi) tepercaya mereka yang lagi-lagi dihosting pada titik akhir Anda
Anda dapat menggunakan autentikasi OAUTH hanya jika Anda berada
OAUTH provider
dalam kasus di mana pemilik sumber daya (pengguna) ingin mengakses sumber daya (Anda) mereka (titik akhir) melalui klien pihak ketiga (aplikasi eksternal). Dan itu persis dibuat untuk tujuan yang sama meskipun Anda dapat menyalahgunakannya secara umumCatatan penting lainnya:
Anda bebas menggunakan kata
authentication
untuk JWT dan OAUTH tetapi tidak menyediakan mekanisme otentikasi. Ya satu adalah mekanisme token dan yang lainnya adalah protokol tetapi setelah dikonfirmasi mereka hanya digunakan untuk otorisasi (manajemen akses). Anda harus mendukung OAUTH baik dengan otentikasi tipe OPENID atau kredensial klien Anda sendirisumber
temukan perbedaan utama antara JWT & OAuth
OAuth 2.0 mendefinisikan protokol & JWT mendefinisikan format token.
OAuth dapat menggunakan JWT sebagai format token atau token akses yang merupakan token pembawa.
Koneksi OpenID sebagian besar menggunakan JWT sebagai format token.
sumber
JWT adalah standar terbuka yang mendefinisikan cara yang ringkas dan mandiri untuk mentransmisikan informasi antar pihak secara aman. Ini adalah protokol otentikasi tempat kami mengizinkan klaim yang disandikan (token) untuk ditransfer antara dua pihak (klien dan server) dan token dikeluarkan setelah identifikasi klien. Dengan setiap permintaan berikutnya, kami mengirim token.
Sedangkan OAuth2 adalah kerangka kerja otorisasi, di mana ia memiliki prosedur umum dan pengaturan yang ditentukan oleh kerangka kerja. JWT dapat digunakan sebagai mekanisme di dalam OAuth2.
Anda dapat membaca lebih lanjut tentang ini di sini
OAuth atau JWT? Yang mana yang digunakan dan mengapa?
sumber
Pertanyaannya adalah pertanyaan umum, tetapi tidak masuk akal. JWT adalah jenis Token, dan OAuth adalah Kerangka yang menjelaskan cara mengeluarkan token.
Apa yang kita maksud dengan "framework"? Hanya urutan permintaan dan tanggapan, dan formatnya, yang dapat dan seharusnya digunakan untuk meminta token. OAuthv2 menjelaskan "aliran" atau jenis hibah yang terpisah untuk skenario yang berbeda, dan memiliki ekstensi yang berbeda (seperti PKCE) untuk memperluas keamanan arus tertentu.
Hasil permintaan-to-token melalui hibah OAuthV2 adalah ... token. Benda itu kemudian digunakan sebagai "token pembawa" yang berarti, pihak mana pun yang memegang token, dapat menyajikannya ketika membuat api permintaan-untuk-layanan (misalnya, "berapa saldo pada kartu nilai tersimpan saya?"). Sebagai token Pembawa, ini bekerja seperti uang tunai. Jika Anda memegangnya, Anda bisa menggunakannya. (Meskipun tidak seperti uang tunai, token tidak menggunakan-dan-kehilangan itu. Mungkin analogi yang lebih baik adalah tiket-untuk-naik sepanjang hari pada sistem angkutan umum, atau tiket sepanjang hari di Disneyworld.)
JWT adalah jenis token tertentu, dan JWT benar-benar dapat digunakan sebagai token OAuth Bearer. Sebenarnya, ini adalah praktik yang paling umum. Dalam terang itu, "JWT vs OAuth" adalah perbandingan apel dan gerobak apel.
Seringkali orang berpikir "token OAuth" selalu menyiratkan token buram - urutan acak karakter alfanumerik yang tidak mengandung makna yang melekat - yang diberikan oleh apotik token OAuth, yang kemudian dapat divalidasi hanya oleh sistem apotik OAuth yang sama. Tapi ini bukan satu-satunya token OAuth. Token buram adalah salah satu jenis token; JWT dapat digunakan sebagai jenis token OAuth yang berbeda.
JWT, sebaliknya, tidak buram. JWT bukan "penunjuk" atau referensi ke informasi. Ini sebenarnya mengandung banyak informasi spesifik, yang dapat diekstraksi dan ditafsirkan oleh pihak mana pun yang memiliki token. Karena JWT berisi informasi nyata, JWT bisa besar; 300 byte, 500 byte, atau lebih, tergantung pada klaim yang terkandung di dalamnya, dan algoritma yang digunakan untuk menandatanganinya. Ketika orang mengatakan "JWT memvalidasi diri" apa artinya, pemegang JWT dapat membukanya, memvalidasinya, dan kemudian membuat keputusan otorisasi berdasarkan klaim yang disajikan di dalamnya. Memvalidasi JWT berarti: memverifikasi strukturnya, mendekode pengkodean base64, memverifikasi kunci sudah benar, memverifikasi tanda tangan, kemudian memverifikasi klaim yang diperlukan ada di token, memeriksa kedaluwarsa. Itu bukan hal yang sederhana, bukan proses multi-langkah, tetapi tentu saja ada banyak perpustakaan dalam berbagai bahasa pemrograman yang heklp dengan ini, dan tentu saja ada kebijakan VerifyJWT yang membantu Anda melakukan ini dalam proksi Apigee Edge API. Intinya, pemegang atau penerima dapat memverifikasi token. Karena itu, kami mengatakan bahwa JWT mendukung "Federasi" - siapa pun dapat menghasilkan token, dan siapa saja dapat membaca dan memvalidasi token.
klaim khusus. Token JWT dan OAuth yang buram dapat membawa klaim khusus tentang subjek. keamanan. Keduanya adalah token pembawa. Keduanya harus dilindungi sebagai rahasia. kedaluwarsa. Keduanya dapat ditandai dengan kedaluwarsa. Keduanya dapat disegarkan. Mekanisme atau pengalaman otentikasi. Keduanya dapat menyajikan pengalaman pengguna yang sama.
sumber
Jwt adalah seperangkat instruksi ketat untuk menerbitkan dan memvalidasi token akses yang ditandatangani. Token berisi klaim yang digunakan oleh aplikasi untuk membatasi akses ke pengguna
OAuth2 di sisi lain bukan protokol, ini adalah kerangka otorisasi yang didelegasikan. pikirkan pedoman yang sangat terperinci, untuk memungkinkan pengguna dan aplikasi mengotorisasi izin khusus untuk aplikasi lain dalam pengaturan pribadi dan publik. OpenID Connect yang berada di atas OAUTH2 memberi Anda Otentikasi dan Otorisasi. Ini merinci bagaimana beragam peran, pengguna di sistem Anda, aplikasi sisi server seperti API, dan klien seperti situs web atau aplikasi seluler asli, dapat mengautentikasi dengan masing-masing yang lain.
sumber