Ketika saya membaca pertanyaan Anda, saya telah mencoba tanpa berhasil untuk mencari di Internet bagaimana token Pembawa dienkripsi atau ditandatangani. Saya kira token pembawa tidak hash (mungkin sebagian, tetapi tidak sepenuhnya) karena dalam kasus itu, tidak akan mungkin untuk mendekripsi dan mengambil properti pengguna darinya.
Tetapi pertanyaan Anda tampaknya mencoba menemukan jawaban pada fungsionalitas token Bearer:
Misalkan saya menerapkan penyedia otorisasi, dapatkah saya menyediakan segala jenis string untuk token pembawa? Bisakah itu string acak? Apakah itu harus menjadi pengkodean base64 dari beberapa atribut? Haruskah hash?
Jadi, saya akan mencoba menjelaskan bagaimana token Bearer dan Refresh token bekerja:
Saat pengguna meminta server untuk mengirimkan token dan kata sandi pengguna melalui SSL, server mengembalikan dua hal: token akses dan token Segarkan .
Token akses adalah token Pembawa yang harus Anda tambahkan di semua header permintaan untuk diautentikasi sebagai pengguna konkret.
Authorization: Bearer <access_token>
Token Access adalah string terenkripsi dengan semua properti, Klaim, dan Peran Pengguna yang Anda inginkan. (Anda dapat memeriksa bahwa ukuran token bertambah jika Anda menambahkan lebih banyak peran atau klaim). Setelah Server Sumber Daya menerima token akses, ia akan dapat mendekripsi dan membaca properti pengguna ini. Dengan cara ini, pengguna akan divalidasi dan diberikan bersama dengan semua aplikasi.
Token akses kedaluwarsa singkat (mis. 30 menit). Jika token akses memiliki masa berlaku yang lama, itu akan menjadi masalah, karena secara teoritis tidak ada kemungkinan untuk mencabutnya. Jadi bayangkan seorang pengguna dengan peran = "Admin" yang berubah menjadi "Pengguna". Jika pengguna menyimpan token lama dengan role = "Admin" ia akan dapat mengakses hingga token kedaluwarsa dengan hak Admin. Itu sebabnya akses token memiliki kedaluwarsa singkat.
Tapi, ada satu masalah yang muncul. Jika token akses memiliki kedaluwarsa singkat, kami harus mengirimkan setiap periode singkat pengguna dan kata sandi. Apakah ini aman? Tidak. Kita harus menghindarinya. Saat itulah Refresh token muncul untuk menyelesaikan masalah ini.
Refresh token disimpan dalam DB dan akan memiliki masa berlaku lama (contoh: 1 bulan).
Seorang pengguna dapat memperoleh token akses baru (ketika kedaluwarsa, misalnya setiap 30 menit) menggunakan token penyegaran, yang telah diterima pengguna dalam permintaan pertama untuk token. Ketika token akses berakhir, klien harus mengirim token refresh. Jika token refresh ini ada di DB, server akan kembali ke klien token akses baru dan token refresh lainnya (dan akan mengganti token refresh lama dengan yang baru).
Jika token akses pengguna telah disusupi, token penyegaran dari pengguna tersebut harus dihapus dari DB. Dengan cara ini token hanya akan valid hingga token akses berakhir karena ketika peretas mencoba untuk mendapatkan token akses baru dengan mengirimkan token penyegaran, tindakan ini akan ditolak.