токена в куках и в бд
Вот я записал в бд токен и в куку я тоже записал там 1==1 образно
Теперь проверка токена
func validateTokenCookie(w http.ResponseWriter, r *http.Request) bool {
// Получение токена из куки
cookie, err := r.Cookie("my_auth_token")
// Получение ключа для подписи токена
key := []byte("my_secret_key")
// Проверка подписи токена и извлечение его параметров
token, err := jwt.Parse(cookie.Value, func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("unexpected signing method")
}
return key, nil
})
// Проверка параметров токена
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
username, ok := claims["username"].(string)
password, ok := claims["password"].(string)
exp, ok := claims["exp"].(float64)
if !ok || !validateUserCredentials(username, password) {
return false
}
// Проверка времени действия токена
if time.Now().Unix() > int64(exp) {
return false
}
return true
} else {
return false
}
}
А вот теперь проверку нужно сделать в бд токен в куке == токен в бд ?
func validateUserCredentials(username, password string) bool {
// Проверка логина и пароля в вашей базе данных или в другом источнике
return username == "my_username" && password == "my_password"
}
Я вот не пойму мне получается известен username на момент проверки?
Все что я хочу чтобы у меня был username по которому я смогу пойти в базу и там посмотреть а есть такой пользователь
И почему то у меня в голове то что все записи надо выпарсить и только потом проверять?
Или в функции проверке мне нужно отправить запрос с паараметрами username и pass ?
А далее вернуть просто TRUE если такой пользователь нашелся ?
JWT просто подписывает данные, которые в открытом виде в нем лежат) в данные можно положить userid и только по нему грузить пользователя из базы, дополнительной проверки токена не нужно, как и хранить его где-то. Хранить даже опасно, потому что токен может быть валидным JWT после добавления пары посторонних символов в него клиентом)
ну я уже положил в данные username pass data_now ну в бд же все равно что то нужно хранить или тут уже код про то что в бд не нужно хранить ? Ну а где хранить тогда тот iser id чтобы делать сравнение ?
Айди в токене, больше в него пихать ничего не нужно. Вставь токен на jwt.io, убедишься, что все данные в нем видно. Это тупо base64
понял концепт положил пароль-засветил пароль Но что есть id который нужно положить в токен ?
Айди пользователя))
в бд ? автоинремент который ?
У вас какой-то неправильный JWT, вы его без подписи что ли используете?
Подпись != шифрование как бы
А можно пример подписанного jwt и пары символов, которые можно в него добавить, сохранив его валидность?
Можно, просто убираешь подпись из него и всё, правда я не уверен, что это будет JWT, вроде в нем подпись обязательна
В чате можно поискать, вот пример для всех любителей отзывать через черные списки https://t.me/gogolang/696438
так а что в таком случае мешает отзывать по jti, а не по токену целиком
Туториалы на медиуме, бро
Дык ты намеренно вводишь в заблуждение, ты не меняешь payload, дописывая в него новые данные, ты просто пользуешься косяками base64, чтобы провести атаку другого рода
Обсуждают сегодня