4

Xmppサーバーに接続しようとしていますが、例外が発生しています

ログイン例外 SASL 認証がメカニズム DIGEST-MD5 を使用して失敗しました

私はこのコードを使用しています、誰かが私を助けることができますか、またはコード

  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

0

asmack は Novell の Open LDAP DigestMD5SaslClient.java を使用しますが、これは SASL のバックスラッシュ ('\') と二重引用符 ('"') のエスケープをサポートしていません。XEP-0106 によると、ユーザー名 "user@company.com" は"user\040company.com" としてエンコードされます. SASL 仕様に完全に準拠しているため、"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 に答える