W przypadku osób budujących interfejsy API RESTful i aplikacje front-endowe JS w Go, jak zarządzasz uwierzytelnianiem? Czy korzystasz z konkretnych bibliotek lub technik?
Jestem zaskoczony, że tak mało dyskusji na ten temat. Pamiętam o następujących odpowiedziach i staram się unikać opracowywania własnej implementacji:
Formularz uwierzytelnienia w ASP.Net
Czy każdy koduje własne rozwiązanie osobno?
authentication
go
SexxLuthor
źródło
źródło
Odpowiedzi:
To pytanie zyskuje mnóstwo wyświetleń - i ma znaczek Popularnego pytania - więc wiem, że zainteresowanie tym tematem jest bardzo ukryte, a wiele osób pyta dokładnie o to samo i nie znajduje odpowiedzi na Interwebs.
Większość dostępnych informacji skutkuje tekstowym odpowiednikiem falistej ręki, pozostawionej jako „ćwiczenie dla czytelnika”. ;)
W końcu jednak znalazłem jeden konkretny przykład (hojnie) podany przez członka listy mailingowej golang-nuts:
https://groups.google.com/forum/#!msg/golang-nuts/GE7a_5C5kbA/fdSnH41pOPYJ
Zapewnia to sugerowany schemat i implementację po stronie serwera jako podstawę do niestandardowego uwierzytelnienia. Kod po stronie klienta nadal zależy od Ciebie.
(Mam nadzieję, że autor postu zobaczy to: Dzięki!)
Fragment (i sformatowany):
„Sugerowałbym coś w rodzaju następującego projektu:
źródło
Innym możliwym rozwiązaniem jest Authboss , niedawno ogłoszony na liście mailingowej .
(Nie próbowałem używać tej biblioteki).
Zobacz także Najlepszy sposób na utworzenie aplikacji internetowej z autoryzacją użytkownika?
źródło
Do uwierzytelnienia użyłbyś oprogramowania pośredniego.
Możesz wypróbować go-http-auth dla podstawowego i podsumowania uwierzytelniania i gomniauth dla OAuth2.
Ale sposób uwierzytelnienia zależy od Twojej aplikacji.
Uwierzytelnianie wprowadza stan / kontekst do twoich http.Handlerów i ostatnio dyskutowano o tym.
Dobrze znanymi rozwiązaniami problemu kontekstu są opisane tutaj goryl / kontekst i kontekst google .
Zrobiłem bardziej ogólne rozwiązanie bez potrzeby globalnego stanu w go-on / wrap, którego można używać razem lub bez dwóch pozostałych i ładnie integruje się z bez kontekstowym oprogramowaniem pośrednim.
wraphttpauth zapewnia integrację go-http-auth z go-on / wrap.
źródło
go-http-auth
lubgomniauth
oba z nich?Odpowiadając na to w 2018 roku. Sugeruję użycie JWT (JSON Web Token). Odpowiedź oznaczona jako rozwiązana ma tę wadę, że jest to podróż, którą wykonał z przodu (użytkownik) i z powrotem (serwer / db). Co gorsza, jeśli użytkownik często wysyła żądanie wymagające uwierzytelnienia, spowoduje to nadmierne żądanie z / do serwera i bazy danych. Aby rozwiązać ten problem, użyj JWT, który przechowuje token na końcu użytkownika, z którego użytkownik może korzystać w dowolnym momencie, gdy potrzebuje dostępu / żądania. Nie ma potrzeby podróży do bazy danych i przetwarzania serwera, aby sprawdzić ważność tokena zajmuje krótko.
źródło
Innym pakietem typu open source do obsługi uwierzytelniania za pomocą plików cookie jest httpauth .
(tak przy okazji, napisane przeze mnie)
źródło
Szczerze mówiąc, istnieje wiele metod i technik uwierzytelniania, które można zamontować w aplikacji i które zależą od logiki biznesowej i wymagań aplikacji.
Na przykład Oauth2, LDAP, lokalne uwierzytelnianie itp.
Moja odpowiedź zakłada, że szukasz lokalnego uwierzytelnienia, co oznacza, że zarządzasz tożsamościami użytkownika w aplikacji. Serwer musi udostępniać zestaw zewnętrznych interfejsów API, umożliwiających użytkownikom i administratorom zarządzanie kontami oraz sposób, w jaki chcą się identyfikować na serwerze, aby uzyskać wiarygodną komunikację. w końcu utworzysz tabelę DB zawierającą informacje o użytkowniku. gdzie hasło jest mieszane ze względów bezpieczeństwa Zobacz Jak przechowywać hasło w bazie danych
przyjmijmy wymagania aplikacji do uwierzytelnienia użytkowników na podstawie jednej z następujących metod:
podstawowe uwierzytelnianie (nazwa użytkownika, hasło):
Ta metoda autoryzacji zależy od zestawu danych uwierzytelniających użytkownika w nagłówku autoryzacji zakodowanym w base64 i zdefiniowanym w rfc7617 , w zasadzie, gdy aplikacja otrzyma żądanie użytkownika, dekoduje autoryzację i ponownie hashuje hasło, aby porównać je w DB skrót, jeśli jest zgodny, użytkownik uwierzytelniony, w przeciwnym razie zwraca kod stanu 401 użytkownikowi.
uwierzytelnianie oparte na certyfikatach:
ta metoda uwierzytelniania zależy od certyfikatu cyfrowego w celu identyfikacji użytkownika i jest znana jako uwierzytelnianie x509, więc gdy aplikacja odbierze żądanie użytkownika, odczytuje certyfikat klienta i weryfikuje, czy jest on zgodny z podanym certyfikatem głównym CA do aplikacji.
token na okaziciela:
ta metoda uwierzytelniania zależy od krótkoterminowych tokenów dostępu, token na okaziciela jest szyfrowanym ciągiem, zwykle generowanym przez serwer w odpowiedzi na żądanie logowania. więc gdy aplikacja otrzyma żądanie użytkownika, odczyta autoryzację i zweryfikuje token w celu uwierzytelnienia użytkownika.
Jednak polecam go-guardian dla biblioteki uwierzytelniania, która robi to poprzez rozszerzalny zestaw metod uwierzytelniania zwanych strategiami. w zasadzie Go-Guardian nie montuje tras ani nie zakłada żadnego konkretnego schematu bazy danych, co maksymalizuje elastyczność i umożliwia podejmowanie decyzji przez programistę.
Utworzenie uwierzytelniającego go-guardian jest proste.
Oto pełny przykład powyższych metod.
Stosowanie:
Możesz włączyć wiele metod uwierzytelniania jednocześnie. Zwykle powinieneś użyć co najmniej dwóch metod
źródło
Spójrz na Labstack Echo - otacza uwierzytelnianie dla interfejsów API RESTful i aplikacji frontendowych w oprogramowaniu pośrednim, którego można używać do ochrony określonych tras API.
Na przykład skonfigurowanie podstawowego uwierzytelnienia jest tak proste, jak utworzenie nowego podrzędu dla
/admin
trasy:Zobacz wszystkie opcje uwierzytelniania oprogramowania pośredniego Labstack tutaj.
źródło