Allen Helton
Allen HeltonSoftware Engineering Manager @ Tyler Technologies

Korzyści z mikrofrontendu oraz jak go zabezpieczyć

Sprawdź, czym jest mikrofrontend, jakie płyną z niego korzyści oraz jak go dobrze zabezpieczyć.
9.07.20215 min
Korzyści z mikrofrontendu oraz jak go zabezpieczyć

Mikroserwisy są świetne. Pojedyncza odpowiedzialność, niezależne API, które są dopasowane do poszczególnych domen itd. Duża aplikacja webowa może składać się z dziesiątek, a nawet setek i tysięcy takich mikroserwisów. 

Mogą się one skalować niezależnie od siebie, dawać teamom tworzącym aplikacje możliwości kodowania w najbardziej pasującym języku i pozostawiać jak najmniejsze szkody, jeśli coś się popsuje (co oznacza, że cała aplikacja będzie dalej działać, jeśli jeden mikroserwis się popsuje). 

Wszyscy wielcy gracze już tak robią. Uber ma około 2 200 mikroserwisów, Netflix około 700, a Amazon - no powiedzmy po prostu, że mają ich bardzo dużo. 

A wiedzieliście, że pomysł ten na również zastosowanie też na frontendzie? Micro to nie tylko backendowe API. 

Czym jest mikrofrontend? 

Mikrofrontend trzyma się tych samych zasad, co mikroserwisy, i daje te same korzyści - dzieli wielki monolit UI na mniejsze, oddzielone od siebie i niezależne części.  


Prosta architektura mikro frontendowa 


Po wypuszczeniu pierwszej wersji jest spora szansa, że UI będzie się zmieniać o wiele częściej niż backend. Niezależnie od rozmiaru takich iteracji, przejdziesz przez więcej cykli, co sprawi, że UX będzie lepszy. 

I tak powinno być!

Czy dzielenie frontendu na mniejsze części nie ma zatem większego sensu?

Nie chcę też, żebyś myślał, że tworzenie aplikacji przy pomocy mikro frontendów sprawi, że UX będzie chaotyczny - nie jest to naszym celem. Jest to raczej coś, czego chcemy uniknąć. Dobrze by było, aby Twoja aplikacja była spójna, pomimo małych i szybkich zmian. 

Jeśli chcesz wejść w continous delivery, to również polecam mikro frontendy. Dostarczanie małych aktualizacji to coś, o co dokładnie chodzi w architekturze - a mikro frontendy Ci to umożliwiają.  

Role-Based Applications

Jeśli zdecydujesz się na mikro frontend, to oznacza to, że otworzyłeś się na wzorzec, który bardzo ułatwi Ci życie: Role-Based Applications.


Co to takiego?

Jest to system złożony z mikrofrontendów i API, które mają konkretne ograniczenia bezpieczeństwa. Spójrzmy na przykład. 

Wyobraź sobie, że tworzysz forum dla miłośników selera: The Stalk Stalker. Diagram architektury takiego forum wygląda następująco: 


Na forum masz użytkowników z różnie zdefiniowanymi uprawnieniami. Każdy taki zestaw można określić mianem roli. Masz więc 4 role w The Stalk Stalker: 

  • Użytkownik: wyświetla i tworzy posty 
  • Moderator: wyświetla, edytuje, tworzy i usuwa posty 
  • Admin: wyświetla, edytuje, tworzy i usuwa posty oraz zarządza moderatorami
  • Użytkownik zbanowany: nie może wykonywać żadnej akcji


Każda osoba, która loguje się na Twoją apkę ma przypisaną rolę. 3 mikro frontendy jasno określają, kto co może robić. Ograniczasz więc dostęp do poszczególnych serwisów, by był zgodny z rolami. 


Każdy, kto ma przypisaną odpowiednią rolę, ma również dostęp do odpowiadającej jej części aplikacji. Co więcej, każdy, kto nie ma przypisanej roli, nie ma dostępu do mikro frontendu. 

Jeśli Twoje API jest publiczne, czyli tak jak powinno być, to uprawnienia muszą też być wymuszone na poziomie dostępu do API. 

Zabezpieczanie mikrofrontendów

