2014-09-07 2 views
0

개발할 XMPP 기반 응용 프로그램 용 XMPP 서버 라이브러리를 만들려고합니다. 일반 SASL로 클라이언트를 인증하려고 시도했습니다. 이미 http://tools.ietf.org/html/rfc6120#section-6.4.6XMPP SASL 인증

에서 RFC를 읽고 내 문제하는 < 성공/>를 송수신하고, 새로운 오픈 태그와 비어있는 기능 목록을 전송 한 후, 클라이언트 (피진) 비 SASL 인증을 사용하여 인증을 진행한다는 것입니다 . 나는 아직 TLS를 사용하고 있지 않다

<< <?xml version='1.0' ?><stream:stream to='127.0.0.1' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> 

>> <?xml version="1.0" ?> 
>> <stream:stream version="1.0" xmlns="jabber:server" xmlns:stream="http://etherx.jabber.org/streams" id="kanapka" from="127.0.0.1"> 
>> <stream:features> 
>> <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> 
>> <mechanism> 
>> PLAIN 
>> </mechanism> 
>> </mechanisms> 
>> </stream:features> 

<< <auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN' xmlns:ga='http://www.google.com/talk/protocol/auth' ga:client-uses-full-bind-result='true'>AHRlc3R1c2VyAHRlc3RwYXNz</auth> 

>> <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl" /> 

<< <stream:stream to='127.0.0.1' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> 

>> <?xml version="1.0" ?> 
>> <stream:stream version="1.0" xmlns="jabber:server" xmlns:stream="http://etherx.jabber.org/streams" id="hotdog" from="127.0.0.1"> 
>> <stream:features /> 

<< <iq type='get' id='purple46cbc043'><query xmlns='jabber:iq:auth'><username>testuser</username></query></iq> 

않으며, 나는 다른 SASL 메커니즘을 시도했다 : 이것은 통신의 로그입니다 (< <은 >> 들어오는 나가는 의미). 이것은 모두 일반 텍스트입니다.

이것은 동일한 TCP 연결이며 스트림 ID는 다릅니다. 여기에 어떤 문제가 있습니까?

답변

1

클라이언트가 세션 바인딩을 완료 할 수 없도록 리소스 바인딩을 지원하지 않습니다. 서버가 XMPP 스타일의 스트림 설정을 지원하지 않으면 Pidgin이 jabber : ih : preh (이전 XMPP 스타일)로 돌아갈 것을 결정합니다.

http://tools.ietf.org/html/rfc6120#section-7에서 "XMPP 클라이언트 및 서버 구현에서 리소스 바인딩을 지원해야합니다."를 참조하십시오. 및 "스트림에 대한 당사자는 반드시 리소스 바인딩을 필수 - 협상으로 간주해야합니다."

사양을 따르기보다는 다른 구현물을보고 XMPP를 구현하는 것은 좋은 생각이 아닙니다. 때때로 다른 구현체의 스트림을 한눈에 파악하면 이러한 걸림돌이 될 수 있습니다.