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)
Jawaban:
OpenAM.
http://forgerock.com/openam.html
Manajer Identitas. Pisahkan dari server web mana pun. Berbasis LDAP.
Dipecahkan oleh kerangka kerja Anda. Jangan pikirkan lagi. Cukup gunakan pola desain bagus kerangka Anda yang sudah dibangun.
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.
Lebih? Lebih dari apa?
sumber