Istnieje wiele sposobów na zabezpieczenie aplikacji webowej i jej API. Jeśli chodzi o Role-Based Applications, to rola musi być gdzieś w systemie uwierzytelniania - może to być oddzielny nagłówek, albo jakiś ukryty check. Tak czy siak, trzeba sprawdzić, czy użytkownik ma odpowiednie uprawnienia. 

Musisz sprawdzać w swoim mikro frontendzie, czy dany użytkownik ma przypisaną rolę do aplikacji, zanim pojawi się jakikolwiek content. Aplikacja jest mała i skoncentrowana na jednej rzeczy, a więc nic nie stoi na przeszkodzie, aby wprowadzić dane określonej roli do systemu na stałe. Tak powinien wyglądać przepływ:
 

Login > Lookup user role > User has role? > Unauthorized/OK


API zrobi coś podobnego, chociaż nie powinno być ono powiązane ze zdarzeniem logowania. Użytkownik będzie już zalogowany, zanim wykonasz jakichkolwiek wywołanie API. Upewnij się więc, że masz informacje identyfikujące użytkownika w tokenie autoryzacji. OAuth 2.0 daje Ci kontekst, którego potrzebujesz do unikalnej identyfikacji użytkownika za pomocą JWT (JSON Web Token)

Dodawanie nagłówka roli do żądania API pozwoli Ci na proste dodanie testów bezpieczeństwa do aplikacji. Dokładne i wyczerpujące testy są konieczne, gdy tworzymy aplikacje. Złośliwi użytkownicy będą chcieli obejść zabezpieczenia systemu i to właśnie dlatego chcemy mieć pewność, że Twój mikro frontend i API są skonfigurowane, jak należy. 

Oto moja kolekcja Postman oraz środowisko w moim repozytorium GitHubowym, które automatycznie przetestuje Twoje API, jeśli chodzi o luki w zabezpieczeniach. Wykorzystaj to, aby upewnić się, że mikro frontendy i API są zaprojektowane tak, jak trzeba. 

Dostęp do mikrofrontendów

Nie ma czegoś takiego, jak dobry i zły sposób, jeśli chodzi o dostęp do mikrofrontendu. Ale są bardzo złe sposoby. Dwa najpowszechniejsze sposoby na danie Twoim użytkownikom dostępu do mikrofrontendów to subdomeny i ścieżki. 

Oba te wzorce są bardzo popularne - a sposób, w jaki coś zaimplementować zależy tylko od Ciebie. 


Jeżeli ustawienia DNS-ów przychodzi Ci z łatwością, to subdomeny mogą być rozwiązaniem dla Ciebie.

Jeżeli nie chcesz tworzyć routingu na poziomie DNS, to skonfigurowanie ścieżek będzie lepsze. Tak czy siak, Twoi użytkownicy muszą mieć niezakłócone niczym UX - to jest Twój główny cel. 

Mikro podsumowanie

Jeżeli tworzysz mikroserwisy na poziomie API, to nie ma też sensu pozostawać przy monolitycznym frontendzie.

Rozbij to na mniejsze części, rozwijaj je niezależnie od siebie i wprowadzaj małe, stopniowe zmiany. Nie chcesz dokonywać ponownego deploymentu całego frontendu, bo popełniłeś błąd w etykiecie. 

Zabezpieczenia wbuduj bezpośrednio w swoją aplikację. Zdefiniuj role i przypisz im odpowiednie uprawnienia. Dobrze to wszystko zabezpiecz. 

Twoim celem, jako Software Developera, Menedżera, Product Ownera, QA czy Biznes Analityka, jest tworzenie jak najlepszego oprogramowania dla Twoich klientów. Musisz zapewnić im jak najlepsze doświadczenie poprzez zmniejszanie czasu przestojów i dbanie o bezpieczeństwo. 

Branża software’owa nieustannie rozwija się w szybkim tempie i nic nie zwiastuje, aby miała zwolnić. Oczekiwania dotyczące zwinności, UX oraz bezpieczeństwa ciągle rosną, oraz ewoluują, więc w miarę swoich możliwości, staraj się za tym wszystkim nadążyć. Powodzenia!


Oryginał tekstu w języku angielskim możesz przeczytać tutaj

<p>Loading...</p>