首页 > 解决方案 > 猫鼬网络库:如何获得经过身份验证的用户?

问题描述

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

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

标签: c++cmongoose-web-server

解决方案


您的问题有些模糊,因此我假设您主要关心在整个会话期间跟踪唯一用户,无论是通过 IP 地址、身份验证凭据还是通过其他方式。

查看 mg_http_server.h 的 API 参考

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

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

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


推荐阅读