Saya mengalami kesulitan memilih strategi otentikasi yang layak / aman untuk arsitektur layanan mikro. Satu-satunya posting SO yang saya temukan pada topik adalah yang ini: Single Sign-On dalam Arsitektur Microsoft
Gagasan saya di sini adalah untuk memiliki di setiap layanan (mis. Otentikasi, pengiriman pesan, pemberitahuan, profil, dll.) Referensi unik untuk setiap pengguna (cukup logis dari miliknya user_id
) dan kemungkinan untuk mendapatkan pengguna saat iniid
jika login.
Dari penelitian saya, saya melihat ada dua strategi yang mungkin:
1. Arsitektur bersama
Dalam strategi ini, aplikasi otentikasi adalah salah satu layanan di antara yang lainnya. Tetapi setiap layanan harus dapat membuat konversi session_id
=> user_id
sehingga harus mati sederhana. Itu sebabnya saya memikirkan Redis, yang akan menyimpan kuncinya: nilaisession_id:user_id
.
2. Arsitektur firewall
Dalam strategi ini, penyimpanan sesi tidak terlalu penting, karena hanya ditangani oleh aplikasi otentikasi. Kemudian user_id
dapat diteruskan ke layanan lain. Saya memikirkan Rails + Devise (+ Redis atau mem-cache, atau penyimpanan cookie, dll.) Tetapi ada banyak kemungkinan. Satu-satunya hal yang penting adalah bahwa Layanan X tidak akan pernah perlu untuk mengotentikasi pengguna.
Bagaimana kedua solusi tersebut dibandingkan dalam hal:
- keamanan
- kekokohan
- skalabilitas
- kemudahan penggunaan
Atau mungkin Anda akan menyarankan solusi lain yang belum saya sebutkan di sini?
Saya suka solusi # 1 lebih baik tetapi belum menemukan banyak implementasi standar yang akan mengamankan saya pada kenyataan bahwa saya akan ke arah yang benar.
Saya harap pertanyaan saya tidak ditutup. Saya tidak tahu harus bertanya ke mana lagi.
Terima kasih sebelumnya
sumber
Jawaban:
Berdasarkan apa yang saya pahami, cara yang baik untuk mengatasinya adalah dengan menggunakan protokol OAuth 2 (Anda dapat menemukan sedikit informasi lebih banyak tentang itu di http://oauth.net/2/ )
Ketika pengguna Anda masuk ke aplikasi Anda, mereka akan mendapatkan token dan dengan token ini mereka akan dapat mengirim ke layanan lain untuk mengidentifikasi mereka dalam permintaan.
Contoh Desain Rantai Mikro yang dirantai
Sumber:
sumber
Jawaban singkat: Gunakan otentikasi berbasis token jenis Oauth2.0, yang dapat digunakan dalam semua jenis aplikasi seperti aplikasi web atau aplikasi seluler. Urutan langkah-langkah yang terlibat untuk aplikasi web akan menjadi kemudian
Diagram di bawah ini menggambarkan komponen-komponen yang akan dibutuhkan. Arsitektur yang memisahkan web dan data apis akan memberikan skalabilitas, ketahanan, dan stabilitas yang baik
sumber
Pola gateway API harus digunakan untuk mengimplementasikan ini menggunakan OpenID Connect. Pengguna akan diautentikasi oleh IDP dan akan mendapatkan token JWT dari server otorisasi. Sekarang sistem gateway API dapat menyimpan token ini di basis data Redis dan mengatur cookie di browser. Gateway API akan menggunakan cookie untuk memvalidasi permintaan pengguna dan akan mengirimkan token ke Layanan Microsoft.
API Gateway bertindak sebagai titik masuk tunggal untuk semua jenis aplikasi klien seperti aplikasi klien skrip java publik, aplikasi web tradisional, aplikasi seluler asli, dan aplikasi klien pihak ketiga dalam arsitektur Microservice.
Anda dapat menemukan detail lebih lanjut tentang itu di http://proficientblog.com/microservices-security/
sumber
Anda dapat menggunakan server idenitty 4 untuk tujuan otentikasi dan otorisasi
Anda harus menggunakan Arsitektur Firewall sehingga Anda memiliki kontrol lebih besar terhadap keamanan, ketahanan, skalabilitas, dan kemudahan penggunaan
sumber