Apa itu otentikasi berbasis token?

Jawaban:

544

Saya pikir itu dijelaskan dengan baik di sini - hanya mengutip kalimat kunci dari artikel panjang:

Konsep umum di balik sistem otentikasi berbasis token sederhana. Bolehkan pengguna untuk memasukkan nama pengguna dan kata sandi mereka untuk mendapatkan token yang memungkinkan mereka untuk mengambil sumber daya tertentu - tanpa menggunakan nama pengguna dan kata sandi mereka. Setelah token mereka diperoleh, pengguna dapat menawarkan token - yang menawarkan akses ke sumber daya tertentu untuk jangka waktu tertentu - ke situs jarak jauh.

Dengan kata lain: tambahkan satu tingkat tipuan untuk otentikasi - alih-alih harus mengautentikasi dengan nama pengguna dan kata sandi untuk setiap sumber daya yang dilindungi, pengguna mengautentikasi seperti itu satu kali (dalam sesi durasi terbatas), mendapatkan token terbatas waktu sebagai balasannya , dan menggunakan token itu untuk otentikasi lebih lanjut selama sesi.

Keuntungannya banyak - misalnya, pengguna dapat melewati token, begitu mereka mendapatkannya, ke beberapa sistem otomatis lain yang bersedia mereka percayai untuk waktu yang terbatas dan sumber daya yang terbatas, tetapi tidak mau mempercayai dengan nama pengguna dan kata sandi mereka (yaitu, dengan setiap sumber daya yang mereka boleh akses, selamanya atau setidaknya sampai mereka mengubah kata sandi mereka).

Jika ada yang masih belum jelas, harap edit pertanyaan Anda untuk mengklarifikasi APA yang tidak jelas 100% untuk Anda, dan saya yakin kami dapat membantu Anda lebih lanjut.

Alex Martelli
sumber
6
Apakah saya benar dalam berpikir bahwa dalam aplikasi web, satu (atau lebih) cookie dari situs web jarak jauh melakukan fungsi token?
AJP
29
Karena token disimpan sebagai cookie, apakah ada sesuatu untuk menghentikan seseorang mencuri cookie / token itu dan menggunakannya sendiri, menipu server agar berpikir bahwa mereka adalah pengguna yang sah? Jelas mereka hanya bisa menggunakannya untuk jumlah waktu x, tetapi selama periode itu mereka bisa melakukan semua kerusakan yang mereka butuhkan.
BenM
40
Apa bedanya dengan SessionAuthentication, di mana pengguna dapat memperoleh session_id dengan menghibur nama pengguna dan kata sandinya, dan kemudian menggunakan session_id ini dalam permintaan berikutnya?
Saurabh Verma
4
jika token kedaluwarsa apakah pengguna harus masuk lagi untuk mendapatkan token baru?
Anthony To
12
@SaurabhVerma berbeda dari sesi karena Anda tidak perlu menyimpan informasi dalam cookie. Itu bagus untuk perangkat seluler, beberapa di antaranya memiliki batasan penggunaan cookie.
Kebman
182

Dari Auth0.com

Otentikasi Berbasis Token, bergantung pada token yang ditandatangani yang dikirim ke server pada setiap permintaan.

Apa manfaat menggunakan pendekatan berbasis token?

  • Lintas-domain / CORS: cookie + CORS tidak bisa dimainkan dengan baik di berbagai domain. Pendekatan berbasis token memungkinkan Anda untuk membuat panggilan AJAX ke server apa pun, pada domain apa pun karena Anda menggunakan header HTTP untuk mengirimkan informasi pengguna.

  • Tanpa kewarganegaraan (skalabilitas sisi Server): tidak perlu menyimpan sesi store, token adalah entitas mandiri yang menyampaikan semua informasi pengguna. Negara bagian lainnya hidup dalam cookie atau penyimpanan lokal di sisi klien.

  • CDN: Anda dapat melayani semua aset aplikasi Anda dari CDN (mis. Javascript, HTML, gambar, dll.), Dan sisi server Anda hanyalah API.

  • Decoupling: Anda tidak terikat dengan skema otentikasi tertentu. Token dapat dibuat di mana saja, karenanya API Anda dapat dipanggil dari mana saja dengan satu cara mengautentikasi panggilan itu.

  • Siap seluler: ketika Anda mulai bekerja pada platform asli (iOS, Android, Windows 8, dll.) Cookie tidak ideal ketika mengkonsumsi pendekatan berbasis token menyederhanakan hal ini.

  • CSRF: karena Anda tidak mengandalkan cookie, Anda tidak perlu melindungi terhadap permintaan lintas situs (mis. Tidak mungkin untuk membuat saudara situs Anda, menghasilkan permintaan POST dan menggunakan kembali cookie otentikasi yang ada karena tidak akan ada ).

  • Kinerja: kami tidak menyajikan tolok ukur kinerja apa pun di sini, tetapi pulang-pergi jaringan (mis. Menemukan sesi pada basis data) cenderung memakan waktu lebih lama daripada menghitung HMACSHA256 untuk memvalidasi token dan mengurai isinya.

