Ejabberd - ejabberd_auth_external: сбой:103 Сбой программы внешней аутентификации при вызове 'check_password'
У меня уже есть схема пользователей с ключом аутентификации, и я хотел сделать аутентификацию через нее. Я пытался реализовать аутентификацию через sql, но из-за разной структуры моей схемы я получал ошибку и поэтому применил метод внешней аутентификации. Технологии и ОС, используемые в моем приложении:
- Node.js
- Ejabberd в качестве сервера XMPP
- База данных MySQL
- React-Native (Front-End)
- ОС - Ubuntu 18.04
Я реализовал конфигурацию внешней аутентификации, как указано в https://docs.ejabberd.im/admin/configuration/, и взял скрипт php https://www.ejabberd.im/files/efiles/check_mysql.php.txt В качестве примера. Но я получаю указанную ниже ошибку в error.log. В ejabberd.yml я сделал следующую конфигурацию.
...
host_config:
"Example.org.co":
auth_method: [внешний]
extauth_program: "/usr/local/etc/ejabberd/JabberAuth.class.php"
auth_use_cache: false...
Кроме того, есть ли какой-либо внешний сценарий аутентификации javascript?
Вот ошибки.log и ejabberd.log, как упомянуто ниже
журнал ошибок
2019-03-19 07:19:16.814 [ошибка] <0.524.0>@ejabberd_auth_external: сбой:103 Ошибка программы внешней аутентификации при вызове 'check_password' для admin@example.org.co: отключено
ejabberd.log
2019-03-19 07: 19: 16.811 [debug] <0.524.0>@ejabberd_http: init: 151 S: [{[<< "api" >>],mod_http_api},{[<< "admin" >> ], ejabberd_web_admin}]
2019-03-19 07: 19: 16,811 [debug] <0.524.0>@ejabberd_http:process_header:307 (#Port<0.13811>) http-запрос: 'POST' << "/ api / register" >>
2019-03-19 07:19:16.811 [debug] <0.524.0>@ejabberd_http:process:394 [<< "api" >>,<< "register" >>] соответствует [<< "api" >> ]
2019-03-19 07: 19: 16,811 [info] <0.364.0>@ejabberd_listener: принять:238 (<0.524.0>). Принятое соединение:: ffff: ip ->:: ffff: ip
2019-03-19 07: 19: 16,814 [info] <0.524.0>@mod_http_api:log:548 регистр вызовов API [{<< "user" >>,<< "test" >>},{<< " host ">>,<<" example.org.co ">>},{<<" password ">>,<<" test ">>}] from:: ffff: ip
2019-03-19 07:19:16.814 [ошибка] <0.524.0>@ejabberd_auth_external: сбой:103 Ошибка программы внешней аутентификации при вызове 'check_password' для admin@example.org.co: отключено
2019-03-19 07: 19: 16,814 [debug] <0.524.0>@mod_http_api:extract_auth:171 Неверные данные аутентификации: {error,invalid_auth}
Любая помощь по этой теме будет оценена.
1 ответ
1) Ваш конфиг об auth_method выглядит хорошо.
2) Вот скрипт на python, который я использовал и обновил для внешней аутентификации для ejabberd.
#!/usr/bin/python
import sys
from struct import *
import os
def openAuth(args):
(user, server, password) = args
# Implement your interactions with your service / database
# Return True or False
return True
def openIsuser(args):
(user, server) = args
# Implement your interactions with your service / database
# Return True or False
return True
def loop():
switcher = {
"auth": openAuth,
"isuser": openIsuser,
"setpass": lambda(none): True,
"tryregister": lambda(none): False,
"removeuser": lambda(none): False,
"removeuser3": lambda(none): False,
}
data = from_ejabberd()
to_ejabberd(switcher.get(data[0], lambda(none): False)(data[1:]))
loop()
def from_ejabberd():
input_length = sys.stdin.read(2)
(size,) = unpack('>h', input_length)
return sys.stdin.read(size).split(':')
def to_ejabberd(result):
if result:
sys.stdout.write('\x00\x02\x00\x01')
else:
sys.stdout.write('\x00\x02\x00\x00')
sys.stdout.flush()
if __name__ == "__main__":
try:
loop()
except error:
pass
Я не создал связь с Ejabberd from_ejabberd()
а также to_ejabberd()
и, к сожалению, не могу найти источники.