2012-02-03 47 views
1

我有一個正在運行ejabberd安裝,與HTTP綁定啓用,nginx的代理,以及Web瀏覽器迷你jappix XMPP客戶端。我也有一個外部認證程序。ejabberd HTTP綁定防止運行並行會話不同的資源

如果我使用傳統的5222端口,我可以在此服務器上使用不同的資源連接相同的用戶。但是:

  • 如果我從經典xmpp客戶端(psi,同理)對於給定用戶的活動會話,我無法使用http-bind(401身份驗證失敗)連接此用戶。
  • 我通過http-bind建立第一個連接,其他經典的xmpp客戶端可以完成其他連接(並且資源當然不同)。我有時會收到401已經連接的消息
  • 我只能在一個瀏覽器中連接同一個用戶,我無法連接多個http-bind上的同一個用戶(這些連接上的資源不同,但我也獲得了401)
  • 我敢肯定,當我得到這些認證失敗時,外部認證程序從未啓動
  • max_user_sessions設置可以(用無窮大進行測試),如果我沒有在http-bind中連接,我可以運行並行會話。但在我的情況下還測試了新的resource_conflict設定值沒有任何成功(和它的實際上並不是re'source衝突)

安裝:ejabberd-2.1.10 Debian(從ejabberd-2.1.10-Linux的x86的安裝程序。 bin,但在x86_64版本中測試過相同的問題)。

提取配置:

{5280, ejabberd_http, [ 
        {request_handlers, 
         [ 
         {["http_bind"], mod_http_bind} 
         ]}, 
        %%captcha, 
        http_bind, 
        %%http_poll, 
        web_admin 
        ]} 

上的日誌,當發生這種情況,我有:

=INFO REPORT==== 2012-01-27 10:18:55 === 
D(<0.335.0>:ejabberd_http_bind:684) : reqlist: [{hbr,154037, 
          "01775ec6fc089a2b0c84abb80a4b5b7b4bdd958d", 
          []}, 
          {hbr,154036, 
          "01775ec6fc089a2b0c84abb80a4b5b7b4bdd958d", 
          [{xmlstreamelement, 
            {xmlelement, 
            "stream:features",[], 
             [{xmlelement, 
              "mechanisms", 
              [{"xmlns", 
              "urn:ietf:params:xml:ns:xmpp-sasl"}], 
              [{xmlelement, 
              "mechanism",[], 
              [{xmlcdata, 
               "PLAIN"}]}]}]}}, 
             {xmlstreamstart, 
             "stream:stream", 
             [{"version","1.0"}, 
             {"xml:lang","fr"}, 
             {"xmlns","jabber:client"}, 
             {"xmlns:stream", 
             "http://etherx.jabber.org/streams"}, 
             {"id","3595609800"}, 
             {"from", 
             "tchat.example.com"}]}]}] 

=INFO REPORT==== 2012-01-27 10:18:55 === 
D(<0.335.0>:ejabberd_http_bind:732) : really sending now: [{xmlelement, 
             "auth", 
             [{"xmlns", 
             "urn:ietf:params:xml:ns:xmpp-sasl"}, 
             {"mechanism", 
              "PLAIN"}], 
             [{xmlcdata<<"bGRhcHVzZX(...)3">>}]}] 
=INFO REPORT==== 2012-01-27 10:18:55 === 
I(<0.336.0>:ejabberd_c2s:649) : ({socket_state,ejabberd_http_bind,{http_bind,<0.335.0>,{{127,0,0,1},50992}},ejabberd_http_bind}) Failed authentication for [email protected] 

=INFO REPORT==== 2012-01-27 10:18:55 === 
D(<0.337.0>:ejabberd_http_bind:916) : OutPacket: [{xmlstreamelement, 
             {xmlelement,"failure", 
             [{"xmlns", 
              "urn:ietf:params:xml:ns:xmpp-sasl"}], 
             [{xmlelement, 
              "not-authorized",[], 
              []}]}}] 

=INFO REPORT==== 2012-01-27 10:18:55 === 
D(<0.337.0>:ejabberd_http_bind:1054) : --- outgoing data --- 
<body xmlns='http://jabber.org/protocol/httpbind'><failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><not-authorized/></failure></body> 

所以這是在HTTP綁定一個 「功能」?使其成爲激活時給定用戶的唯一有效資源?和如果是這樣,如何爲同一用戶運行多個http綁定會話?任何提示?

回答

1

不,你的配置肯定有問題。我已經成功地使用ejabberd的http-bind很長一段時間了,當然你可以有不同資源的多個連接並且獨立於其他客戶端連接。我也使用nginx作爲代理。在你ejabberd.cfg你應該有:

{5280, ejabberd_http, [ 
    http_bind, 
    web_admin 
    ]} 

{modules,[ 
     {mod_http_bind,[]}, 
     ... 
]}. 

此外,在日誌中我看到{"from", "tchat.example.com"},這似乎表明missconfiguration。

+0

tchat.example.com實際上是用於該ejabberd服務器的正確serverName。這也是波什網站的名稱。爲什麼會是一種錯誤的認同?現在我刪除了配置中的request_handler部分,現在沒有任何成功...至少你可以告訴我它應該工作:-) – regilero 2012-02-04 10:34:58

+0

標記爲接受,因爲至少你告訴我它應該工作:-)。真正的解決辦法是我需要{extauth_cache,false}。所以這是外部認證緩存的問題。 – regilero 2012-02-04 12:07:29

+0

很高興您管理! – ggozad 2012-02-04 14:25:39