Asik
sumber
6
@ Asik Semua poin di sini valid kecuali "Stateless" ketika Anda mulai berurusan dengan pencabutan token, daftar hitam, balas pencegahan serangan dll.
svlada
Situs yang dikutip merekomendasikan artikel yang lebih baru dengan topik yang sama: auth0.com/blog/cookies-vs-tokens-definitive-guide
ASalazar
2
Anda mungkin ingin membaca "Hentikan penggunaan JWT untuk sesi": cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions
Juraj Martinka
1
Asik, Bagaimana dengan validitas token dan kapan akan kadaluwarsa? Jika Anda menambahkan info itu akan bagus.
Arun Prakash
2
Tautan sekarang terputus.
Pemandangan elips
95

A tokenadalah sepotong data yang hanya Server Xbisa dibuat, dan yang berisi cukup data untuk mengidentifikasi pengguna tertentu.

Anda mungkin menyajikan informasi login Anda dan meminta Server Xuntuk token; dan kemudian Anda dapat mempresentasikan tokendan meminta Anda Server Xuntuk melakukan beberapa tindakan khusus pengguna.

Tokens dibuat menggunakan berbagai kombinasi berbagai teknik dari bidang kriptografi serta dengan masukan dari bidang penelitian keamanan yang lebih luas. Jika Anda memutuskan untuk pergi dan membuat tokensistem Anda sendiri , Anda sebaiknya benar-benar pintar.

yfeldblum
sumber
4
Secara umum, jika Anda ingin otentikasi berbasis token, Anda harus mulai dengan OAuth.
Bob Aman
6
OAuth tentu dapat digunakan dalam aplikasi berbasis web. Tetapi, misalnya, sesi login sistem operasi menggunakan sistem token juga, seperti halnya banyak jenis program perangkat lunak lainnya, jadi ide ini tidak terbatas pada Web.
yfeldblum
1
Token mungkin juga lebih disukai untuk sistem dukungan pelanggan non-publik. Perusahaan mengontrol nama pengguna / kata sandi dan masalah & mengontrol token.
KevinManx
chrs - tetapi bagaimana sistem ini berbeda dari sistem berbasis sesi?
BKSpurgeon
@BKSpurgeon - Token adalah cara umum untuk mengimplementasikan sesi yang diautentikasi.
yfeldblum
40

Token adalah sepotong data yang dibuat oleh server, dan berisi informasi untuk mengidentifikasi pengguna tertentu dan validitas token. Token akan berisi informasi pengguna, serta kode token khusus yang dapat dilewati pengguna ke server dengan setiap metode yang mendukung otentikasi, alih-alih menyampaikan nama pengguna dan kata sandi secara langsung.

Otentikasi berbasis Token adalah teknik keamanan yang mengotentikasi pengguna yang mencoba masuk ke server, jaringan, atau sistem aman lainnya, menggunakan token keamanan yang disediakan oleh server.

Otentikasi berhasil jika pengguna dapat membuktikan ke server bahwa ia adalah pengguna yang valid dengan melewati token keamanan. Layanan memvalidasi token keamanan dan memproses permintaan pengguna.

Setelah token divalidasi oleh layanan, ini digunakan untuk menetapkan konteks keamanan untuk klien, sehingga layanan dapat membuat keputusan otorisasi atau aktivitas audit untuk permintaan pengguna berturut-turut.

kunjungi sumbernya

DeepakK
sumber
22

Berbasis Token (Keamanan / Otentikasi)

berarti Agar kami dapat membuktikan bahwa kami telah mengakses, pertama-tama kami harus menerima token. Dalam skenario kehidupan nyata, token bisa menjadi kartu akses untuk membangun, itu bisa menjadi kunci untuk mengunci rumah Anda. Agar Anda dapat mengambil kartu kunci untuk kantor Anda atau kunci ke rumah Anda, pertama-tama Anda harus membuktikan siapa Anda, dan bahwa Anda sebenarnya memiliki akses ke token itu. Ini bisa berupa sesuatu yang sederhana seperti menunjukkan kepada seseorang ID Anda atau memberi mereka kata sandi rahasia. Jadi bayangkan saya perlu mendapatkan akses ke kantor saya. Saya pergi ke kantor keamanan, saya menunjukkan kepada mereka ID saya, dan mereka memberi saya token ini, yang memungkinkan saya masuk ke gedung. Sekarang saya memiliki akses tidak terbatas untuk melakukan apa pun yang saya inginkan di dalam gedung, selama saya memiliki token saya.

Apa manfaat keamanan berbasis token?

Jika kita mengingat kembali API yang tidak aman, yang harus kita lakukan dalam hal itu adalah bahwa kita harus memberikan kata sandi untuk semua yang ingin kita lakukan.

