Сетевая библиотека mongoose: как получить аутентифицированного пользователя? - PullRequest
0 голосов
/ 11 марта 2019

Я использую сетевую библиотеку Cesanta mongoose для развертывания встроенного сервера. Я включил http_auth, используя дайджест. Как я могу узнать, кто вошел в систему?

1 Ответ

1 голос
/ 12 марта 2019

Ваш вопрос несколько расплывчатый, поэтому я собираюсь предположить, что вы в основном заботитесь об отслеживании уникальных пользователей в течение сеанса, будь то через IP-адрес, через учетные данные аутентификации или с помощью других средств.

Проверьте API-ссылку для mg_http_server.h

https://cesanta.com/docs/http/api-server.html

В частности, я думаю, что функция "mg_http_parse_header2" - это то, что вы ищете. Вы должны иметь возможность использовать эту функцию для анализа полученного заголовка ответа HTTP для нужного поля.

Пример кода, предоставленный для mg_http_parse_header2, - почти то, что вы просите:

char user_buf[20];
char user = user_buf;
struct mg_str hdr = mg_get_http_header(hm, "Authorization");
mg_http_parse_header2(hdr, "username", &user, sizeof(user_buf));
// ... do something useful with user
if (user != user_buf) {
  free(user);
}

В их примере показано, как вы можете извлечь информацию о пользователе из поля Авторизация в заголовке HTTP. В Википедии есть список стандартных полей запроса, если вы хотите адаптировать пример для своего собственного приложения:

https://en.wikipedia.org/wiki/List_of_HTTP_header_fields

Например, поле «Переадресовано» предоставляет информацию для идентификации исходного IP-адреса клиента. Поле «Авторизация» содержит имя пользователя и пароль в легко восстанавливаемом формате, поэтому имейте в виду, что HTTPS обеспечивает дополнительный уровень безопасности, тогда как простой HTTP представляет потенциальную уязвимость.

...