Как реализовать хранение токена в Web-App на GoLang?

Есть полностью готовый сайт и апишка. API на FastAPI (python), БД Postgre, сам сайт на Go.

У него готов весь функционал, кроме функционала отображения полей. Ну например есть профиль пользователя и там должно отображаться имя пользователя.

Сделать это не сложно, но есть проблема.

Ради интереса, я решил не использовать JWT, OAuth и другие стандартные типы авторизации. Я замутил собственный токен. Доступ к командам предоставляются только по нему. При вызове реквеста /auth из API ответом будет сам токен.

Как и куда можно сохранить этот токен, в рамках одной сессий пользователя? Чтобы Go всегда знал, куда обратиться чтобы получить токен и я мог регулярно его использовать?
  • Вопрос задан
  • 280 просмотров
Решения вопроса 1
Morugar
@Morugar Автор вопроса
Цитируя Максим Федоров :

Пришел логиниться юзер, вы:
- в хэндлере пошли в АПИ, получили токен ..
- создали сессию (например в памяти или редисе)
- в куку сохранили токен юзера и отдали response

- юзер пошел в кабинет, пришел к вам на бекенд гошки, вы првоерили сессию, если нет в сессии нет юзера — отправили ошибку6 если есть значение — взяли токен из сессии и пошли в АПИ за данными

import (
    "fmt"
    "net/http"

    "github.com/gorilla/sessions"
)

var (
    // key must be 16, 24 or 32 bytes long (AES-128, AES-192 or AES-256)
    key = []byte("super-secret-key")
    store = sessions.NewCookieStore(key)
)

func secret(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "cookie-name")

    // Check if user is authenticated
    if auth, ok := session.Values["authenticated"].(bool); !ok || !auth {
        http.Error(w, "Forbidden", http.StatusForbidden)
        return
    }

    // Тут из сессии получили токен — пошли в АПИ за данными
    fmt.Fprintln(w, "The cake is a lie!")
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы