Ошибка авторизации SASL при подключении к серверу XMPP

Я пытаюсь подключиться к gmail с помощью SMACK API через сервер XMPP. но получить

ошибка: аутентификация SASL не удалась с использованием механизма PLAIN

вы можете проверить проблеск кода. у меня только из сети

ConnectionConfiguration connConfig = new ConnectionConfiguration("talk.google.com", 5222, "gmail.com");
connection = new XMPPConnection(connConfig);
connection.connect();
SASLAuthentication.supportSASLMechanism("PLAIN", 0);

Я проверил в окне отладки smack. это говорит в XML:

‹ неверный авторизованный />

У меня уже есть учетная запись на gmail, и мой gtalk также работает.


person SPB    schedule 17.09.2010    source источник


Ответы (3)


Вам необходимо установить аутентификацию перед подключением, а именно

SASLAuthentication.supportSASLMechanism("PLAIN", 0);

должен стоять перед connection.connect().

См. мой блог.

person Chuk Lee    schedule 20.09.2010
comment
Я не могу найти этот метод в этом классе. Любая альтернатива? - person joao2fast4u; 17.10.2016
comment
Этот метод не относится к моей версии smack - person Khemraj Sharma; 01.11.2017

    ConnectionConfiguration cc = new ConnectionConfiguration(
            "vietnam.agilemobile.com", 5222, vietnam.agilemobile.com");
    XMPPConnection connection = new XMPPConnection(cc);
    try {
        SASLAuthentication.supportSASLMechanism("PLAIN", 0);
        connection.connect();
        Log.e("LOGIN", "" + 111);
        // You have to put this code before you login
        Log.e("LOGIN", "" + 222);
        // You have to specify your gmail addres WITH @gmail.com at the end
        connection.login("nemodo", "123456", "resource");
        Log.e("LOGIN", "" + 333);
        // See if you are authenticated
        System.out.println(connection.isAuthenticated());

    } catch (XMPPException e1) {
        e1.printStackTrace();
    }

Я также получаю эту ошибку, но я не могу работать.

person BaDo    schedule 19.07.2012
comment
Объясните, в чем ошибка, и внесите исправления в предоставленный пользователем код. - person Rohit Vipin Mathews; 11.10.2012
comment
SASLAuthentication.supportSASLMechanism(PLAIN, 0); больше не доступен. - person joao2fast4u; 17.10.2016

Для тех, кто ищет возможные решения этой проблемы спустя много лет после того, как это было изначально задано и на него был дан ответ, я недавно смог обойти эту ошибку аутентификации, явно установив значение authzid для XMPPTCPConnectionConfiguration.

Я столкнулся с проблемой, когда моя конфигурация подключения работала нормально для некоторых клиентских серверов XMPP, но не для других, хотя все они использовали аутентификацию SASL PLAIN. После некоторого устранения неполадок я узнал, что те, которые терпели неудачу, ожидали значения authzid. После настройки моего кода, чтобы установить это, он работает как в средах, которые работали раньше, так и в средах, в которых произошел сбой.

Вот как я строю свою конфигурацию подключения:

XMPPTCPConnectionConfiguration.builder()
                              .setHost(XMPP_DOMAIN)
                              .setXmppDomain(XMPP_DOMAIN)
                              .setPort(XMPP_PORT)
                              .setCompressionEnabled(true) // optional, not all servers will support this
                              .setUsernameAndPassword(XMPP_USER, XMPP_PASSWORD)
                              .setResource(XMPP_RESOURCE)
                              .setAuthzid(JidCreate.entityBareFrom(String.format("%s@%s", XMPP_USER, XMPP_DOMAIN))) // <-- this was the change I needed
                              .build();

В частности, мне нужно было добавить эту строку:

.setAuthzid(JidCreate.entityBareFrom(String.format("%s@%s", XMPP_USER, XMPP_DOMAIN)))

person Default    schedule 21.12.2019