猫鼬网络库:如何获得经过身份验证的用户?

mongoose networking library: how to get authenticated user?

我正在使用 Cesanta 猫鼬网络库来部署嵌入式服务器。 我启用了 http_auth 使用摘要。

我怎么知道哪个用户登录了?

你的问题有点含糊,所以我假设你主要关心在整个 session 中跟踪唯一用户,无论是通过 IP 地址、通过身份验证凭据还是通过其他一些方式。

查看 API 参考 mg_http_server.h

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

具体来说,我认为函数 "mg_http_parse_header2" 就是您要查找的内容。您应该能够使用此函数来解析收到的 HTTP 响应 header 以获得所需的字段。

为 "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 header 的授权字段中提取用户信息。如果您想根据自己的应用程序定制示例,维基百科有一个标准请求字段列表:

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

例如,"Forwarded" 字段提供了识别客户端原始 IP 地址的信息。 "Authorization" 字段以易于恢复的格式包含用户名和密码,因此请记住,HTTPS 提供了额外的安全层,而纯 HTTP 存在潜在漏洞。