Ejabberd 身份验证有什么作用?

What does Ejabberd authentication do?

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

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

我想做的事情可以不修改源代码吗?

There's these external scripts here: https://docs.ejabberd.im/admin/configuration/authentication/#external-script But there's no information on what you need to be doing in your script.

在该页面中有一个段落说:

The details on the interface between ejabberd and the script are described in the Developers Internals section: External.

你听懂了吗link?而且还没有解决你的疑惑?

What exactly is the authentication doing when it uses the external script?

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

What happens if I just simply accept all users and make a script that approves everything and everyone?

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

What if I allow users with invalid urls?

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

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

For example, they try to login with a host that isn't in the ejabberd.yml file?

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

What if the ejabberd.yml file only has localhost and myexamplesite.com as a host and I authenticate a user from pizzahut.com?

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

How does ejabberd handle this?

如前所述,在阅读 https://docs.ejabberd.im/developer/guide/#external

上的文档后,这对我来说很有意义

What exactly does authentication mean to ejabberd?

你到底是什么意思?

Is what I want to do possible, without modification of the sourcecode?

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

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

PD: https://github.com/processone/ejabberd/discussions/3760