Aktywne Wpisy

Najśmieszniejsi są jego fani broniący go pod tym wpisem, którzy wychwalają jego "wiedzę i umiejętności". Umówmy się, wiedzy to on żadnej w tym nie miał. Przyfarciło mu wtedy tak, jak hazardziście trzy siódemki na maszynie, tylko z większą stawką. Wiedzę to może mieć Warren Buffet, który przez 70 lat robi konserwatywnie to samo. Cała reszta to hazardziści. Też byłem hazardzistą, zaczęło się od kuponów u buka za 2zł, później przeszło przez pokera
źródło: image
Pobierz
Ukiss +75





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
1. User z UI prawdopodobnie nie będzie uderzał do poszczególnych serwisów samodzielnie a bardziej przez API gateway, wtedy mając na API gateway listę endpointow możesz zapiąc autoryzację w jednym miejscu
2. W sumie fakt. Chociaż na sieciach się nie znam, to zapewne dałoby się zrobić taką sieć między różnymi VPS-ami? Tylko co wtedy z szyfrowaniem?
Tak BTW: Czego lepiej używam w pythonie? Flash czy Django?
gdzie odradzają? zdecydowana wiekszosc obecnie stoi na jwt bym powiedzial
Myślę że odpowiedzi na pytania dostaniesz w dokumentacji tych 2 projektów, jeśli znasz Pythona to będzie raczej przyjemna nauka :).
Właśnie tak korzysta się z JWT w mikroserwisach.
2. Użył bym tego z czego łatwiej się korzysta twój framework pewnie ma jakieś
1: Błędnym założeniem, jest robienie logowania i "wysyłanie żadania z nazwą usera i hasłem" do SSO, bo w takim układzie masz logowanie i po stronie aplikacji i SSO. gdy anonimowy user ląduje w aplikacji >> przekierowujesz go do sso wraz z przekazaniem adresu aplikacji, czyli na jaki ma zostać przekierowany spowrotem >> tam następuje logowanie z formularza podpisanego tokenem csrf >> po poprawnym logowaniu user zostaje przekierowany spowrotem do
Ogólnie to myslałem o mikroserwisach żeby rozdzielać projekt na mniejsze podprojekty. Np o ile dane o produktach lepiej mi trzymać w bazie relacyjnej, o tyle dla zamówień mógłby też być mysql, jednak tutaj lepiej spisałoby się trzymanie tego w JSON, więc albo pola JSON w bazie mysql xD
plus taki że pracy więcej jest;)
@lukasj: Monolit będzie prostszy, pod warunkiem że będzie dobrze zmodularyzowany. Pojęcie którego szukasz to "modular monolith". Zamiast 4 mikroserwisów będziesz miał 4 moduły, które komunikują się za pomocą publicznego API każdego z nich (przy czym nie jest to komunikacja wymagająca sieci, a odbywająca się
PostgreSQL się bawiłem troche, ale lepiej znam MySQL. Jakie polecisz narzędzie do zarządzania PostgreSQL? Coś typu PHPMyAdmin?
Ad.1.
JWT jest szeroko wykorzystywany, ma jednak swoje wady. Protokół nie wymusza sprawdzenia integralności danych, zatem jak system jest kiepsko napisany, to wystarczy usunąć podpis i każdy może dowolnie zmienić treść komunikatu.
JWT ma też drugą bardzo istotną wadę: wystawca może go anulować/expirować i nikt o tym nie będzie wiedział. Przykład: admin wystawia JWT z wszelkimi prawami, odchodzi z firmy. Nie ma jak powiedzieć serwisom, że ten token nie