Strategi Otentikasi Layanan Mikro

138

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

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_idsehingga harus mati sederhana. Itu sebabnya saya memikirkan Redis, yang akan menyimpan kuncinya: nilaisession_id:user_id .

2. Arsitektur firewall

Arsitektur firewall

Dalam strategi ini, penyimpanan sesi tidak terlalu penting, karena hanya ditangani oleh aplikasi otentikasi. Kemudian user_iddapat 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

Augustin Riedinger
sumber
1
Maukah Anda memberikan rincian lebih lanjut tentang apa yang ingin Anda capai? Dalam kasus pertama, apakah otentikasi terjadi terhadap Redis, atau dalam layanan itu sendiri? Redis tidak ada dalam diagram kedua, apakah ini disengaja?
Plamen Petrov
Saya telah menambahkan beberapa informasi. Tolong beritahu saya itu masih belum jelas. Terima kasih!
Augustin Riedinger
Sudahkah Anda memikirkan ide untuk membuat layanan microser yang menggunakan Protokol OAuth dan layanan lainnya menggunakan Token yang dibuat?
Tiarê Balbi
Saya ingin tahu tentang solusi ini, tetapi saya masih tidak mengerti bagaimana cara kerjanya dalam praktik. Apakah Anda tahu di mana saya dapat menemukan beberapa implementasi standar?
Augustin Riedinger
@AugustinRiedinger, terima kasih telah memasang ini. Saya juga memecah aplikasi web monolitik menjadi layanan mikro dengan mengambil langkah kecil. Dalam kasus Anda, apakah Layanan 1-n tanpa kewarganegaraan atau negara-penuh. Jika semuanya penuh, pernahkah Anda berpikir tentang mengelola sesi di masing-masing layanan ini. Terima kasih
Manchanda. P

Jawaban:

61

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.

Model OAuth 2

Contoh Desain Rantai Mikro yang dirantai Model Arsitektur

Sumber:

Tiarê Balbi
sumber
1
Terima kasih sudah cukup jelas. Saya menemukan artikel yang sangat bagus ini menguraikan solusi yang hampir sama: dejanglozic.com/2014/10/07/…
Augustin Riedinger
16
Jawaban Anda bagus, tetapi bagaimana token yang dihasilkan dari API Gateway (dari dalamnya, atau dalam AuthMicroService) dapat ditangani oleh microservice acak, yang tujuannya bukan untuk mengotentikasi, dan mungkin tidak memiliki manajemen di dalam kode bisnisnya?
mfrachet
Misalnya Anda dapat menggunakan Netflix Zuul untuk mengirim token yang diterima di gateway ke semua layanan dan mereka akan mengetahui informasi pengguna. docs.spring.io/spring-boot/docs/current/reference/htmlsingle/…
Tiarê Balbi
Satu hal yang menyenangkan tentang menggunakan OAuth2 di antara layanan adalah Anda dapat memiliki titik akhir yang membedakan antara tindakan yang diotentikasi layanan dan yang diotentikasi pengguna.
cmp
2
OAuth lebih lanjut tentang pemberian akses sistem ke data pengguna yang disimpan di sistem lain. Bagi saya ini terlihat seperti kasus yang bagus untuk SAML.
Rob Grant
8

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

  1. otentikasi terhadap penyedia ID
  2. simpan token akses di cookie
  3. mengakses halaman di webapp
  4. hubungi layanan

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

masukkan deskripsi gambar di sini

Sandeep Nair
sumber
Bukankah AWS Lambda menjadi "dingin" dan membutuhkan waktu untuk memulai? Itu akan membuat login menjadi lambat, bukan?
tsuz
@tsuz, AWS sekarang telah memperkenalkan fitur konkurensi di lambda di mana Anda dapat memesan konkurensi. Dengan ini, Anda dapat memperbaiki masalah cold start. docs.aws.amazon.com/lambda/latest/dg/…
Sandeep Nair
Saya ingin sekali melihat jawaban ini bertahun-tahun sebelumnya, sangat mudah untuk memahami bagaimana arsitektur layanan microser dengan otentikasi dan otorisasi layanan microser independen dapat diatur untuk memberikan akses ke layanan lain
brayancastrop
@ Tetaplah, saya pikir Anda mengacu pada konkurensi yang disediakan dan tidak dicadangkan.
Anil Kumar
0

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/

ManishSingh
sumber
-2

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

Vijay Parmar
sumber