2009-08-01 19 views
3

SASLを使用してXMPPサーバーで認証しようとしています。PHPを使用したEjabberdでの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 - PLAINは動作するはずです。私はOpenFireサーバーで完璧に動作するJavaScriptバージョンを持っています。 PHPのバージョンが動作していない理由を

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

は、だから私は得ることができない(私は現時点でEjabberd上でそれをテストすることはできません)。

答えて

1

問題の原因を突き止めました。 EJabberdはSASL PLAINとDIGEST-MD5を宣伝しますが、実際にはDIGEST-MD5のみを受け入れます。

+1

chr(0)を使用するため、あなたはバグレポートを開いていましたか?それは他の人たちがあなたと同じ問題を抱えないように助けてくれるでしょう。 – cweiske

2

Pythonでこれを試してみてください:

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

とPHPが代わり"\u0000"

関連する問題