如何调试 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 上添加了指纹,但是电话身份验证不起作用如何解决这个问题?
使用 docker 和 nginx 在 localhost 中调试第三方身份验证