Arsitektur perangkat lunak untuk otentikasi / kontrol akses layanan web REST

12

Saya menyiapkan layanan web RESTful baru dan saya perlu menyediakan model kontrol akses berbasis peran . Saya perlu membuat arsitektur yang akan memungkinkan pengguna untuk memberikan nama pengguna dan kata sandi mereka untuk mendapatkan akses ke layanan dan kemudian membatasi bagaimana mereka dapat menggunakan layanan (layanan mana yang dapat mereka gunakan, baca vs baca / tulis, dll) berdasarkan peran ditugaskan untuk pengguna itu.

Saya telah melihat sekitar pada pertanyaan-pertanyaan lain dan menemukan potongan-potongan dari apa yang saya inginkan. Misalnya ada beberapa diskusi hebat tentang bagaimana menangani kredensial yang diteruskan ke layanan REST -autentikasi , praktik terbaik . Ada juga beberapa petunjuk penting tentang apa yang harus diketahui oleh pemrogram saat membuat situs web ( apa yang harus diketahui setiap pengembang sebelum membangun situs web publik ).

Tetapi saya belum dapat menemukan posting, artikel, buku tentang praktik terbaik dan pola untuk arsitektur perangkat lunak yang mengimplementasikan solusi ini.

Secara khusus:

  • Bagaimana seharusnya detail pengguna dan hak akses disimpan? (model data, lokasi, format)
  • Apa pola desain yang baik untuk mewakili dan melacak ini di server? (sesi dalam memori, pencarian db setiap kali, dll)
  • Apa pola yang baik untuk memetakan hak-hak ini ke layanan dengan cara yang aman di basis kode?
  • Pilihan arsitektur apa yang dapat membantu menjaga sistem lebih aman dan andal?
  • Pelajaran apa yang didapat orang dari parit?

Yang saya cari adalah pola desain dan rekomendasi untuk arsitektur perangkat lunak di luar teknologi spesifik apa pun.

(Jika masalah teknologi, saya berencana untuk mengimplementasikan ini menggunakan python, twisted, dan database postgresql)

Allen
sumber
Kedengarannya seperti Anda hanya perlu seseorang untuk menulisnya untuk Anda;)
Martin Blore
Sayangnya sepertinya jalan. Tampaknya aneh bahwa bagian tumpukan ini tidak dijelaskan di mana pun. Bahkan jika saya bisa menemukan luncuran bagaimana situs seperti newegg, digg, atau bahkan stackoverflow menangani kredensial dan akses pengguna di backend, itu akan membantu.
Allen
Sudahkah Anda membuat kemajuan dalam hal ini?
Bryan Agee
Sudahkah Anda mempertimbangkan oAuth2 ? Ada pustaka server dan klien yang tersedia untuk itu dalam banyak bahasa populer yang seharusnya membuatnya lebih mudah untuk mengimplementasikannya.
Sam

Jawaban:

5

OpenAM.

http://forgerock.com/openam.html

Bagaimana seharusnya detail pengguna dan hak akses disimpan? (model data, lokasi, format)

Manajer Identitas. Pisahkan dari server web mana pun. Berbasis LDAP.

Apa pola desain yang baik untuk mewakili dan melacak ini di server? (sesi dalam memori, pencarian db setiap kali, dll)

Dipecahkan oleh kerangka kerja Anda. Jangan pikirkan lagi. Cukup gunakan pola desain bagus kerangka Anda yang sudah dibangun.

Apa pola yang baik untuk memetakan hak-hak ini ke layanan dengan cara yang aman di basis kode?

Dipecahkan oleh kerangka kerja Anda. Setiap kerangka kerja menggunakan pendekatan yang sedikit berbeda. Setiap bahasa memiliki fitur yang sedikit berbeda. Django, misalnya, menggunakan dekorator Python banyak untuk ini.

Pilihan arsitektur apa yang dapat membantu menjaga sistem lebih aman dan andal?

Lebih? Lebih dari apa?

S.Lott
sumber
Dalam pengaturan khusus saya, saya tidak berpikir saya bisa menggunakan sesuatu seperti OpenAM. Saya tidak perlu masuk tunggal di seluruh perusahaan. Saya pikir saya perlu sesuatu yang lebih kecil dan lebih mandiri.
Allen
@ Allen. Kami tidak menggunakannya untuk sistem masuk tunggal di seluruh perusahaan. Kami menggunakannya untuk manajemen identitas sederhana.
S.Lott