Smack XMPP:无法登录到 openfire 服务器:“SASLErrorException: SASLError using DIGEST-MD5: not-authorized”
Posted
技术标签:
【中文标题】Smack XMPP:无法登录到 openfire 服务器:“SASLErrorException: SASLError using DIGEST-MD5: not-authorized”【英文标题】:Smack XMPP: Can't login to openfire server: "SASLErrorException: SASLError using DIGEST-MD5: not-authorized" 【发布时间】:2015-03-19 17:19:27 【问题描述】:我正在尝试创建一个基本连接并登录到我已安装的 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
【问题讨论】:
【参考方案1】:我终于找到了答案。问题(甚至可能不是问题)是未在服务器配置中设置身份验证方法,并且默认情况下允许所有方法。在 java 中选择的第一个似乎是导致错误的 DIGEST-MD5。为了解决这个问题,我添加了:
<sasl>
<mechs> PLAIN </mechs>
</sasl>
在服务器的配置文件夹中找到的 openfire.xml 的最后一个结束标记之前。这也可以在ofproperty
数据库表中为名为@987654323@ 的列更改。
希望这对将来的某人(可能是我)有所帮助。
附:如果不使用 SSL(默认为 5223 端口),这是不安全的
【讨论】:
这是正确的实现。我正在使用 smack 4.1 和 open fire 3.10.1 。已经卡了几个小时。让我们投票来拯救某人! 只有在了解 SASL PLAIN 的安全隐患时才应使用它。 @Flow 同意了。在现实世界的示例中,您绝对应该使用更加密的方法。我选择 SASL PLAIN 的原因是因为这是一个内部应用程序,没有外部网络访问权限。【参考方案2】:SASLError using DIGEST-MD5: not-authorized
这很可能是因为您没有在 ConnectionConfiguration
中配置正确的 XMPP 域(/服务名称)。 DIGEST-MD5 不仅会在用户名或密码错误的情况下失败,而且在使用错误的 XMPP 域时也会失败。
【讨论】:
以上是关于Smack XMPP:无法登录到 openfire 服务器:“SASLErrorException: SASLError using DIGEST-MD5: not-authorized”的主要内容,如果未能解决你的问题,请参考以下文章
使用 Openfire 服务器和 XMPP(SMACK)客户端的 Android 聊天应用程序 [关闭]
使用 xmpp + smack + openfire 在 android 中阻止用户
Android基于XMPP Smack及Openfire学习笔记