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?

Author: Community, 2014-08-09

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."
 98
Author: SexxLuthor,
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?

 16
Author: SexxLuthor,
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.

 13
Author: metakeule,
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)

 6
Author: Cameron Little,
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.

 5
Author: mfathirirhas,
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.

 0
Author: Adil B,
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