【问题标题】:"bad_auth is not a constant in org.jivesoftware.smack.sasl.SASLError" exception using Smack 4.1使用 Smack 4.1 的“bad_auth 不是 org.jivesoftware.smack.sasl.SASLError 中的常量”异常
【发布时间】:2015-05-19 16:24:46
【问题描述】:

相关问题: Initialization exception "NoClassDefFoundError: javax.naming.directory.InitialDirContext" when using Smack 4.1 on Android

我在我的 Android 应用程序中使用 Smack 4.1.1,但出现以下异常 -

05-19 21:38:31.141    8330-8803/test W/SASLError﹕ Could not transform string 'bad_auth' to SASLError
    java.lang.IllegalArgumentException: bad_auth is not a constant in org.jivesoftware.smack.sasl.SASLError
            at java.lang.Enum.valueOf(Enum.java:192)
            at org.jivesoftware.smack.sasl.SASLError.valueOf(SASLError.java:22)
            at org.jivesoftware.smack.sasl.SASLError.fromString(SASLError.java:46)
            at org.jivesoftware.smack.sasl.packet.SaslStreamElements$SASLFailure.<init>(SaslStreamElements.java:169)
            at org.jivesoftware.smack.util.PacketParserUtils.parseSASLFailure(PacketParserUtils.java:789)
            at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1032)
            at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$200(XMPPTCPConnection.java:937)
            at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:952)
            at java.lang.Thread.run(Thread.java:856)
05-19 21:38:31.221    8330-8766/test W/System.err﹕ org.jivesoftware.smack.sasl.SASLErrorException: SASLError using SCRAM-SHA-1: bad-auth
05-19 21:38:31.231    8330-8766/test W/System.err﹕ at org.jivesoftware.smack.SASLAuthentication.authenticationFailed(SASLAuthentication.java:365)
05-19 21:38:31.231    8330-8766/test W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1033)
05-19 21:38:31.231    8330-8766/test W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$200(XMPPTCPConnection.java:937)
05-19 21:38:31.231    8330-8766/test W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:952)
05-19 21:38:31.231    8330-8766/test W/System.err﹕ at java.lang.Thread.run(Thread.java:856)

这是我当前的登录代码 -

public void login(String username, String password) throws IOException, XMPPException, SmackException {

        XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
                .setUsernameAndPassword(username, password)
                .setHost(SERVICE_NAME)
                .setPort(5222)
                .setServiceName(SERVICE_NAME)
                .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                .build();


        mConnection = new XMPPTCPConnection(config);

        mConnection.connect();
        mConnection.login();

        mChatManager = ChatManager.getInstanceFor(mConnection);
        mChatManager.addChatListener(this);
    }

我尝试过使用普通 SASL 机制 -

SASLAuthentication.registerSASLMechanism(new SASLPlainMechanism());

也试过下面的代码

    SASLMechanism mechanism = new SASLDigestMD5Mechanism();
    SASLAuthentication.registerSASLMechanism(mechanism);
    SASLAuthentication.blacklistSASLMechanism("SCRAM-SHA-1");
    SASLAuthentication.unBlacklistSASLMechanism("DIGEST-MD5");

所有这些都不起作用。

我能够成功地在 iOS(使用 XMPPFramework)和 WPF(使用 S22)上使用相同的服务器。我也在 pidgin 中使用过它来测试。它在任何地方都可以正常工作,所以我确信我错过了在 smack 中进行身份验证的一些重要步骤。如何知道登录指定服务器的正确方式是什么?

【问题讨论】:

  • 你能发布你的这个sn-p的确切代码,包括try-block吗?
  • @y0da 我的实际代码非常复杂,跨越多个类,因为登录方法无法在主 UI 线程中调用。我不能发布所有内容。但我确信这是问题所在。
  • @noob 你找到解决方案了吗?遇到同样的问题...
  • @Opiatefuchs 那是因为一直输入错误的密码。后来我确实调试了代码,并在尝试更改服务器后发现了。验证部分的密码值不正确。我希望这会有所帮助。
  • @noob 你有什么解决办法吗??

标签: xmpp smack


【解决方案1】:
05-19 21:38:31.141    8330-8803/test W/SASLError﹕ Could not transform string 'bad_auth' to SASLError
    java.lang.IllegalArgumentException: bad_auth is not a constant in org.jivesoftware.smack.sasl.SASLError
            at java.lang.Enum.valueOf(Enum.java:192)

“bad_auth”不是根据RFC 6120 § 6.5. SASL Errors 定义的 SASL 错误。告诉使用过的 XMPP 服务器的供应商来解决这个问题。

【讨论】:

  • 这并不能解决问题。未定义的错误仍然是错误。我让服务器与其他框架一起工作。我能做些什么来让它使用 Smack 工作吗?我只有网络管理面板访问它。顺便说一句,如果这很重要,那就是 eJabberd。
  • 没有要解决的问题。无论哪种方式,您都会遇到异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多