Architektura oprogramowania do uwierzytelniania / kontroli dostępu do usługi REST

12

Konfiguruję nową usługę sieci Web RESTful i muszę zapewnić oparty na rolach model kontroli dostępu . Muszę stworzyć architekturę, która pozwoli użytkownikom podać swoją nazwę użytkownika i hasło, aby uzyskać dostęp do usług, a następnie ograniczyć sposób, w jaki mogą korzystać z usług (z których usług mogą korzystać, czytać a czytać / pisać itp.) W zależności od ról przypisany do tych użytkowników.

Rozejrzałem się wokół innych pytań i znalazłem fragmenty tego, czego chcę. Na przykład istnieje kilka świetnych dyskusji na temat obsługi przekazywania poświadczeń usługom REST restful-authentication , najlepsze praktyki . Istnieją również świetne wskazówki na temat tego, co programiści powinni wiedzieć podczas tworzenia stron internetowych ( co każdy programista powinien wiedzieć przed budowaniem publicznej strony internetowej ).

Ale nie udało mi się znaleźć dobrego wpisu, artykułu, książki na temat najlepszych praktyk i wzorców dla architektury oprogramowania, która implementuje te rozwiązania.

Konkretnie:

  • Jak należy przechowywać dane użytkownika i prawa dostępu? (model danych, lokalizacja, format)
  • Jakie są dobre wzorce projektowe do reprezentowania i śledzenia ich na serwerze? (sesje w pamięci, wyszukiwania bazy danych za każdym razem itp.)
  • Jakie są dobre wzorce mapowania tych praw do usług w bezpieczny sposób w bazie kodu?
  • Jakie rozwiązania architektoniczne mogą pomóc w zapewnieniu bezpieczeństwa i niezawodności systemu?
  • Czego się nauczyli ludzie z okopów?

Szukam wzorców projektowych i rekomendacji dla architektury oprogramowania poza konkretnymi technologiami.

(Jeśli technologie mają znaczenie, planuję wdrożyć to za pomocą Pythona, Twisted i bazy danych Postgresql)

Allen
źródło
Wygląda na to, po prostu potrzebuję kogoś do napisania go dla Ciebie;)
Martin Blore
Niestety wygląda to na sposób. Wydawało się dziwne, że tej części stosu nigdzie nie opisano. Nawet gdybym mógł znaleźć opis, w jaki sposób witryna taka jak newegg, digg, a nawet stackoverflow obsługuje poświadczenia użytkownika i dostęp do backendu, to by pomogło.
Allen,
Czy poczyniłeś jakieś postępy w tej sprawie?
Bryan Agee
Czy rozważałeś oAuth2 ? Dostępne są biblioteki serwerów i klientów w wielu popularnych językach, które powinny ułatwić jego wdrożenie.
Sam

Odpowiedzi:

5

OpenAM.

http://forgerock.com/openam.html

Jak należy przechowywać dane użytkownika i prawa dostępu? (model danych, lokalizacja, format)

Menedżer tożsamości. Oddziel od dowolnego serwera WWW. Oparte na LDAP.

Jakie są dobre wzorce projektowe do reprezentowania i śledzenia ich na serwerze? (sesje w pamięci, wyszukiwania bazy danych za każdym razem itp.)

Rozwiązane przez ramy. Nie myśl więcej. Po prostu użyj już zbudowanych dobrych wzorców projektowych.

Jakie są dobre wzorce mapowania tych praw do usług w bezpieczny sposób w bazie kodu?

Rozwiązane przez ramy. Każda struktura wykorzystuje nieco inne podejście. Każdy język ma nieco inne funkcje. Na przykład Django mocno wykorzystuje do tego dekoratory Pythona.

Jakie rozwiązania architektoniczne mogą pomóc w zapewnieniu bezpieczeństwa i niezawodności systemu?

Więcej? Więcej niż co?

S.Lott
źródło
W mojej konkretnej konfiguracji nie sądzę, że mogę używać czegoś takiego jak OpenAM. Nie potrzebuję jednokrotnego logowania w całym przedsiębiorstwie. Myślę, że potrzebuję czegoś mniejszego i bardziej samodzielnego.
Allen
@Allen. Nie używamy go do jednokrotnego logowania w całym przedsiębiorstwie. Używamy go do prostego zarządzania tożsamością.
S.Lott,