Jak ludzie zarządzają uwierzytelnianiem w Go?
Dla tych, którzy budują interfejsy API RESTful i aplikacje front-end JS W Go, jak zarządzać uwierzytelnianiem? Czy używasz konkretnych bibliotek lub technik?
Jestem zaskoczony, że tak mało o tym dyskutuje. Mam na myśli następujące odpowiedzi i staram się unikać rozwijania własnej implementacji:
Formularz uwierzytelnienia w ASP.Net
Czy każdy koduje swoje własne rozwiązanie, osobno?
6 answers
To pytanie ma mnóstwo poglądów-i ma popularny znaczek pytań - więc wiem, że jest wiele utajonego zainteresowania tym tematem, a wiele osób zadaje dokładnie to samo i nie znajduje odpowiedzi na interwiki.
Większość dostępnych informacji wynika z tekstowego odpowiednika falistej ręki, pozostawionego jako " ćwiczenie dla czytelnika." ;)
Jednak w końcu znalazłem jeden konkretny przykład, (hojnie) dostarczony przez członka mailingu golang-nuts Lista:
Https://groups.google.com/forum/#! msg / golang-nuts / GE7a_5C5kbA / fdSnH41pOPYJ
Zapewnia to sugerowany schemat i implementację po stronie serwera jako podstawę uwierzytelniania niestandardowego. Kod po stronie klienta nadal zależy od Ciebie.
(mam nadzieję, że autor postu to widzi: dzięki!)
Fragment (i sformatowany):
"proponowałbym coś w stylu następującego wzoru:
create table User (
ID int primary key identity(1,1),
Username text,
FullName text,
PasswordHash text,
PasswordSalt text,
IsDisabled bool
)
create table UserSession (
SessionKey text primary key,
UserID int not null, -- Could have a hard "references User"
LoginTime <time type> not null,
LastSeenTime <time type> not null
)
- gdy użytkownik loguje się na Twoją stronę poprzez Napisz pod TLS, określ, czy hasło jest poprawne.
- następnie wydaj losowy klucz sesji, powiedzmy 50 lub więcej znaków Crypto rand i rzeczy w bezpiecznym pliku Cookie.
- Dodaj ten klucz sesji do tabeli UserSession.
- następnie, gdy zobaczysz tego użytkownika ponownie, najpierw kliknij tabelę UserSession, aby zobaczyć, czy klucz SessionKey jest tam z prawidłowym LoginTime i LastSeenTime, a Użytkownik nie jest usuwany. Można go zaprojektować tak, aby timer automatycznie usuwał stare wiersze w Użytkowników."
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-14 21:51:20
Innym możliwym rozwiązaniem jest Authboss, niedawno ogłoszony na liście mailingowej .
(nie próbowałem korzystać z tej biblioteki.)
Zobacz również najlepszy sposób, aby webapp z auth użytkownika?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-11 16:04:16
Użyłbyś middleware do uwierzytelniania.
Możesz spróbować go-http-auth dla uwierzytelniania podstawowego i digest oraz gomniauth dla OAuth2.
Ale jak uwierzytelnić naprawdę zależy od aplikacji.
Uwierzytelnianie wprowadza stan / kontekst do twojego http.Opiekunów i ostatnio dyskutowano na ten temat.
Dobrze znanymi rozwiązaniami problemu kontekstu są / context i Google context opisane tutaj .
Zrobiłem bardziej ogólne rozwiązanie bez potrzeby globalnego stanu w go-on/wrap, które może być używane razem lub bez dwóch pozostałych i ładnie integruje się z kontekstowym wolnym oprogramowaniem pośredniczącym.
Wraphttpauth zapewnia integrację go-http-auth z go-on/wrap.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-10 17:43:36
Kolejnym pakietem open source do obsługi uwierzytelniania za pomocą Plików cookie jest httpauth.
(written by me, by the way)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-19 23:17:34
Odpowiedź na to w 2018 roku. Sugeruję użycie JWT (JSON Web Token). Odpowiedź, którą zaznaczyłeś rozwiązane, ma wadę, czyli podróż, którą zrobił z przodu (użytkownik) iz tyłu (serwer/db). Co gorsza, jeśli użytkownik robił częste żądania wymagające auth, spowoduje to rozdęte żądanie Z / do serwera i bazy danych. Aby rozwiązać ten problem, użyj JWT, które przechowują token W user end, który może być używany przez użytkownika w każdej chwili, gdy potrzebuje dostępu / żądania. Nie ma potrzeby podróżowania do bazy danych i przetwarzania serwera, aby sprawdzić ważność tokenu, trwa krótko.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-05 17:16:52
Spójrz na Labstack Echo - zawija uwierzytelnianie dla RESTful API i aplikacji frontend do oprogramowania pośredniczącego, którego możesz użyć do ochrony określonych tras API.
Skonfigurowanie podstawowego uwierzytelniania jest tak proste, jak utworzenie nowego podproutera dla trasy /admin
:
e.Group("/admin").Use(middleware.BasicAuth(func(username, password string, c echo.Context) (bool, error) {
if username == "joe" && password == "secret" {
return true, nil
}
return false, nil
}))
Zobacz wszystkie opcje uwierzytelniania oprogramowania pośredniego Labstack tutaj.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-30 18:15:06