web-dev-qa-db-ja.com

PLAINを使用したSASLError:未承認

アプリをaSmackからSmack 4.1.1に移行しようとしています。ただし、aSmackを使用しているときにSmackを使用すると、同じサーバーとログインの詳細を使用できません。

これがaSmackでの私の古いログインコードです。

void startConnect(boolean sslFlag) throws XMPPException, SmackException, IOException {
        ConnectionConfiguration connectionConfig =
                new ConnectionConfiguration(Host, Integer.parseInt(PORT), SERVICE);
        connectionConfig.setDebuggerEnabled(true);
        connectionConfig.setCompressionEnabled(false);

        if (sslFlag)
            SASLAuthentication.supportSASLMechanism("PLAIN", 0);

        XMPPConnection connection = new XMPPTCPConnection(connectionConfig);

            connection.connect();
            connection.login(mUserName, mUserPassword, getResource());

            // Set status to online / available
            Presence presence = new Presence(Presence.Type.available);
            connection.sendPacket(presence);
            setConnection(connection);
    }

私もSmackで同様の方法でコードを使用しようとしています-

public void init() {
        SmackConfiguration.DEBUG = true;
        XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
                .setHost(SERVICE_NAME)
                .setPort(5222)
                .setServiceName(SERVICE_NAME)
                .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                .setDebuggerEnabled(true)
                .build();
        mConnection = new XMPPTCPConnection(config);

//I have tried with blacklisting and unblacklisting all three mechanism.
        //SASLMechanism mechanism = new SASLPlainMechanism(); //This didn't help
        //SASLAuthentication.registerSASLMechanism(mechanism);
        SASLAuthentication.blacklistSASLMechanism("SCRAM-SHA-1");
        SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5");
        SASLAuthentication.unBlacklistSASLMechanism("PLAIN"); 
        try {
            mConnection.connect();
            return;
        } catch (SmackException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMPPException e) {
            e.printStackTrace();
        }
        mConnection = null;
    }

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

        if(mConnection==null || !mConnection.isConnected()){
            init();
            if(mConnection==null){
                throw new IOException();
            }
        }
        mConnection.login(username/*+"@"+SERVICE_NAME*/, password); //I have tried both the method by adding @Domain part and without it.

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

ここに私が得ている例外があります-

05-21 21:22:29.782  19536-23179/test W/System.err﹕ org.jivesoftware.smack.sasl.SASLErrorException: SASLError using PLAIN: not-authorized
05-21 21:22:29.782  19536-23179/test W/System.err﹕ at org.jivesoftware.smack.SASLAuthentication.authenticationFailed(SASLAuthentication.Java:365)
05-21 21:22:29.792  19536-23179/test W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.Java:1033)
05-21 21:22:29.792  19536-23179/test W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$200(XMPPTCPConnection.Java:937)
05-21 21:22:29.792  19536-23179/test W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.Java:952)
05-21 21:22:29.792  19536-23179/test W/System.err﹕ at Java.lang.Thread.run(Thread.Java:856)

この例外は、SCRAMおよびDIGEST-MD5でも同じです。名前を変更するだけです。

これは私がサーバーから取得しているものです-

05-21 21:22:29.512  19536-23189/test D/SMACK﹕ SENT (0): <stream:stream xmlns='Jabber:client' to='xmpp.example.com' xmlns:stream='http://etherx.Jabber.org/streams' version='1.0' xml:lang='en'>
05-21 21:22:29.642  19536-23190/test D/SMACK﹕ RECV (0): <?xml version='1.0'?><stream:stream xmlns='Jabber:client' xmlns:stream='http://etherx.Jabber.org/streams' id='214326363' from='xmpp.example.com' version='1.0' xml:lang='en'><stream:features><compression xmlns='http://Jabber.org/features/compress'><method>zlib</method></compression><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>SCRAM-SHA-1</mechanism><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms><c xmlns='http://Jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='hX7OB6oTZugjNIFHZvd95k5UYzc='/><register xmlns='http://Jabber.org/features/iq-register'/></stream:features>
05-21 21:22:29.652  19536-23189/test D/SMACK﹕ SENT (0): <auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>ADEwMDAAMTAwMA==</auth>
05-21 21:22:29.782  19536-23190/test D/SMACK﹕ RECV (0): <failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><not-authorized/></failure>

