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() и, к сожалению, не могу найти источники.

Другие вопросы по тегам