PHP ile ejabberd üzerinde XMPP SASL kimlik doğrulama

2 Cevap php

Ben SASL'yi kullanarak bir XMPP sunucusu ile kimlik çalışıyorum.

/**
     * Send Authentication, SASL
     * @return Bool
     * @param $username String
     * @param $password String
     */
    function authenticate($username, $password) {
    	$this->username = $username;
    	$this->password = $password;

    	var_dump($username, $password, $this->domain);

    	$auth = base64_encode($username.'@'.$this->domain."\u0000".$username."\u0000".$password);
    	$xml = '<auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">'.$auth.'</auth>';
    	if ($this->write($xml)) {
    		if ($xml = $this->listen(1, true)) {
    			if (preg_match("/<success/i", $xml)) {
    				$this->authenticated = $this->_sendStream();
    			}
    		}
    	}
    	$this->events->trigger('authenticate', $this->authenticated);
    	return $this->authenticated;
    }

XMPP sunucusu ancak yanıt verir:

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><bad-protocol/></failure>

Bu ejabberd sunucusu aykırıdır. Ben XMPP akışı açtığınızda, bunu duyurur:

<stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism></mechanisms><register xmlns='http://jabber.org/features/iq-register'/></stream:features>

Yani o SASL bana dikişler - DÜZ çalışması gerekir. Ben OpenFire sunucu üzerinde mükemmel çalışan bir JavaScript sürümü var. (Ben şu anda ejabberd üzerinde test edemez)

sendAuthentication: function() {
    	clearTimeout(XMPP.sendAuthentication_timer);
    	var auth = Base64.encode(XMPP.username+'@'+XMPP.domain+'\u0000'+XMPP.username+'\u0000'+XMPP.password);
    	mySocket.events.receive.observe(XMPP.receivedAuthSuccess, function() {
    		mySocket.send('<auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">' + auth + '</auth>');
    	});
    }

PHP sürümü çalışmıyor Peki neden alamıyorum.

2 Cevap

Anladım ne sorun oldu. Ejabberd SASL düz ve DIGEST-MD5 tanıtacağı ama aslında sadece DIGEST-MD5 kabul edecek.

Python bu deneyin:

Username+"@xmpp.poppen.lab"+ chr(0) + Username + chr(0) + Password

Ve PHP chr(0) yerine "\u0000" kullanmak için