ここの問題は何でしょうか?私は3つのメカニズムPLAINDIGEST-MD5、およびデフォルトのSCRAM-SHA-1をすべて試しました。私はそれにドメイン名を追加してもしなくても試しました。ユーザー名とパスワードを構成に追加し、ログイン方法で直接追加して試してみました。

私は次のエラーを与える必要なセキュリティモードでも試しました-

05-21 21:27:53.658  25643-26009/test D/SMACK﹕ SENT (0): <stream:stream xmlns='Jabber:client' to='xmpp.example.com' xmlns:stream='http://etherx.Jabber.org/streams' version='1.0' xml:lang='en'>
05-21 21:27:53.788  25643-26010/test D/SMACK﹕ RECV (0): <?xml version='1.0'?><stream:stream xmlns='Jabber:client' xmlns:stream='http://etherx.Jabber.org/streams' id='4179863647' from='xmpp.example.com' version='1.0' xml:lang='en'><stream:features><compression xmlns='http://Jabber.org/features/compress'><method>zlib</method></compression><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>SCRAM-SHA-1</mechanism><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms><c xmlns='http://Jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='hX7OB6oTZugjNIFHZvd95k5UYzc='/><register xmlns='http://Jabber.org/features/iq-register'/></stream:features>
05-21 21:27:54.229  25643-26009/test D/SMACK﹕ SENT (0): <auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>ADEwMDAAMTAwMA==</auth>
05-21 21:27:59.264  25643-25970/test W/System.err﹕ org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 5000ms (~5s). Used filter: No filter used or filter was 'null'.
05-21 21:27:59.454  25643-26010/test W/AbstractXMPPConnection﹕ Connection closed with error
    org.jivesoftware.smack.SmackException$SecurityRequiredByClientException: SSL/TLS required by client but not supported by server
            at org.jivesoftware.smack.tcp.XMPPTCPConnection.afterFeaturesReceived(XMPPTCPConnection.Java:898)
            at org.jivesoftware.smack.AbstractXMPPConnection.parseFeatures(AbstractXMPPConnection.Java:1367)
            at org.jivesoftware.smack.tcp.XMPPTCPConnection.access$800(XMPPTCPConnection.Java:139)
            at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.Java:998)
            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-21 21:27:59.494  25643-25970/test W/System.err﹕ at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.Java:250)
05-21 21:27:59.494  25643-25970/test W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection.loginNonAnonymously(XMPPTCPConnection.Java:365)
05-21 21:27:59.524  25643-25970/test W/System.err﹕ at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.Java:452)
05-21 21:27:59.544  25643-25970/test W/System.err﹕ at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.Java:427)
05-21 21:27:59.574  25643-25970/test W/System.err﹕ at test.Managers.XMPPManager.login(XMPPManager.Java:84)
05-21 21:27:59.594  25643-25970/test W/System.err﹕ at test.API.LoginAPI.callAPI(LoginAPI.Java:31)
05-21 21:27:59.604  25643-25970/test W/System.err﹕ at test.API.BaseAPI$XMPPTask.doInBackground(BaseAPI.Java:70)
05-21 21:27:59.624  25643-25647/test D/dalvikvm﹕ GC_CONCURRENT freed 1558K, 17% free 30564K/36743K, paused 13ms+32ms, total 111ms
05-21 21:27:59.624  25643-25970/test W/System.err﹕ at test.API.BaseAPI$XMPPTask.doInBackground(BaseAPI.Java:45)
05-21 21:27:59.624  25643-25970/test W/System.err﹕ at Android.os.AsyncTask$2.call(AsyncTask.Java:287)
05-21 21:27:59.624  25643-25970/test W/System.err﹕ at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:305)
05-21 21:27:59.664  25643-25970/test W/System.err﹕ at Java.util.concurrent.FutureTask.run(FutureTask.Java:137)
05-21 21:27:59.664  25643-25970/test W/System.err﹕ at Android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.Java:230)
05-21 21:27:59.664  25643-25970/test W/System.err﹕ at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1076)
05-21 21:27:59.664  25643-25970/test W/System.err﹕ at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:569)
05-21 21:27:59.664  25643-25970/test W/System.err﹕ at Java.lang.Thread.run(Thread.Java:856)

PS:
Smack 4.1.1のソリューションが必要です。私のコードはすでにaSmackで正常に動作しています。Smackでコードをアップグレードするために必要です。もうはっきりしていると思います。

12
noob

わかりました、それはむしろばかげた間違いでした。現在のコードは完全に問題ありません。パスワードの代わりにユーザー名を誤って入力しました。 aSmackに戻ろうとしたときにエラーについて知りました。

