المصادقة XMPP SASL على Ejabberd مع PHP
سؤال
وأنا أحاول أن المصادقة مع خادم XMPP استخدام SASL.
/**
* 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 يستجيب مع:
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><bad-protocol/></failure>
وهذا هو مقابل ملقم Ejabberd. عندما أقوم بفتح مجرى XMPP، فإنه يعلن:
<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>
وهكذا طبقات لي أن SASL - يجب جلي العمل. لدي نسخة جافا سكريبت، الذي يعمل تماما على الخادم OpenFire. (لا أستطيع أن اختبار على Ejabberd في الوقت الحاضر)
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 لا يعمل.
المحلول 2
وأحسب ما هي المشكلة. سوف EJabberd الإعلان SASL جلي وDIGEST-MD5 ولكن في الواقع فقط نقبل DIGEST-MD5.
نصائح أخرى
وجرب هذا في بيثون:
Username+"@xmpp.poppen.lab"+ chr(0) + Username + chr(0) + Password
ولPHP أيضا استخدام chr(0)
بدلا من "\u0000"
لا تنتمي إلى StackOverflow