我有一個正在運行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綁定會話?任何提示?
tchat.example.com實際上是用於該ejabberd服務器的正確serverName。這也是波什網站的名稱。爲什麼會是一種錯誤的認同?現在我刪除了配置中的request_handler部分,現在沒有任何成功...至少你可以告訴我它應該工作:-) – regilero 2012-02-04 10:34:58
標記爲接受,因爲至少你告訴我它應該工作:-)。真正的解決辦法是我需要{extauth_cache,false}。所以這是外部認證緩存的問題。 – regilero 2012-02-04 12:07:29
很高興您管理! – ggozad 2012-02-04 14:25:39