Ada banyak informasi di web tentang penggunaan JWT ( Json Web Token
) untuk otentikasi. Tetapi saya masih tidak menemukan penjelasan yang jelas tentang bagaimana alurnya saat menggunakan token JWT untuk solusi sistem masuk tunggal di lingkungan beberapa domain .
Saya bekerja untuk perusahaan yang memiliki banyak situs di host yang berbeda. Mari gunakan example1.com dan example2.com . Kami memerlukan solusi sistem masuk tunggal, yang berarti jika pengguna mengautentikasi di example1.com , kami ingin dia juga diautentikasi di example2.com , secara otomatis.
Dengan menggunakan alur OpenId Connect , saya memahami bahwa pengguna yang ingin mengautentikasi di example1.com akan dialihkan ke server otentikasi terlebih dahulu (atau OP
: "Penyedia OpenId"). Pengguna mengautentikasi di server itu yang kemudian mengarahkannya kembali ke situs example1.com asli dengan token JWT yang ditandatangani. (Saya mengerti ada aliran lain yang mengembalikan token perantara yang dengan sendirinya dapat ditukar dengan token JWT asli nanti, tetapi saya rasa ini tidak diperlukan untuk kami) ...
Jadi sekarang pengguna kembali ke example1.com dan diautentikasi! Dia dapat membuat permintaan, meneruskan token JWT di Authentication
header dan server dapat memverifikasi JWT yang ditandatangani dan oleh karena itu dapat mengidentifikasi pengguna. Bagus!
Pertanyaan pertama :
Bagaimana cara menyimpan token JWT di klien? Sekali lagi, ada banyak informasi tentang ini, dan orang-orang tampaknya setuju bahwa menggunakan Web Storage
adalah cara untuk pergi daripada yang baik cookies
. Kami ingin JWT menjadi persisten antara browser dimulai ulang jadi mari gunakan Local Storage
, bukan Session Storage
...
Sekarang pengguna dapat memulai ulang browsernya dan dia akan tetap diautentikasi di example1.com , selama token JWT tidak kedaluwarsa!
Selain itu, jika example1.com perlu membuat permintaan Ajax ke domain kami yang lain, saya memahami mengonfigurasi CORS akan memungkinkannya. Namun kasus penggunaan utama kami bukanlah permintaan lintas domain, ini memiliki solusi sistem masuk tunggal !
Karena itu, pertanyaan utamanya:
Sekarang, bagaimana seharusnya alurnya , jika pengguna membuka example2.com dan kita ingin dia diautentikasi, menggunakan token JWT yang sudah dia miliki? Local Storage
sepertinya tidak mengizinkan akses lintas domain, jadi pada saat ini browser tidak dapat membaca token JWT untuk membuat permintaan ke example2.com !
Sebaiknya :
- Pengguna dialihkan ke server otentikasi lagi? Ketika pengguna mengautentikasi untuk example1.com , server otentikasi mungkin telah menyetel cookie pada pengguna sehingga permintaan otentikasi baru untuk example2.com ini dapat menggunakan cookie itu untuk melihat bahwa pengguna sudah diautentikasi dan segera mengarahkannya kembali ke example2.com dengan token JWT yang sama?
- Atau dapatkah browser, di example2.com , mengakses token JWT tanpa harus pergi ke server otentikasi lagi? Saya melihat ada solusi penyimpanan silang , tetapi apakah itu banyak digunakan? Apakah itu solusi yang disarankan untuk lingkungan SSO lintas domain?
Kami tidak menginginkan sesuatu yang mewah, kami akan senang dengan solusi yang paling banyak digunakan!