通过SASL绑定LDAP后如何可靠获取用户名?
通过LDAPv3 API获取SASL绑定后的用户名方法
利用LDAP标准API直接获取身份信息
完成ldap_sasl_bind_s绑定后,可使用LDAPv3内置的ldap_whoami_sAPI获取当前绑定的身份,无需依赖平台特定工具:char* whoami_result = NULL; int rc = ldap_whoami_s(ldap_conn, NULL, &whoami_result, NULL); if (rc == LDAP_SUCCESS) { // 结果常见两种格式:"dn:<用户完整DN>" 或 "u:<短用户名>" if (strncmp(whoami_result, "dn:", 3) == 0) { char* user_dn = whoami_result + 3; // 可选:进一步查询DN对应的用户名属性(如AD的samAccountName、OpenLDAP的uid) LDAPMessage* entry = NULL; rc = ldap_search_s(ldap_conn, user_dn, LDAP_SCOPE_BASE, "(objectClass=*)", (char*[]){"samAccountName", NULL}, 0, &entry); if (rc == LDAP_SUCCESS) { char** usernames = ldap_get_values(ldap_conn, ldap_first_entry(ldap_conn, entry), "samAccountName"); if (usernames && usernames[0]) { // usernames[0]即为目标用户名 } ldap_value_free(usernames); } ldap_msgfree(entry); } else if (strncmp(whoami_result, "u:", 2) == 0) { char* username = whoami_result + 2; // 直接使用短用户名 } ldap_memfree(whoami_result); }跨平台兼容性补充
该方法在Windows和Linux环境下完全通用:- Linux端无需额外注册Kerberos服务器应用,只要服务器能通过GSSAPI完成SASL绑定,
ldap_whoami_s即可返回有效身份 - 相比Windows下的SSPI特定API,LDAP标准API逻辑统一,大幅减少跨平台代码差异
- Linux端无需额外注册Kerberos服务器应用,只要服务器能通过GSSAPI完成SASL绑定,
内容的提问来源于stack exchange,提问作者Filip Konvička
相关产品推荐
相关产品推荐

