Mikroserwisy - zarządzanie uprawnieniami

0

Witam.

Mam ostatnio zagwostkę odnośnie zarządzania dużą ilością uprawnień użytkowników w architekturze mikroserwisów.

Otóż uprawnienia w systemie są bardzo specyficzne pod klientów i jest ich dużo (obecnie ponad 500).
Zastanawiam się jakie sensowne rozwiązanie jest na przekazywanie tych uprawnień do mikroserwisów.

Powiedzmy że będę miał API gateway i tak myślę czy dobrym rozwiązaniem jest dociąganie tych uprawnień przy przekierowaniu zapytania do odpowiedniego mikroserwisu (w jakimś nagłówku HTTP(?)).
Tutaj przy tym podejściu było by to o tyle uniwersalne, że można dorzucić cachewanie tej listy uprawnień typu userId-listaUprawnień (potencjalne problemy z takim cachem to już inny temat).

Mieliście podobne systemy? Robiliście to w podobny sposób, czy może idę nie w tą stronę i powinienem pomyśleć o czymś zupełnie innym?

2

Może JWT w oparciu o role i przy routach w gatewayu sprawdzać czy może dobić do odpowiedniego endpointa?

0

Sprawdź sobie: https://www.openpolicyagent.org/ - można go zapiąć na routingu w traefiku albo envoy jak korzystasz z kubernetesa.
Darmową alternatywą jest też https://www.keycloak.org/

1

To zależy kiedy chcesz egzekwować te uprawnienia. Jeśli już na etapie przyjmowania requestów HTTP wiesz czy dla danego użytkownika możesz to obsłużyć lub nie, to można by to zrobić na poziomie jakiegoś API gateway'a tak jak już wspomniał kolega wyżej. Jeśli natomiast chodzi o bardziej zaawansowane sprawdzanie w ramach logiki biznesowej, to wtedy musisz oddelegować tą odpowiedzialność to poszczególnych serwisów.

Oczywiście do tego najlepiej nadaje się wykorzystanie JWT ponieważ takich token może mieć claimy zawierające role itp. określające uprawienia danego użytkownika. Wtedy sprawdzasz dany claim i po sprawie- wiesz czy możesz obsłużyć żądanie czy też nie. W przypadku każdego większego systemu najlepiej to wyabstrahować. Jak to zrobić zależy już od konkrtnej technologii, rzecz w tym żeby wystawić jakąś paczę (npm, NuGet, Maven itp) która będzie zawierała logikę weryfikującą token, oraz czy dany użytkownik (czyli pod spodem token) spełnia konkretne wymaganie, np. czy ma daną rolę (czyli claim z tą rolą).

Ewentualnie możesz mieć jakiś centralny serwis od takiej weryfikacji- albo własny albo gotowe rozwiązanie- ale to oznacza uderzanie po HTTP za każdym razem kiedy chcesz sprawdzić uprawienia użytkownika.

1 użytkowników online, w tym zalogowanych: 0, gości: 1