3
noob

私は同じエラーに直面していました。

Xmppサーバーに接続した後、私は呼んでいました

mConnection.login("[email protected]", "ilink@2012");

そしてそれは働いていませんでした。
問題を解決するために、コードに次の変更を加えました。

SASLAuthentication.unBlacklistSASLMechanism("PLAIN");
SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5");
mConnection.login("test", "ilink@2012");

DIGEST-MD5をブラックリストに登録してPLAIN SASLMechanismを有効にする2行を追加し、ユーザー名からIPアドレスを削除しました。

参考までに、ここに私の完全に機能するコードを示します。

package com.ilink.xmpptest;

import Java.io.IOException;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.ConnectionListener;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;

import Android.os.AsyncTask;
import Android.os.Bundle;
import Android.support.v7.app.ActionBarActivity;
import Android.util.Log;
import Android.view.Menu;
import Android.view.MenuItem;

public class MainActivity extends ActionBarActivity implements ConnectionListener {
    private static final String TAG = MainActivity.class.getSimpleName();

    private AbstractXMPPConnection mConnection;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new ConnectToXmppServer().execute();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void authenticated(XMPPConnection arg0, boolean arg1) {
        Log.i(TAG, "Authenticated");
    }

    @Override
    public void connected(XMPPConnection arg0) {
        Log.i(TAG, "Connected");
        try {
            SASLAuthentication.unBlacklistSASLMechanism("PLAIN");
            SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5");
            mConnection.login("test", "ilink@2012");
        } catch (XMPPException | SmackException | IOException e) {
            e.printStackTrace();
            Log.e(TAG, e.getMessage());
        }
    }

    @Override
    public void connectionClosed() {
        Log.i(TAG, "Connection closed");
    }

    @Override
    public void connectionClosedOnError(Exception arg0) {
        Log.i(TAG, "Connection closed on error");
    }

    @Override
    public void reconnectingIn(int arg0) {
        Log.i(TAG, "Reconnecting in");
    }

    @Override
    public void reconnectionFailed(Exception arg0) {
        Log.i(TAG, "Reconnection failed");
    }

    @Override
    public void reconnectionSuccessful() {
        Log.i(TAG, "Reconnection successful");
    }

    private class ConnectToXmppServer extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Log.i(TAG, "Connecting to xmpp server started...");
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration
                        .builder()
                        .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                        .setServiceName("192.168.0.166")
                        .setHost("192.168.0.166")
                        .setPort(5222)
                        .setCompressionEnabled(false).build();
                mConnection = new XMPPTCPConnection(config);
                mConnection.setPacketReplyTimeout(1000);
                mConnection.addConnectionListener(MainActivity.this);
                mConnection.connect();
            } catch (XMPPException | SmackException | IOException e) {
                e.printStackTrace();
                Log.e(TAG, e.getMessage());
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            Log.i(TAG, "Connecting to xmpp server finished...");
        }
    }
}
21
Mohit Charadva

認可ポリシーについては、

PLAIN Auth-Unblacklist PLAIN、Blacklist SHA-1およびMD5

MD5 Auth-ブラックリスト解除MD5、ブラックリストSHA-1およびプレーン

SCRAM-SHA-1 Auth-Unblacklist SCRAM-SHA-1&PLAIN、Blacklist MD5

SASLAuthentication.unBlacklistSASLMechanism("AuthName");
SASLAuthentication.blacklistSASLMechanism("AuthName");

AuthNames:PLAINSCRAM-SHA-1MD5

**サーバー側で、どの認証方法が有効になっているかを確認します

5
Sakib Sami
        SASLAuthentication.blacklistSASLMechanism("SCRAM-SHA-1");
        SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5");
        SASLAuthentication.unBlacklistSASLMechanism("PLAIN");

非SSL接続のために私のために働いた。 (接続されたメソッドで)

編集:ユーザーアカウントがサーバーで作成されている場合、このエラーが発生する可能性があります。サインアップ(アカウントの作成)またはログインのどちらから来たかを確認します。

3
Alp Altunel

私は次のプロパティがあなたのために働くと思います、私は3.1を使用しています

config.setVerifyChainEnabled(false);
config.setReconnectionAllowed(true);
config.setSASLAuthenticationEnabled(false);
config.setSecurityMode(SecurityMode.disabled);
config.setDebuggerEnabled(false);
0