2015-05-21 12 views
7

Uygulamamı aSmack'dan Smack 4.1.1'a kaydırmaya çalışıyorum. Ancak, Smack durumunda aynı sunucu ve giriş bilgilerini kullanarak sorun yaşıyorum, bu arada mükemmel bir şekilde çalışıyor.SINIF kullanarak SASLError: yetkili değil

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

Ben de Smack benzer moda üzerine kodunu kullanmak çalışıyorum - -

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

Burada alıyorum istisna -

İşte aSmack içinde oturum açma benim eski kod

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) 

Bu istisna SCRAM ve DIGEST-MD ile aynıdır 5 de. Sadece ismi değiştirir. İşte

ben sunucudan alıyorum ne -

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> 

ne sorunu burada olabilir mi? Her üç mekanizma PLAIN, DIGEST-MD5 ve varsayılan SCRAM-SHA-1 ile denedim. Ayrıca alan adı ekleyerek veya eklemeden denedim. Yapılandırmada kullanıcı adı ve şifre ekleyerek ve doğrudan giriş yöntemine ekleyerek denedim.

ben gerekli güvenlik modu ile çalıştık aşağıdaki hatayı veren çok -

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:
Ben Smack 4.1.1 çözümü gerekir. Kodum zaten iyi çalışıyor, Smack'de yükseltmek için ona ihtiyacım var. Sanırım şu an açık.

cevap

2

3.1 kullanıyorum, aşağıdaki özellik sizin için çalışacaktır düşünüyorum. Geçerli kod gayet iyi. Yanlışlıkla kullanıcı adını şifre yerine koyuyorum. Hataya geri dönmeyi denediğimde hata hakkında bilgi sahibi olmalıyım.

0

Bunun yerine bir aptal hataydı, ben Tamam

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

etkinleştirilenler hangi sunucu tarafında kontrol edin. XMPPTCPConnectionConfiguration, tüm bu yöntemlere sahip değil. Sanırım aSmack'in bakış açısına cevap veriyorsunuz. Sorum şu soruyor: Smack 4.1.1 – noob

+0

3.1 kullanıyorum, bu yüzden ben –

+0

Ah düşünüyorum! 4.1.1 için neler yapılabilir? – noob

17

Aynı hatayla karşı karşıya kalıyordum.

xmpp sunucusuna bağlandıktan sonra ben

mConnection.login("[email protected]", "test"); 

çağırıyordu ve çalışma değildi.
Sorunu çözmek için kodumda aşağıdaki değişiklikleri yaptım.

SASLAuthentication.unBlacklistSASLMechanism("PLAIN"); 
SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5"); 
mConnection.login("test", "[email protected]"); 

I dijesti-MD5 kara liste ve DÜZ SASLMechanism sağlayacak ve aynı zamanda kullanıcı adı IP adresi çıkarıldı iki satır ekledik.

Burada referans için tam çalışma kodum.

yetkilendirme politikası için
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", "[email protected]"); 
     } 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..."); 
     } 
    } 
} 
+4

Çok teşekkürler! Bu konuyla ilgili dokümantasyon eksikliği sadece iğrenç, ben bu konuda 2 gün boyunca bunun hakkında bilgi parçalarını aramaya başlamıştım ... Mesajınız şimdiye kadar gördüğüm en yararlı. – Fingolfin

4

,

DÜZ Auth - Unblacklist DÜZ, Kara Liste SHA-1 VE MD5

MD5 Auth - Unblacklist MD5, Kara Liste SHA-1 VE DÜZ

Yaylanmak-SHA -1 Kimlik Doğrulama - Unblacklist scram-SHA-1 & düz, Kara MD5

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

AuthNames: PLAIN, SCRAM-SHA-1, MD5

** auth metodu Bu gerçekten doğru yanıt değil

İlgili konular