4

我尝试连接 Xmpp 服务器,但出现异常

使用机制 DIGEST-MD5 登录异常 SASL 身份验证失败

我使用此代码,任何人都可以帮助我,或代码

  try {
        if (xmppConnection == null) {
            ConnectionConfiguration config = new ConnectionConfiguration(
                    SERVER_HOST, SERVER_PORT, SERVICE_NAME);
            xmppConnection = new XMPPConnection(config);
            System.out.println("xmppConnection"+xmppConnection);
        }

        if (!xmppConnection.isConnected()) {
            xmppConnection.connect();
            System.out.println("Connecting");
        }

        System.out.println("facebook id get xmpp "+username);

        if (!xmppConnection.isAuthenticated()) {
            xmppConnection.login(username, "123");
            System.out.println("User is authenticated ");

        }
        Presence presence = new Presence(Presence.Type.available);
        xmppConnection.sendPacket(presence);
                 } catch (Exception e) {
        System.out.println("Login exception "+e);
        e.printStackTrace();
    } 
4

3 回答 3

6

在 Openfire 配置中,它是 machinename.domain.com

这种 SASL 机制还使用 Xmpp 域名进行身份验证,而不仅仅是用户名和密码。这就是身份验证失败的原因。

表示您的用户名和密码必须如下:

用户名:abc111@domain.com (whatever your domain name)

密码:abcabc111

有关更多详细信息,请查看此对话

于 2013-05-23T05:55:47.213 回答
1

我在我的使用下面的代码,它在这里工作正常..

try {   
    ConnectionConfiguration connConfig = new ConnectionConfiguration("HOST_IP", Integer.parseInt("PORT_NO"));
    XMPPConnection connection = new XMPPConnection(connConfig);
    connection.connect();

    try {
        // Login

        connection.login("USER_NAME", "PASSWORD");

        // Set the status to available

        Presence presence = new Presence(Presence.Type.available);
        connection.sendPacket(presence);
        xmppClient.setConnection(connection);
    } catch (XMPPException ex) {
        Log.w("XMPPClient", "[SettingsDialog] Failed to log in as " + username);
        Log.w("XMPPClient", ex.toString());
        xmppClient.setConnection(null);
    }
} catch (XMPPException ex) {
    Log.w("XMPPClient", "[SettingsDialog] Failed to connect to " + connection.getHost());
    Log.w("XMPPClient", ex.toString());
    xmppClient.setConnection(null);
}

而且我还添加了smack.jar文件。

请检查下面的帖子,我想它可能会帮助你..

https://stackoverflow.com/a/6659403/1849482

许多用户在登录时遇到此错误。检查以下链接以获取更多信息..

http://community.igniterealtime.org/thread/44219

http://code.google.com/p/asmack/issues/detail?id=33

于 2013-04-04T05:59:42.790 回答
0

asmack 使用 Novell 的 Open LDAP DigestMD5SaslClient.java,它不支持 SASL 的反斜杠 ('\') 和双引号 ('"') 的转义。根据 XEP-0106,用户名“user@company.com”应该是编码为“user\040company.com”。完全符合SAS​​L规范,它应该编码为“user\\040company.com”,但asmack没有。如果你的XMPP服务器(例如Openfire)使用Java的SASL实现,它会有不匹配。Smack 3.x 使用 Java 的 SASL 实现,所以它工作正常。Smack 4.x 应该替换 asmack,但我不知道 Smack 4.x 是使用 Novell 还是 Java SASL 实现。

顺便说一句,这个问题也存在于 iOS xmppframework 中。

如果你对我的修复感兴趣,我会把它贴在某个地方。

这是带有转义引号字符串的修改后的DigestMD5SaslClient.java的链接。

于 2015-10-31T05:53:33.120 回答