使用android系统机制DIGEST-MD5 asmack登录异常SASL身份验证失败(Login

2019-08-19 09:18发布

我米试图与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();
    } 

Answer 1:

在的Openfire配置它是machinename.domain.com

这SASL机制也使用XMPP域名进行认证,不仅用户名和密码。 这就是为什么认证失败。

意味着你的用户名和密码必须是这样的:

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

密码: abcabc111

为更详细检查此谈话 。



Answer 2:

我使用下面的代码在我,它的做工精细在这里..

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



Answer 3:

asmack使用Novell的Open LDAP DigestMD5SaslClient.java不支持反斜杠(“\”)和双引号(逃逸““”)的SASL。根据XEP-0106,用户名‘user@company.com’应该是编码为“用户\ 040company.com”。与SASL规格完全符合,应编码为“用户\\ 040company.com”,但asmack没有。如果您的XMPP服务器(例如Openfire的)使用Java的SASL实现,它将有一个不匹配。啪3.x中使用Java的SASL实现,所以它工作正常。啪4.x版应该更换asmack,但如果啪4.x版使用Novell或Java SASL实现我不知道。

顺便说一句,在iOS的xmppframework存在这个问题为好。

如果你有兴趣在我的修正,我会在某个地方张贴。

这里是链接到修订DigestMD5SaslClient.java与逃逸引号的字符串。



文章来源: Login exception SASL authentication failed using mechanism DIGEST-MD5 asmack in android