SASLError using PLAIN: not authorized

I am trying to port my application from aSmack to Smack 4.1.1 . However, I had problems using the same server and login information in the Smack case, when it works perfectly on aSmack.

Here is my old aSmack login code -

 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); } 

I am also trying to use the code in a similar way in 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); } 

Here's the exception I get -

 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) 

This exception is the same as SCRAM and DIGEST-MD5. He just changes the name.

This is what I get from the server -

 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> 

What could be the problem? I tried with all three mechanisms PLAIN , DIGEST-MD5 and default SCRAM-SHA-1 . I also tried with or without adding a domain name on it. I tried it with adding a username and password in the settings and by adding it directly to the login method.

I also tried in security mode, which gives the following error:

 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:
I need a solution in Smack 4.1.1. My code already works well in aSmack, I need to update it in Smack. I think it’s clear now.

+7
android xmpp smack asmack
source share
4 answers

Well, that was a stupid mistake. Current code is great. I accidentally put a username instead of a password. I found out about the error when I tried to return to aSmack.

+2
source share

I encountered the same error.

After connecting to the xmpp server, I called

 mConnection.login(" test@192.168.0.166 ", "test"); 

and he did not work.
To solve the problem, I made the following changes to my code.

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

I added two lines that are included in the DIGEST-MD5 blacklist and activate PLAIN SASLMechanism, and also removed the IP address from the username.

For reference, here is my full working code.

 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..."); } } } 
+17
source share

For authorization policy

PLAIN Auth - Unblacklist PLAIN, blacklist SHA-1 AND MD5

MD5 Auth - Unblacklist MD5, SHA-1 & PLAIN Blacklist

SCRAM-SHA-1 Auth - Unblacklist SCRAM-SHA-1 and PLAIN, MD5 blacklist

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

AuthNames: PLAIN , SCRAM-SHA-1 , MD5

** Check on the server side which auth method is enabled

+4
source share

I think the following property will work for you, I am using 3.1

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

All Articles