【问题标题】:What does Ejabberd authentication do?Ejabberd 身份验证有什么作用?
【发布时间】:2022-01-27 19:23:01
【问题描述】:

这里有这些外部脚本:https://docs.ejabberd.im/admin/configuration/authentication/#external-script

除了说“将您的配置文件指向您编写的脚本的位置”和示例列表之外,哪些文档为零。但是没有关于您需要在脚本中做什么的信息。我查看了一些示例,似乎它期望某些输出为stdout。但我不知道是什么!此外,身份验证是否适用于用户创建之类的事情?我的目标是能够拥有一个带有 Django 身份验证的 Django 项目,这将允许我登录到我编写的多个不同程序。使用外部脚本时,身份验证到底在做什么?如果我只是简单地接受所有用户并制作一个批准所有内容和所有人的脚本会发生什么?如果我允许使用无效 URL 的用户怎么办?例如,他们尝试使用不在ejabberd.yml 文件中的主机登录?如果ejabberd.yml 文件只有 localhost 和 myexamplesite.com 作为主机并且我对来自 Pizzahut.com 的用户进行身份验证怎么办? ejabberd 如何处理这个问题? authentication 对 ejabberd 到底意味着什么?

在不修改源代码的情况下,我想做的事情是否可行?

【问题讨论】:

    标签: ejabberd ejabberd-auth


    【解决方案1】:

    这里有这些外部脚本: https://docs.ejabberd.im/admin/configuration/authentication/#external-script 但是没有关于您需要在脚本中做什么的信息。

    在那个页面有一段说:

    关于 ejabberd 和脚本之间的接口的详细信息,请参见 Developers Internals 部分:External

    您是否点击了该链接?它并没有解决你的任何疑问?

    身份验证在使用外部脚本时到底在做什么?

    ejabberd_auth_external 运行 extauth,它将相应的查询发送到您的 extauth 脚本,并期待回复是/否。

    如果我只是简单地接受所有用户并制作一个批准所有内容和所有人的脚本会发生什么?

    那么,所有通过 ejabberd 要求的注册和登录尝试都会成功。事实上,ejabberd 中包含一个示例 extauth 脚本,可以做到这一点,请参阅 https://github.com/processone/ejabberd/blob/master/examples/extauth/check_pass_null.pl

    如果我允许使用无效 url 的用户怎么办?

    我不明白 XMPP 场景中 HTTP URL 的上下文是什么。

    您的意思是无效的 JID,例如 username@username@server 吗? ejabberd 将在流程到达您的 extauth 脚本之前很久就拒绝使用此类 JID 进行帐户注册或登录尝试

    例如,他们尝试使用不在 ejabberd.yml 文件中的主机登录?

    同样,ejabberd 将在流程到达您的 extauth 脚本之前很久就拒绝使用此类 JID 进行帐户注册或登录尝试

    如果 ejabberd.yml 文件只有 localhost 和 myexamplesite.com 作为主机,而我对来自 Pizzahut.com 的用户进行身份验证,该怎么办?

    客户端可能会尝试进行身份验证,但 ejabberd 会立即以流错误 host-unknown 拒绝它;你的 extauth 脚本甚至没有被调用。尝试使用 check_pass_null.pl,extauth 脚本接受所有内容,但 ejabberd 不接受。

    ejabberd 如何处理这个问题?

    如前所述,在阅读https://docs.ejabberd.im/developer/guide/#external 的文档后,这对我来说很有意义

    身份验证对 ejabberd 到底意味着什么?

    你到底是什么意思?

    在不修改源代码的情况下,我想做的事情是否可行?

    如果您有自定义数据库,只要您编写使用自定义数据库的 extauth 脚本,就可以使用该功能。

    顺便说一下,一旦你编写了你的​​脚本,如果它是全新的(而不是对现有脚本的小定制),我想你会在某个地方发布它,这样其他 Django 管理员就可以从你的工作中受益,对吧?

    警察局:https://github.com/processone/ejabberd/discussions/3760

    【讨论】:

    • 如果用户使用外部身份验证脚本,并且他们尝试使用尚未在 ejabberd 中注册的帐户登录,但该帐户存在于他们的身份验证服务中,会发生什么情况? ejabberd 会创建它吗?
    • 很明显,您并没有像我建议的那样一开始就尝试使用示例脚本自己尝试。您的问题包括我已经澄清的概念错误。事实上,这个新问题意味着你甚至不明白我在最初的回复中所说的话。
    • 不,我还没有测试过。我在周末为我的设置编写了一个身份验证脚本。我还没有时间实际测试任何东西。我知道你说 ejabberd 会做一些定期检查。我不认为你的回答回答了我之前的问题。您说外部脚本需要使用我的自定义数据库。但是,这并不能回答以下问题:“如果有人登录并且您正在使用身份验证脚本并且该帐户在您的数据库中不存在......会发生什么?”我知道 ejabberd 有它自己的内部数据库。使用身份验证脚本时是否禁用此功能?
    • "当您使用身份验证脚本时是否禁用此功能?"如果您告诉 ejabberd 使用您的外部脚本作为 auth_method,那么 ejabberd 将使用外部,而不是内部,不是 SQL,不是 LDAP,而不是其他东西!
    • 似乎如果您使用外部身份验证脚本接受密码,它将保存您使用的第一个密码作为该用户的密码。这是真的吗?
    猜你喜欢
    • 1970-01-01
    • 2020-12-25
    • 2017-01-26
    • 2016-04-22
    • 2011-04-13
    • 2016-10-01
    • 2016-06-09
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多