Java smackxmpp:Can';t登录到openfire服务器:";SASLErrorException:使用摘要的SASLError-MD5:未授权;

Java smackxmpp:Can';t登录到openfire服务器:";SASLErrorException:使用摘要的SASLError-MD5:未授权;,java,xmpp,smack,Java,Xmpp,Smack,我正在尝试创建一个基本连接并登录到我安装的Openfire服务器。我通过Openfire web管理界面创建的用户数据库中有以下用户: User: user Password: 12345678 当连接在我的sout中返回true时,我可以很好地连接到服务器。问题是,当它尝试登录时,出现以下错误: org.jivesoftware.smack.sasl.SASLErrorException: SASLError using DIGEST-MD5: not-authorized 我有以下代码:

我正在尝试创建一个基本连接并登录到我安装的Openfire服务器。我通过Openfire web管理界面创建的用户数据库中有以下用户:

User: user
Password: 12345678
当连接在我的sout中返回true时,我可以很好地连接到服务器。问题是,当它尝试登录时,出现以下错误:

org.jivesoftware.smack.sasl.SASLErrorException: SASLError using DIGEST-MD5: not-authorized
我有以下代码:

private XMPPConnection connection;

public void connect(String serverIP) {
    try {

        System.setProperty("smack.debugEnabled", "true");
        ConnectionConfiguration config = new ConnectionConfiguration(serverIP, 5223);
        config.setDebuggerEnabled(true);
        config.setSocketFactory(new DummySSLSocketFactory());    
        config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
        config.setCompressionEnabled(true);
        connection = new XMPPTCPConnection(config);
        connection.connect();

        System.out.println("Connected: " + connection.isConnected());
        connection.login("user", "12345678");
        System.out.println("Logged in: " + connection.isAuthenticated());

    } catch (SmackException | IOException | XMPPException ex) {
        ex.printStackTrace();
    }
}

public static void main(String[] args) {
    connectionHandler test = new connectionHandler();
    test.connect("localhost");
}
如果有人能纠正我的错误,我将非常感激

我也尝试过用户名,比如电子邮件

user@localhost.com
or
user@localhost

我终于找到了答案。问题(甚至可能不是问题)在于服务器配置中没有设置身份验证方法,默认情况下允许所有方法。java中的第一个选择似乎是DIGEST-MD5,这是导致错误的原因。为了解决这个问题,我添加了:

<sasl>
    <mechs> PLAIN </mechs>
</sasl>

平原
在服务器的config文件夹中找到openfire.xml的最后一个结束标记之前。这也可以在名为
sasl.mechs
的列的属性数据库表的
中更改

希望这对将来的某个人(可能是我)有所帮助

注意:如果不使用SSL(默认情况下为端口5223),这是不安全的

使用DIGEST-MD5的SASLError:未授权


这很可能是因为您没有在
连接配置中配置正确的XMPP域(/service name)。DIGEST-MD5不仅在用户名或密码错误时会失败,而且在使用错误的XMPP域时也会失败。

这是正确的实现。我用的是smack 4.1和open fire 3.10.1。已经被卡住了几个小时。让我们投票来拯救某人吧!只有当您意识到SASL平原的安全含义时,才应该使用它。@Flow同意。在现实世界的例子中,您应该使用更加密的方法。我选择SASL平原的原因是因为这是一个没有外部网络访问的内部应用程序。