Принимать и отправлять куки с клиентом Go?

Я хочу, чтобы мое приложение Go проходило аутентификацию на веб-сайте, а затем использовало полученный файл cookie для доступа к безопасным местоположениям. Следующие примеры curl иллюстрируют именно то, что я пытаюсь сделать:

Авторизуйтесь на сайте через x-www-form-urlencoded и сохранить куки. Данные автоматически кодируются:

curl 'https://www.example.com/login' \
    --cookie-jar cookies.txt \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data 'user=USER NAME&pass=PASS'

Теперь куки-файл аутентификации сохраняется в cookies.txt и я просто отправляю это для доступа к странице, требующей входа в систему:

curl 'https://www.example.com/profile' \
    --cookie cookies.txt

Я не хочу хранить куки на диске в моем приложении, только в памяти, чтобы я мог использовать их при необходимости.

У кого-нибудь есть пример того, как этого можно достичь в Go?

1 ответ

Для golang вы можете добавить cookie к запросу, вы также можете получить cookie с помощью этой функции после выполнения веб-запроса.

Вы обнаружите, что подход Golang очень похож на подход Java. убедитесь, что вы находитесь внутри своего обработчика входа в систему. вы устанавливаете cookie только с помощью SetCoookie функция

myCookie := http.Cookie{
    Name: "cookie Name",
    Value: "cookieValue",
  }

  http.SetCookie(w, &myCookie)

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

httpOnly: true

этот флаг не имеет ничего общего с HTTPS/HTTP. это означает только запрещение скриптов, только HTTP-запросы для предотвращения атак межсайтового скриптинга (XSS). вы сохраняете файл cookie на стороне клиента, затем при необходимости вызываете файл cookie и проверяете, является ли он правильным файлом cookie и правильным ли клиентом вы его отправляете. этот подход можно реализовать, используя:

cookie, err := r.Cookie("appointment")
checkErr(err)

Теперь расшифруйте куки. проверить это. Делай с ним все, что хочешь. затем верните свой ответ клиенту, если это правильный клиент или нет. надеюсь, что это поможет

Другие вопросы по тегам