Saya baru LENGKAP dengan stateless otentikasi menggunakan model JWT. Saya sering diminta untuk merujuk OAuth otentikasi mengalir seperti meminta saya untuk mengirim 'Pembawa token' untuk setiap permintaan alih-alih sederhana token header tapi saya berpikir bahwa OAuth adalah jauh lebih kompleks dari yang sederhana JWT otentikasi berbasis. Apa perbedaan utama, saya harus membuat JWT otentikasi berperilaku seperti OAuth?
Saya juga menggunakan JWT saya XSRF-TOKEN untuk mencegah XSRF tapi saya diminta untuk menjaga mereka terpisah? Saya harus menjaga mereka terpisah? Setiap bantuan akan menghargai dan mungkin menyebabkan seperangkat pedoman bagi masyarakat.
TL;DR Jika anda memiliki sangat sederhana skenario, seperti satu aplikasi klien, API tunggal maka tidak mungkin membayar untuk pergi OAuth 2.0, di sisi lain, banyak klien yang berbeda (berbasis browser, mobile asli, server-side, dll) kemudian menempel OAuth 2.0 aturan yang mungkin membuatnya lebih mudah dikelola daripada mencoba untuk rolling sistem anda sendiri.
Seperti yang tercantum dalam jawaban lain, JWT (Belajar JSON Web Token) adalah sebuah format token, mendefinisikan kompak dan self-contained mekanisme untuk transmisi data antara pihak-pihak dalam suatu cara yang dapat diverifikasi dan terpercaya karena hal ini ditandatangani secara digital. Selain itu, aturan pengkodean dari JWT juga membuat token ini sangat mudah digunakan dalam konteks HTTP.
Menjadi self-contained (yang sebenarnya token berisi informasi tentang subjek tertentu) mereka adalah juga pilihan yang baik untuk melaksanakan bernegara mekanisme otentikasi (aka ibu Lihat, tidak ada sesi!). Ketika pergi rute ini dan satu-satunya pihak yang harus hadir akan diberikan akses ke sumber daya yang dilindungi adalah token itu sendiri, token bersangkutan bisa disebut pembawa token.
Dalam prakteknya, apa yang anda're lakukan sudah dapat diklasifikasikan berdasarkan pembawa token. Namun, jangan menganggap bahwa anda're tidak menggunakan pembawa token seperti yang ditentukan oleh OAuth 2.0 yang terkait dengan spesifikasi (lihat RFC 6750). Itu akan berarti, bergantung pada Otorisasi
HTTP header dan menggunakan Pembawa
skema otentikasi.
Mengenai penggunaan JWT untuk mencegah CSRF tanpa mengetahui rincian yang tepat itu's sulit untuk memastikan validitas dari praktek itu, tapi jujur itu tampaknya tidak benar dan/atau berharga. Artikel berikut (Cookies vs Token: The Definitive Guide) mungkin berguna baca tentang hal ini, terutama XSS dan XSRF Perlindungan bagian.
Salah satu nasihat terakhir, bahkan jika anda don't harus pergi penuh OAuth 2.0, aku *akan sangat menyarankan pada lewat akses token anda dalam Otorisasi
header bukannya pergi dengan custom header**. Jika mereka benar-benar pembawa token mengikuti aturan RFC 6750, jika tidak, anda selalu dapat membuat custom skema otentikasi dan masih menggunakan header tersebut.
Otorisasi header diakui dan diperlakukan khusus oleh HTTP proxy dan server. Dengan demikian, penggunaan header untuk mengirim token akses ke sumber daya server mengurangi kemungkinan kebocoran atau tidak diinginkan penyimpanan dikonfirmasi permintaan secara umum, dan terutama Authorization header.
(sumber: RFC 6819, bagian 5.4.1)
OAuth 2.0 mendefinisikan protokol, yaitu menentukan berapa token yang ditransfer, JWT mendefinisikan tanda format.
OAuth 2.0 dan "JWT otentikasi" memiliki penampilan serupa ketika datang ke (2) tahap dimana Klien menyajikan token ke Sumber daya Server: token dilewatkan dalam header.
Tapi "JWT otentikasi" tidak standar dan tidak menjelaskan bagaimana Klien mendapatkan token di tempat pertama (tahap 1). Yang mana yang dirasakan kompleksitas OAuth berasal dari: hal ini juga mendefinisikan berbagai cara di mana Klien dapat mendapatkan akses token dari sesuatu yang disebut Otorisasi Server.
Jadi perbedaan yang nyata adalah bahwa JWT hanyalah sebuah tanda format, OAuth 2.0 adalah sebuah protokol (yang mungkin menggunakan JWT sebagai tanda format).
Pertama, kita harus membedakan JWT dan OAuth. Pada dasarnya, JWT adalah tanda format. OAuth adalah otorisasi protokol yang dapat digunakan JWT sebagai token. OAuth menggunakan server-side dan client-side penyimpanan. Jika anda ingin melakukan real logout anda harus pergi dengan OAuth2. Otentikasi dengan JWT token tidak bisa logout sebenarnya. Karena anda don't memiliki sebuah Server Otentikasi yang melacak token. Jika anda ingin menyediakan sebuah API untuk pihak ke-3 klien, anda harus menggunakan OAuth2 juga. OAuth2 sangat fleksibel. JWT pelaksanaannya sangat mudah dan tidak butuh waktu lama untuk menerapkan. Jika anda membutuhkan aplikasi semacam ini fleksibilitas, anda harus pergi dengan OAuth2. Tapi jika anda don't perlu ini menggunakan skenario kasus, menerapkan OAuth2 adalah buang-buang waktu.
XSRF token selalu dikirim ke klien dalam setiap respon header. Tidak masalah jika CSRF token dikirim dalam JWT token atau tidak, karena CSRF token ini dijamin dengan dirinya sendiri. Oleh karena itu mengirimkan CSRF token di JWT adalah tidak perlu.
JWT (JSON Web Token)- Ini hanyalah sebuah tanda format. JWT token JSON dikodekan struktur data yang berisi informasi tentang emiten, subjek (klaim), waktu kadaluarsa dll. Hal ini ditandatangani untuk tamper bukti dan keaslian dan dapat dienkripsi untuk melindungi token informasi menggunakan simetris atau asimetris pendekatan. JWT sederhana dari SAML 1.1/2.0 dan didukung oleh semua perangkat dan lebih kuat daripada SWT(Web Sederhana Token).
OAuth2 - OAuth2 memecahkan masalah yang pengguna ingin mengakses data menggunakan perangkat lunak klien seperti browsing berbasis aplikasi web, aplikasi mobile atau aplikasi desktop. OAuth2 hanya untuk otorisasi, perangkat lunak klien dapat berwenang untuk mengakses sumber daya yang di-nama pengguna akhir menggunakan akses token.
OpenID Connect - OpenID Connect membangun di atas OAuth2 dan menambahkan otentikasi. OpenID Connect tambahkan beberapa kendala untuk OAuth2 seperti UserInfo. Endpoint, ID Token, penemuan dan dinamis pendaftaran OpenID Connect penyedia dan manajemen sesi. JWT merupakan format wajib untuk token.
CSRF perlindungan - Anda don't perlu menerapkan proteksi CSRF jika anda tidak menyimpan token di browser's cookie.
Anda bisa baca lebih detail di sini http://proficientblog.com/microservices-security/
Sepertinya semua orang yang menjawab di sini merindukan diperdebatkan OAUTH
Dari Wikipedia
OAuth adalah sebuah standar terbuka untuk akses delegasi, yang biasa digunakan sebagai cara bagi pengguna Internet untuk memberikan situs web atau aplikasi akses ke informasi mereka di situs-situs lain tanpa memberikan password.[1] mekanisme Ini digunakan oleh perusahaan-perusahaan seperti Google, Facebook, Microsoft dan Twitter untuk mengizinkan pengguna untuk berbagi informasi tentang rekening mereka dengan aplikasi pihak ketiga atau situs web.
Titik kunci di sini adalah akses delegasi
. Mengapa ada orang yang membuat OAUTH ketika ada id/pwd berdasarkan otentikasi, yang didukung oleh multifactored auth seperti Otp dan selanjutnya dapat diamankan oleh JWTs yang digunakan untuk mengamankan akses ke jalan (seperti di lingkup OAUTH) dan mengatur berakhirnya akses
Ada's tidak ada titik menggunakan OAUTH jika konsumen mengakses sumber daya mereka(end points) hanya melalui situs terpercaya(atau aplikasi) yang lagi anda di-host pada titik akhir
Anda dapat pergi OAUTH otentikasi hanya jika anda adalah seorang OAUTH penyedia
dalam kasus-kasus di mana pemilik sumber daya (pengguna) ingin mengakses mereka(anda) sumber daya (end-point) melalui pihak ketiga klien(aplikasi eksternal). Dan hal ini sebenarnya dibuat untuk tujuan yang sama meskipun anda dapat menyalahgunakannya secara umum
Catatan penting lain:
Anda're bebas menggunakan kata pengesahan
untuk JWT dan OAUTH tetapi tidak menyediakan mekanisme otentikasi. Ya salah satunya adalah token mekanisme dan yang lainnya adalah protokol tetapi setelah dikonfirmasi mereka hanya digunakan untuk otorisasi (access management). Anda've untuk kembali OAUTH baik dengan OPENID jenis otentikasi atau klien anda sendiri kredensial
JWT adalah standar terbuka yang mendefinisikan kompak dan self-contained cara untuk aman mengirimkan informasi antara pihak-pihak. Itu adalah sebuah protokol otentikasi yang mana kita membiarkan dikodekan klaim (token) yang akan ditransfer antara dua pihak (client dan server) dan token yang dikeluarkan pada identifikasi klien. Dengan setiap permintaan berikutnya kita mengirim token.
Sedangkan OAuth2 adalah otorisasi framework, di mana ia memiliki prosedur umum dan setup yang didefinisikan oleh framework. JWT dapat digunakan sebagai mekanisme dalam OAuth2.
Anda dapat membaca lebih lanjut tentang ini di sini
https://stackoverflow.com/questions/32964774/oauth-or-jwt-which-one-to-use-and-why/48333725#48333725
menemukan perbedaan utama antara JWT & OAuth
OAuth 2.0 mendefinisikan protokol & JWT mendefinisikan tanda format.
OAuth dapat menggunakan salah JWT sebagai tanda format atau akses token yang merupakan pembawa token.
OpenID connect sebagian besar menggunakan JWT sebagai tanda format.
Jwt ketat set instruksi untuk mengeluarkan dan memvalidasi ditandatangani akses token. Token mengandung klaim yang digunakan oleh sebuah aplikasi untuk membatasi akses ke pengguna
OAuth2 di sisi lain tidak protokol, yang didelegasikan otorisasi framework. berpikir yang sangat rinci pedoman, untuk membiarkan pengguna dan aplikasi otorisasi izin khusus untuk aplikasi lain dalam pengaturan baik swasta dan publik. OpenID Connect yang duduk di atas OAUTH2 memberikan Otentikasi dan Otorisasi.ini rincian bagaimana beberapa peran yang berbeda, pengguna dalam sistem anda, sisi server aplikasi seperti API, dan klien seperti situs web atau native mobile apps, dapat mengotentikasi satu sama lain
Catatan oauth2 dapat bekerja dengan jwt , pelaksanaan yang fleksibel, extandable untuk aplikasi yang berbeda