Smack and SASL Authentication Error - Unknown Authentication Mechanisms

I am trying to create an XMPP client using the latest version of Smack 4.1.0 beta. But when I tried to log into the local OpenFire server, I ran into an error.

org.jivesoftware.smack.SmackException: SASL Authentication failed. No known authentication mechanisims. 

I tried all kinds of combinations of user credentials, but still no luck. When trying to connect to the server with Pidgin or Adium al in order. Any clues what I'm missing in the code?

 XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() .setUsernameAndPassword("admin", "admin") .setServiceName("localhost") .setHost("localhost") .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) .setPort(5222) .build(); AbstractXMPPConnection connection = new XMPPTCPConnection(config); try { connection.connect(); connection.login(); connection.disconnect(); } catch (SmackException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XMPPException e) { e.printStackTrace(); } 
+4
source share
3 answers

Here is the complete solution, please look carefully at it ...

 public class NewClientActivity extends Activity { EditText etUsername, etPassword; Button bSubmit; AbstractXMPPConnection mConnection; ConnectionListener connectionListener = new ConnectionListener() { @Override public void connected(XMPPConnection xmppConnection) { Log.d("xmpp", "connected"); try { SASLAuthentication.registerSASLMechanism(new SASLMechanism() { @Override protected void authenticateInternal(CallbackHandler callbackHandler) throws SmackException { } @Override protected byte[] getAuthenticationText() throws SmackException { byte[] authcid = toBytes('\u0000' + this.authenticationId); byte[] passw = toBytes('\u0000' + this.password); return ByteUtils.concact(authcid, passw); } @Override public String getName() { return "PLAIN"; } @Override public int getPriority() { return 410; } @Override public void checkIfSuccessfulOrThrow() throws SmackException { } @Override protected SASLMechanism newInstance() { return this; } }); mConnection.login(); } catch (XMPPException e) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(NewClientActivity.this, "Incorrect username or password", Toast.LENGTH_LONG).show(); } }); e.printStackTrace(); } catch (SmackException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Override public void authenticated(XMPPConnection xmppConnection, boolean b) { Log.d("xmpp", "authenticated"); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(NewClientActivity.this,"Logged in successfully...",Toast.LENGTH_LONG ).show(); } }); } @Override public void connectionClosed() { Log.d("xmpp", "connection closed"); } @Override public void connectionClosedOnError(Exception e) { Log.d("xmpp", "cononection closed on error"); } @Override public void reconnectionSuccessful() { Log.d("xmpp", "reconnection successful"); } @Override public void reconnectingIn(int i) { Log.d("xmpp", "reconnecting in " + i); } @Override public void reconnectionFailed(Exception e) { Log.d("xmpp", "reconnection failed"); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new_client); findViews(); } private void findViews() { etUsername = (EditText) findViewById(R.id.etUsername); etPassword = (EditText) findViewById(R.id.etPassword); bSubmit = (Button) findViewById(R.id.bSubmit); bSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String[] params = new String[]{etUsername.getText().toString(), etPassword.getText().toString()}; new Connect().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); } }); } class Connect extends AsyncTask<String, Void, Void> { @Override protected Void doInBackground(String... params) { XMPPTCPConnectionConfiguration config = null; XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder(); builder.setServiceName("192.168.1.60").setHost("192.168.1.60") .setDebuggerEnabled(true) .setPort(5222) .setUsernameAndPassword(params[0], params[1]) .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) .setCompressionEnabled(false); config = builder.build(); mConnection = new XMPPTCPConnection(config); try { mConnection.setPacketReplyTimeout(10000); mConnection.addConnectionListener(connectionListener); mConnection.connect(); } catch (SmackException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XMPPException e) { e.printStackTrace(); } return null; } } } 

Update : - For smack version 4.2.0-beta2, use the code below to configure XmppConnection for PLAIN authentication.

 XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder(); builder.setHost("example.com"); builder.setPort(5222); /*builder.setServiceName("example.com");*/ //for older version < 4.2.0-beta2 try { builder.setXmppDomain(JidCreate.domainBareFrom("example.com")); } catch (XmppStringprepException e) { e.printStackTrace(); } /*builder.setServiceName("example.com");*/ builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); builder.setCompressionEnabled(true); builder.setConnectTimeout(30000); /*builder.setSendPresence(false);*/ try { TLSUtils.acceptAllCertificates(builder); } catch (NoSuchAlgorithmException|KeyManagementException e) { e.printStackTrace(); } TLSUtils.disableHostnameVerificationForTlsCertificates(builder); final Map<String, String> registeredSASLMechanisms = SASLAuthentication.getRegisterdSASLMechanisms(); for(String mechanism:registeredSASLMechanisms.values()) { SASLAuthentication.blacklistSASLMechanism(mechanism); } SASLAuthentication.unBlacklistSASLMechanism(SASLPlainMechanism.NAME); xmppConnection=new XMPPTCPConnection(builder.build()); 
+4
source

I mistakenly imported the wrong dependencies. While checking the documentation ( https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-Upgrade-Guide ) importing the correct dependencies using Gradle solved the problem.

 compile("org.igniterealtime.smack:smack-java7:4.1.0-beta1") compile("org.igniterealtime.smack:smack-tcp:4.1.0-beta1") compile("org.igniterealtime.smack:smack-extensions:4.1.0-beta1") 
+1
source

try using the ip address for host / servicename

0
source

Source: https://habr.com/ru/post/987202/


All Articles