使用mod_cdr_mongodb插入FreeSWITCH CDR时认证失败求助
我尝试用mod_cdr_mongodb将FreeSWITCH的CDR(呼叫详细记录)插入MongoDB。未设置用户名和密码时,模块可正常加载,通话挂断后CDR也能成功插入MongoDB集合;但设置用户名和密码后,加载模块时出现认证失败错误:
2023-05-10 04:39:42.328309 78.30% [ERR] mod_cdr_mongodb.c:123 mongo_cmd_authenticate: authentication failed
2023-05-10 04:39:42.328309 78.30% [CRIT] switch_loadable_module.c:1755 Error Loading module /usr/local/freeswitch/mod/mod_cdr_mongodb.so
但用相同的用户名和密码在终端可正常连接MongoDB并手动插入数据,唯独使用mod_cdr_mongodb模块时出现认证错误,恳请协助解决。
我的配置文件如下:
<configuration name="cdr_mongodb.conf" description="MongoDB CDR logger"> <settings> <param name="host" value="127.0.0.1"/> <param name="port" value="27017"/> <param name="namespace" value="DB.cdrs"/> <param name="username" value="MONGO_USERNAME"/> <param name="password" value="MONGO_PASSWORD"/> <param name="log-b-leg" value="false"/> </settings> </configuration>
指定认证数据库
mod_cdr_mongodb默认可能使用admin库进行认证,但你的用户可能创建在配置里的业务库(比如DB)下。可在配置中添加auth-db参数明确指定认证数据库:<param name="auth-db" value="DB"/>如果用户是在
admin库创建的,就将auth-db的值设为admin。检查认证机制兼容性
老版本的mod_cdr_mongodb可能只支持SCRAM-SHA-1或旧的MONGODB-CR认证机制,而新版MongoDB默认使用SCRAM-SHA-256。可通过以下步骤处理:- 在MongoShell中执行
db.getUser("MONGO_USERNAME"),查看用户的mechanisms字段确认当前认证机制。 - 若模块不支持当前机制,要么修改用户的认证机制为模块兼容类型,要么升级mod_cdr_mongodb到支持新机制的版本。
- 在MongoShell中执行
处理密码中的特殊字符
如果密码包含&、<、>等XML特殊字符,直接写入配置会被XML解析器转义,导致密码错误。可将密码用CDATA包裹:<param name="password"><![CDATA[MONGO_PASSWORD]]></param>验证版本兼容性
若MongoDB为4.0+版本,而mod_cdr_mongodb版本过旧,可能存在兼容性问题。尝试升级FreeSWITCH的mod_cdr_mongodb模块到对应版本,确保两者版本匹配。检查MongoDB绑定地址
确认MongoDB的mongod.conf中net.bindIp设置为127.0.0.1(或包含FreeSWITCH所在IP),避免因绑定限制导致连接认证失败。
内容的提问来源于stack exchange,提问作者HP371

