Saat ini saya memiliki webapp monolithic lawas berusia 15 tahun dengan hampir 1 juta pengguna, menggunakan sistem otorisasi & otentikasi buatan sendiri: JAAS, nama pengguna & toko pwds di DB dengan hashing kata sandi dasar, beberapa pertanyaan verifikasi pribadi 2FA (dengan berbagai algoritma hashing, dll).
Saya akan merombak aplikasi selama 12-18 bulan ke depan, terutama berfokus pada UI, tetapi perlahan-lahan meningkatkan bagian-bagian yang mendasarinya juga (upgrade ke Spring, Spring Security, dll). Dalam proyek ini, kami telah memutuskan untuk menangani peningkatan UI berdasarkan modul-demi-modul; membuat setiap modul tersedia setelah selesai; kesempatan sempurna untuk memecah monolith menjadi webapps individu (semua mempertahankan desain UX yang sama).
Tempat saya macet saat merencanakan ini adalah pada tingkat otentikasi & otorisasi. Saya memerlukan solusi lintas-bidang yang akan melengkung di atas semua modul, sehingga ketika pengguna diarahkan dari satu webapp ke yang lain, itu adalah transisi yang mulus - mereka bahkan tidak akan tahu bahwa mereka ada di webapps yang berbeda. OAuth2 terdengar seperti solusi sempurna.
Saya buntu mencoba memahami cara mengintegrasikan ini. Apakah saya harus membangun server OAuth2 kustom saya sendiri? Itu mengejutkan saya seperti ide yang mengerikan. Tapi bagaimana caranya:
- memigrasi semua akun pengguna saya & proses otorisasi ke server OAuth2 pihak ke-3
- sesuaikan tampilan & nuansa agar sesuai dengan sisa aplikasi saya (tidak yakin seberapa mudah / mungkin ini akan terjadi)
- cegah popup "Aplikasi XYZ ingin izin untuk mengakses akun Anda ..." ketika terhubung melalui server pihak ke-3? (mis: Google OpenID, Facebook, dll).
Tujuan saya adalah untuk menyediakan transisi yang mulus bagi pengguna dari kondisi saat ini ke kondisi baru, tetapi memberikan kemampuan untuk membuat aplikasi web terpisah yang semuanya diautentikasi & diotorisasi di luar aplikasi web.
sumber
Jawaban:
Pengungkapan : Saya seorang insinyur di Auth0 .
Tergantung pada satu poin utama ... Anda perlu memutuskan apakah:
Kedua opsi sangat layak dari sudut pandang persyaratan fungsional Anda. Dengan pengembangan kustom, Anda memegang kendali penuh atas fungsionalitas yang Anda putuskan untuk didukung, jadi saya akan memfokuskan sebagian jawaban tentang bagaimana Auth0 dapat merespons persyaratan yang Anda daftarkan .
Namun, sebelum pindah ke sana, apa pun keputusan Anda, untuk otentikasi Anda harus fokus pada OpenID Connect daripada OAuth2. Yang terakhir akan lebih berlaku jika Anda berencana untuk juga memiliki API dalam campuran dan tidak hanya membagi monolit menjadi aplikasi web yang terpisah.
Bagaimana cara memigrasikan pengguna yang ada ke sistem berbasis Auth0?
Anda dapat memutuskan untuk tetap menggunakan database Anda dan mengandalkan Auth0 untuk menyediakan semua kepatuhan dengan protokol terkait otentikasi yang mungkin perlu Anda gunakan atau Anda dapat memigrasikan pengguna Anda ke database yang dikelola Auth0 dan berhenti mengkhawatirkan tentang bagaimana Anda menyimpan dan memvalidasi kata sandi.
Jika Anda lebih memilih untuk tetap menggunakan basis data Anda, lihat Mengotentikasi Pengguna dengan Nama Pengguna dan Kata Sandi menggunakan Database Kustom
(Dokumen merujuk ke MySQL hanya sebagai contoh, mesin database lain didukung)
Di sisi lain, Anda dapat memindahkan kredensial pengguna ke basis data Auth0 dengan mulus dengan memanfaatkan proses migrasi yang dijelaskan dalam Migrasi Pengguna ke Auth0
Anda juga dapat membuat semua pengguna Anda di Auth0 melalui API Manajemen jika Anda lebih suka mereka semua mulai menggunakan algoritma hashing kata sandi kami sekaligus. Ini memiliki efek samping yang mengharuskan pengguna untuk mengatur ulang kata sandi mereka.
Bagaimana cara tetap menggunakan otentikasi dua langkah khusus (pertanyaan verifikasi)?
Pipa otentikasi yang disediakan oleh Auth0 sepenuhnya dapat dikustomisasi melalui penggunaan aturan . Ini berarti bahwa meskipun Anda tidak harus mengimplementasikan hal-hal terkait protokol, Anda masih dapat menyempurnakan detail kecil tentang bagaimana otentikasi terjadi dalam aplikasi Anda.
Ini termasuk kemungkinan untuk terus menggunakan pertanyaan verifikasi yang ada sebagai cara untuk melakukan proses otentikasi dua langkah di mana pengguna memberikan kata sandi awal yang diverifikasi oleh Auth0 dan kemudian Anda meminta mereka untuk informasi lebih lanjut dari aturan khusus. (aturan hanya Javascript sehingga kemungkinannya tidak terbatas)
Namun Anda juga dapat memutuskan untuk membatalkan pertanyaan verifikasi dan sebagai gantinya pergi dengan Auth0 Guardian sebagai cara untuk meningkatkan keamanan proses otentikasi.
Bagaimana cara menyesuaikan tampilan dan nuansa UI otentikasi?
Dengan Auth0 Anda dapat memiliki UI otentikasi bersih dalam waktu singkat dengan memanfaatkan halaman login default atau widget otentikasi seperti Kunci . Semua ini mendukung beberapa tingkat penyesuaian dan Anda selalu dapat memutuskan untuk melakukan UI sendiri dan sebaliknya memanfaatkan pustaka Auth0 tingkat rendah ( Auth0.js ) yang tidak membuat kendala pada antarmuka pengguna.
Untuk informasi lebih lanjut tentang penyesuaian:
Bagaimana cara mencegah halaman persetujuan eksplisit?
Anda dapat menggunakan Auth0 baik sebagai penyedia identitas untuk tujuan otentikasi dan juga sebagai server otorisasi OAuth2 (saat ini hanya tersedia di wilayah AS) untuk API Anda.
Sebagai penyedia identitas Anda tidak perlu khawatir tentang halaman persetujuan, pengguna mengotentikasi dengan kredensial mereka yang dikelola oleh Auth0 dan kemudian akan diarahkan ke aplikasi Anda - itu saja.
Dalam OAuth2 sebagai skenario layanan ketika persetujuan diaktifkan, peta jalan mencakup memungkinkan untuk mem-bypass halaman persetujuan untuk aplikasi tertentu.
Pada catatan akhir, itu sepertinya proyek yang sangat menarik dan menantang yang Anda dapatkan di sana, jadi semoga beruntung terlepas dari keputusan akhir Anda.
Saya sudah melalui sesuatu yang serupa pada pekerjaan sebelumnya ketika saya harus mengimplementasikan kembali sistem otentikasi aplikasi lama. Kami menerapkan penyedia identitas dan server otorisasi kami sendiri dan sejujurnya saya masih merasa bahwa kami mungkin telah melupakan sesuatu yang sangat penting.
Saya pikir itu masalah terbesar dengan menggulirkan keamanan Anda sendiri, akan ada kesempatan tenggat waktu memaksakan pintasan dan keamanan bukanlah area yang baik untuk membuat pintasan.
Jika Anda memiliki pertanyaan lebih lanjut, beri tahu saya jika Anda pikir saya dapat membantu.
sumber