如何调试 Stanza.js 身份验证?

Posted

技术标签:

【中文标题】如何调试 Stanza.js 身份验证?【英文标题】:How can I debug Stanza.js Authentication? 【发布时间】:2021-02-17 21:21:34 【问题描述】:

我目前正在尝试使用 Stanza.js 设置 XMPP 客户端 https://github.com/legastero/stanza

我有一个工作服务器,它接受来自 Gajim 客户端的连接,但是当尝试使用 Stanza.js client.connect 方法进行连接时,服务器打开了一个 websocket 连接,但没有用于身份验证的事件,或者会话启动时不会触发。

服务器日志不显示任何明文密码验证尝试。

我如何才能真正查看任何节日志来调试此问题?

import * as XMPP from 'stanza';

const config =  credentials: jid: '[jid]', password: '[password]', transports: websocket: '[socketurl]', bosh: false ;
const client = XMPP.createClient(config)
client.on('raw:*', (data) => 
    console.log('data', data)
)

client.connect();

onconnect 事件确实会触发,但这是唯一触发的事件。 有没有一种方法可以手动触发文档中未说明的身份验证?

【问题讨论】:

【参考方案1】:

原始事件处理程序应该能够为您提供所需的日志记录 - 但在您的代码示例中,您调用它不正确。请尝试以下操作。

client.on('raw:*', (direction, data) => 
    console.log(direction, data)
)

作为参考,docs 状态是原始数据事件处理程序的回调

(direction: incoming | outgoing, data: string) => void

所以您要查找的数据在第二个参数中,但您的回调只有一个参数(只是方向字符串“传入”或“传出”,尽管您已将参数命名为“数据”)。

一旦您修复了日志记录,我希望您会看到流立即终止并出现流错误。你的配置不正确。 jid 和密码应该是***字段。查看节示例代码。对于 createClient 的选项 - 没有凭据对象。请尝试以下操作:

const config =  jid: '[jid]', password: '[password]', transports: websocket: '[socketurl]', bosh: false ;

由于您的用户名和密码隐藏在不正确的凭据对象后面,因此 stanza.io 看不到它们,您实际上是在尝试在没有用户名和密码的情况下进行连接,因此甚至没有尝试进行身份验证。

【讨论】:

【参考方案2】:

这个问题恰好是由配置问题引起的。

jabber 服务器正在使用普通身份验证。 在客户端定义文件中添加额外的行会有所帮助。 还添加 client.on('*', console.log) 提供更完整的服务器日志。

client.sasl.disable('X-OAUTH2')

【讨论】:

【参考方案3】:

我如何才能真正查看任何节日志来调试此问题?

如果连接未加密,您可以使用类似的工具嗅探 XMPP 流量

sudo tcpflow -i lo -Cg port 5222

您可以强制 ejabberd 不允许加密,这样您的客户端就不会使用它,并且您可以读取网络流量。

或者,您可以在 ejabbed.yml 中设置此项,但可能会生成大量日志消息:

loglevel: debug

【讨论】:

以上是关于如何调试 Stanza.js 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

我已经在 firebase 项目设置调试以及 playconsole 上添加了指纹,但是电话身份验证不起作用如何解决这个问题?

如何防止 ASP.NET 记录身份验证失败?

通过基本身份验证对声纳运行器进行身份验证

使用 docker 和 nginx 在 localhost 中调试第三方身份验证

IBM Worklight - 调试 Worklight 身份验证器和/或登录模块

无法通过 Git for Windows 使用/调试 SSH 身份验证