Xmpp Ejabberd-Ejabberd_auth_external:failure:103调用'时外部身份验证程序失败;检查密码';

Xmpp Ejabberd-Ejabberd_auth_external:failure:103调用'时外部身份验证程序失败;检查密码';,xmpp,ejabberd,ejabberd-module,ejabberd-auth,Xmpp,Ejabberd,Ejabberd Module,Ejabberd Auth,我已经有了一个具有身份验证密钥的用户模式,并希望通过它进行身份验证。我尝试通过sql实现身份验证,但由于模式的不同结构,我遇到了错误,所以我实现了外部身份验证方法。我的应用程序中使用的技术和操作系统包括: Node.JS Ejabberd作为XMPP服务器 MySQL数据库 反应本机(前端) 操作系统-Ubuntu 18.04 我实现了中提到的外部身份验证配置,并以php脚本为例。但是我在error.log中得到了下面提到的错误。在ejabberd.yml中,我完成了以下配置 主机配置:

我已经有了一个具有身份验证密钥的用户模式,并希望通过它进行身份验证。我尝试通过sql实现身份验证,但由于模式的不同结构,我遇到了错误,所以我实现了外部身份验证方法。我的应用程序中使用的技术和操作系统包括:

  • Node.JS
  • Ejabberd作为XMPP服务器
  • MySQL数据库
  • 反应本机(前端)
  • 操作系统-Ubuntu 18.04
我实现了中提到的外部身份验证配置,并以php脚本为例。但是我在error.log中得到了下面提到的错误。在ejabberd.yml中,我完成了以下配置

主机配置:
“example.org.co”:
验证方法:[外部]
extauth_程序:“/usr/local/etc/ejabberd/JabberAuth.class.php”
验证使用缓存:false

另外,是否有任何外部验证javascript脚本

下面是error.log和ejabberd.log,如下所述

错误日志

2019-03-19 07:19:16.814[错误] @ejabberd_auth_外部:失败:103外部身份验证 调用的“检查密码”时程序失败admin@example.org.co: 断开

ejabberd.log

2019-03-19 07:19:16.811[调试]@ejabberd_http:init:151 S: [{[],mod_http_api},{[],ejabberd_web_admin}]

2019-03-19 07:19:16.811[调试] @ejabberd_http:process_头:307(#端口)http 查询:“POST”

2019-03-19 07:19:16.811[调试] @ejabberd_http:process:394[,]个匹配项 []

2019-03-19 07:19:16.811[信息] @ejabberd_侦听器:接受:238()已接受的连接 ::ffff:ip->:ffff:ip

2019-03-19 07:19:16.814[信息] @mod_http_api:log:548api调用寄存器 [{,},{,},{,}] from::ffff:ip

2019-03-19 07:19:16.814[错误] @ejabberd_auth_外部:失败:103外部身份验证 调用的“检查密码”时程序失败admin@example.org.co: 断开

2019-03-19 07:19:16.814[调试] @mod_http_api:extract_auth:171无效的auth数据: {错误,无效的_auth}

如果您对本主题有任何帮助,我们将不胜感激。

1)您关于auth\u方法的配置看起来不错

2) 下面是我使用并升级的python脚本,用于对ejabberd进行外部身份验证

#/usr/bin/python
导入系统
从结构导入*
导入操作系统
def openAuth(参数):
(用户、服务器、密码)=参数
#实现与服务/数据库的交互
#返回真或假
返回真值
def openIsuser(参数):
(用户,服务器)=参数
#实现与服务/数据库的交互
#返回真或假
返回真值
def loop():
切换器={
“auth”:openAuth,
“isuser”:openIsuser,
“setpass”:lambda(无):真,
“tryregister”:lambda(无):False,
“removeuser”:lambda(无):False,
“removeuser3”:lambda(无):False,
}
数据=来自_ejabberd()
to_ejabberd(switcher.get(数据[0],lambda(无):False)(数据[1:]))
循环()
来自_ejabberd()的def:
输入长度=sys.stdin.read(2)
(尺寸,)=拆包('>h',输入长度)
返回sys.stdin.read(size.split)(“:”)
def至_ejabberd(结果):
如果结果为:
sys.stdout.write('\x00\x02\x00\x01')
其他:
sys.stdout.write('\x00\x02\x00\x00')
sys.stdout.flush()
如果名称=“\uuuuu main\uuuuuuuu”:
尝试:
循环()
除错误外:
通过
我没有创建与Ejabberd
的通信,从_Ejabberd()
到_Ejabberd()
,不幸的是无法找到源代码