Membayangkanbahwa setiap kali kita memasuki pintu di kantor kita, kita harus memberi setiap orang yang duduk di sebelah pintu kata sandi kita. Nah, itu akan sangat buruk, karena itu berarti bahwa siapa pun di dalam kantor kami dapat mengambil kata sandi kami dan menyamar sebagai kami, dan itu sangat buruk. Sebaliknya, yang kami lakukan adalah kami mengambil token, tentu saja bersama dengan kata sandi, tetapi kami mengambilnya dari satu orang. Dan kemudian kita bisa menggunakan token ini di mana pun kita inginkan di dalam gedung. Tentu saja jika kita kehilangan token, kita memiliki masalah yang sama seperti jika orang lain mengetahui kata sandi kita, tetapi itu menuntun kita ke hal-hal seperti bagaimana kita memastikan bahwa jika kita kehilangan token, kita dapat mencabut aksesnya, dan mungkin token seharusnya tidak hidup lebih lama dari 24 jam, jadi hari berikutnya kami datang ke kantor, kami perlu menunjukkan ID kami lagi. Tapi tetap saja, hanya ada satu orang yang kami tunjukkan identitasnya,

Ahmer Ali Ahsan
sumber
15

Pertanyaannya sudah tua dan teknologinya telah maju, berikut adalah keadaan saat ini:

JSON Web Token (JWT) adalah standar terbuka berbasis JSON (RFC 7519) untuk meneruskan klaim antar pihak dalam lingkungan aplikasi web. Token dirancang agar ringkas, aman URL, dan dapat digunakan terutama dalam konteks akses web browser tunggal (SSO).

https://en.wikipedia.org/wiki/JSON_Web_Token

Ray Hulha
sumber
1
Saya tidak berpikir bahwa JWT mewakili keadaan teknologi saat ini untuk menerapkan otentikasi berbasis token. Ini hanyalah salah satu cara untuk mengimplementasikannya dan dengan banyak kekurangan yang secara fasih ditulis oleh artikel seperti cryto.net/ ~ joepie91
Sung Cho
3

Hanya hash yang dikaitkan dengan pengguna dalam database atau cara lain. Token itu dapat digunakan untuk mengautentikasi dan kemudian mengotorisasi pengguna yang mengakses konten aplikasi. Diperlukan untuk mengambil token ini di sisi klien. Setelah login pertama kali, Anda perlu menyimpan token yang diambil bukan data lain seperti sesi, id sesi karena di sini semuanya token untuk mengakses sumber daya aplikasi lainnya.

Token digunakan untuk memastikan keaslian pengguna.

Hardik Patel
sumber
3

Pendekatan yang paling disukai saat ini untuk mengamankan sumber daya Web API adalah dengan mengautentikasi pengguna di server Web API dengan menggunakan token yang ditandatangani (yang berisi informasi yang cukup untuk mengidentifikasi pengguna tertentu) yang perlu dikirim ke server oleh klien dengan masing-masing dan setiap permintaan. Ini disebut pendekatan Otentikasi Berbasis Token.

Otentikasi Berbasis Token berfungsi sebagai berikut:

Seorang pengguna memasukkan nama dan kata sandi ke dalam klien (klien berarti browser atau perangkat seluler dll).

Klien kemudian mengirimkan kredensial ini (yaitu nama pengguna dan kata sandi) ke Server Otorisasi.

Kemudian Server Otorisasi mengotentikasi kredensial klien (yaitu nama pengguna dan kata sandi) dan kemudian menghasilkan dan mengembalikan token akses. Token Akses ini berisi informasi yang cukup untuk mengidentifikasi pengguna dan juga berisi waktu kedaluwarsa token.

Aplikasi klien kemudian menyertakan Token Akses di header Otorisasi permintaan HTTP untuk mengakses sumber daya terbatas dari Server Sumber Daya sampai token yang kedaluwarsa.

Artikel berikut menunjukkan bagaimana menerapkan Otentikasi Token Berbasis di WEB API langkah demi langkah.

https://dotnettutorials.net/lesson/token-based-authentication-web-api/

Rute Pranaya
sumber
-2

Ketika Anda mendaftar untuk situs web baru, sering kali Anda dikirimi email untuk mengaktifkan akun Anda. Email itu biasanya berisi tautan untuk diklik. Bagian dari tautan itu, berisi token, server tahu tentang token ini dan dapat mengaitkannya dengan akun Anda. Token biasanya memiliki tanggal kedaluwarsa yang terkait dengannya, jadi Anda hanya memiliki satu jam untuk mengklik tautan dan mengaktifkan akun Anda. Semua ini tidak akan mungkin dilakukan dengan cookie atau variabel sesi, karena tidak diketahui perangkat atau browser apa yang digunakan pelanggan untuk memeriksa email.

pengguna3094826
sumber
11
Token / tautan satu kali adalah konsep yang berbeda dari otentikasi berbasis token.
Emile Bergeron
Nama yang Anda ucapkan juga token. Tapi itu bukan pertanyaannya
sajjad Yosefi