Wpis z mikrobloga

Siema mirki programiści! ( ͡° ͜ʖ ͡°)

Chciałbym się trochę podszkolić w pewnej rzeczy - aby zacząć robić bardziej modułowe aplikacje, a nie monolity. Zacząłbym od backendu. Czytałem trochę o architekturze mikroserwisów - wydaje się to ciekawę. Mógłbym np rozdzielić hipotetyczną aplikację dajmy na to - na 4 mniejsze serwisy: autoryzacja userów, produkty, zamówienia, płatności. I kilka pytań:

1) Jak wygląda sprawa autoryzacji? Np do mikroserwisu wysyłam żadanie z nazwą usera i hasłem - wtedy "loguje" mnie do aplikacji, ale dalej jak się komunikować? Do tej pory robiłem tak, że nadawany był unikalny token UUID i miałem abstrakcyjny kontroler w Javie z którego dziedziczyłem, który sprawdzał sobie zawsze w bazie danych, czy token jest poprawny i nie wygasł - minusem było oczywiście to, że trzeba było się odwoływać do bazy danych co chwila.

Słyszałem o tokenach JWT - jednak odradzają je jako mechanizm takiej "sesji". Więc w sumie po co ich używać? Tak to przekazałbym w nim dane typu: userID, username, userPermissions, expTime itd - wtedy wiem jakie user ma ID, jaką nazwę (gdyby było to potrzebne), jakie uprawnienia i kiedy token JWT wygasa. Jednak skoro odradzane są jako mechanizm sesji, to nie widzę chyba sensu w ich użyciu?

Mógłbym zamiast JWT wrócić do tego rozwiązania o którym pisałem - generuje sobie UUID w jakimś kontrolerze podczas logowania, i za każdym razem z innych serwisów odpytuje serwis autoryzacji sprawdzając poprawność tokena UUID. Tutaj można zastosować np cache, żeby zapamiętywało taki token na na przykład 5-10 minut - taka poprawa wydajności.

2. Skoro już jestesmy przy autoryzacji - w jaki sposób autoryzować zapytania między serwisami? Przesyłać jakiś nagłówek z kluczem? Czy może jakiś inny mechanizm, który dawałby radę? Może szyfrowanie RSA lub AES?

A może autoryzować je tokenem użytkownika? Czyli skoro serwis zamówień musi pobrać info z serwisu produktów, to może po prostu wysyłać token, który otrzymwał serwis zamówień od usera? I nim autoryzować zapytanie do serwisu produktów?

3. Gdzie mogę znaleźć jakieś materiały by coś sie nauczyć na temat budowy takich aplikacji które są mikroserwisami i jak to wszystko połączyć? Jakieś słowa kluczowe? Najlepiej Python, Java, a ostatecznie może być nawet PHP.

#programista15k #java #python #php #mikroserwisy #programowanie #webdev #serwery
  • 23
  • Odpowiedz
@draxgar: Kolejnym minusem JWT jest to że na froncie trzymany jest w jakiś localStorage'ach, sessionStorage'ach innymi słowy w miejscach dostępnych z poziomu javascriptu co exposuje nas na XSS attack. Dlatego jeśli robisz apkę bankową to raczej chcesz użyć autoryzacji opartej na cookiesach Secure, HttpOnly, SameSite.Strict. Ewentualnie jeśli potrzebujesz JWT do dostępu do zewnętrznych serwisów to można zastosować BFF pattern gdzie BFF wystawia cookie i przetrzymuje tokeny po stronie serwera których używa
  • Odpowiedz