我正在构建一个 IRC 客户端,目前正在尝试添加 SASL 支持。我已经让它工作得很好(身份验证工作),但是,有一个恼人的“故障”:
据我了解,SASL 请求必须在注册之前完成,如下所示:
if (sasl) {
send("CAP REQ :sasl");
}
send("NICK: " + nick);
send("USER ....");
现在烦人的小事情是 SASL 请求导致 IRC 服务器发回 ERR_NOTREGISTERED (451) 回复。现在,如果启用了 SASL,我当然可以忽略第一个 451 回复,但这看起来有点令人讨厌。我在这里遗漏了什么吗?
最佳答案
嗯,IRC 上的 SASL 是基于 Client CAPability Negotiation .
根据此规范,您在开始时发送CAP LS
,之后发送USER
和NICK
。如果您在 motd/motd 丢失之前收到 CAP
响应,则服务器支持 CAP。检查 SASL 是否在支持的扩展列表中,并请求它。
如果您首先缺少 motd/motd 结尾,则服务器不支持 CAP,因此不支持 SASL。
关于IRC 和 SASL 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18315285/