2012-07-17 13 views
11

मुझे अपने जावा एप्लिकेशन (उसी मशीन पर नहीं) में Google Chrome उपयोगकर्ता के वर्तमान में खोले गए टैब प्राप्त करने की आवश्यकता है। क्रोम सिंक सक्षम है इसलिए वर्तमान टैब Google सर्वर के साथ समन्वयित हैं।क्रोम सिंक XMPP सर्वर के साथ प्रमाणीकरण कैसे करें?

क्रोम सिंक के documentation के अनुसार यह एक्सएमपीपी के माध्यम से किया जाता है। तो मुझे लगता है कि Google XMPP सर्वर (xmpp.google.com) से कनेक्ट करना संभव होना चाहिए, उदा। स्मैक (एक्सएमपीपी के लिए जावा लाइब्रेरी) के माध्यम से, प्रोटोबफ संदेशों को प्रमाणीकृत और सुनें जो टैब सत्र परिवर्तन को इंगित करते हैं। बेशक उपयोगकर्ता के लॉगिन प्रमाण-पत्र या "क्लाइंट_आईडी" क्रोम ग्राहकों की पहचान करने के लिए उपयोग करता है।

लेकिन मुझे XMPP सर्वर से कनेक्ट करने के लिए उपयोग की जाने वाली प्रमाणीकरण विधि के पीछे एक कठिन समय मिल रहा है - मैं यह नहीं समझ सकता कि क्रोमियम source code में यह कैसे किया गया है और बहुत कम- कोड में स्तर टिप्पणियां। libjingle लाइब्रेरी Google इसके एक्सएमपीपी आधारित सेवाओं के लिए उपयोग करता है केवल सी ++ के लिए उपलब्ध है और अच्छी तरह से बनाए रखा/दस्तावेज नहीं है।

तो क्या कोई ऐसा व्यक्ति है जिसने पहले ऐसा कुछ किया है और प्रमाणीकरण प्रक्रिया कैसे काम करती है इस पर कोई सलाह/संकेत दे सकता है?

उत्तर

9

मुझे यकीन नहीं है कि क्रोम सिंक xmpp का उपयोग करता है, कम से कम उस स्तर पर जब उसे क्लाइंट के साथ जानकारी का आदान-प्रदान करना होता है। यह 'प्रोटोकॉल बफर' Google तकनीक का उपयोग करता है। प्रोटोकॉल .proto प्रोटोकॉल विवरण फ़ाइलों का उपयोग करके दिया जाता है और आप इसे विशेष कंपाइलर का उपयोग करके अपनी भाषा की वस्तुओं में परिवर्तित कर सकते हैं। सिंक सर्वर https://clients4.google.com/chrome-sync पर आराम करता है और क्लाइंट बाइनरी बॉडी के साथ POST अनुरोध भेजता है जहां टाइप किया गया ClientToServerMessage संदेश रखा गया है। सिंक सर्वर से कनेक्ट होने पर आउटपुट यहां दिया गया है। पहला आउटपुट पायथन ऑब्जेक्ट 'एनवायरन' डब्लूएसजीआई वैरिएबल का एक प्रिप्रिंट है जहां HTTP हेडर भी रखे जाते हैं। दूसरी वस्तु ('====' के बाद) वास्तविक प्रोटोकॉल संदेश है।

{'CONTENT_LENGTH': '54', 
'CONTENT_TYPE': 'application/octet-stream', 
'GATEWAY_INTERFACE': 'CGI/1.1', 
'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 
'HTTP_ACCEPT_ENCODING': 'gzip,deflate,sdch', 
'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8', 
'HTTP_AUTHORIZATION': 'GoogleLogin auth=MKhiqZsdz2RV4WrUJzPltxc2smTMcRnlfPALTOpf-Xdy9vsp6yUpS5cGuND0awqrYVUK4lhOJlh6OMsg093eBRghGGIgvWUTzU8PUvquy_c8Xn4sRiz_3tVJcke5eXi3q4qFDa6iVuEbT_0QhyPOjIQyeDOKRpZzMR3rpHsAs0ptFiTtUeTHsoIeUFT9nZPYzkET4-yHbDAp45_dxWdb-U6DPg24', 
'HTTP_CONNECTION': 'keep-alive', 
'HTTP_HOST': 'localhost:8080', 
'HTTP_USER_AGENT': 'Chrome MAC 0.4.21.6 (130497)-devel', 
'PATH_INFO': '/chrome-sync/dev/command/', 
'QUERY_STRING': 'client_id=SOME_SPECIAL_STRING', 
'REMOTE_ADDR': '127.0.0.1', 
'REMOTE_PORT': '59031', 
'REQUEST_METHOD': 'POST', 
'SCRIPT_NAME': '', 
'SERVER_NAME': 'vian-bizon.local', 
'SERVER_PORT': '8080', 
'SERVER_PROTOCOL': 'HTTP/1.0', 
'SERVER_SOFTWARE': 'gevent/1.0 Python/2.6', 
'wsgi.errors': <open file '<stderr>', mode 'w' at 0x100416140>, 
'wsgi.input': <gevent.pywsgi.Input object at 0x102a04250>, 
'wsgi.multiprocess': False, 
'wsgi.multithread': False, 
'wsgi.run_once': False, 
'wsgi.url_scheme': 'https', 
'wsgi.version': (1, 0)} 
'===================================' 
share: "[email protected]" 
protocol_version: 30 
message_contents: GET_UPDATES 
get_updates { 
    caller_info { 
    source: NEW_CLIENT 
    notifications_enabled: false 
    } 
    fetch_folders: true 
    from_progress_marker { 
    data_type_id: 47745 
    token: "" 
    notification_hint: "" 
    } 
} 
debug_info { 
    events { 
    type: INITIALIZATION_COMPLETE 
    } 
    events_dropped: false 
} 

यह ओएथ आधारित प्रमाणीकरण के लिए होता है। आप HTTP_AUTHORIZATION फ़ील्ड में OAuth टोकन देख सकते हैं। जब आप एचटीएमएल संवाद 'Google खाता लॉगिन' के साथ बातचीत करते हैं तो ओथ टोकन आपको दिया जाता है। मुझे यकीन नहीं है लेकिन Google सेवाओं के लिए एक्सेस टोकन प्राप्त करने के लिए एपीआई की तरह लगता है सार्वजनिक रूप से उपलब्ध है।

आप XMPP प्रमाणन के बजाय, कृपया एक्स-GOOGLE-टोकन प्रमाणन तंत्र यहाँ का विवरण देखने के लिए देख रहे हैं: https://developers.google.com/talk/jep_extensions/oauth

: Authenticate to Google Talk (XMPP, Smack) using an authToken

एक्स OAUTH2 प्राधिकरण के लिए, आप की जानकारी तक पहुंच सकते हैं

और यहाँ एक नमूना: http://pits.googlecode.com/svn/trunk/xmpp.c

ध्यान दें कि आप Chrome लॉग ब्राउज़र के प्रत्येक रन पर आबादी वाले फ़ाइलों के लिए XMPP धारा प्रवाह जोड़ सकते हैं - chrome_debug.log। इसे सक्षम करने के लिए, निम्न विकल्पों के साथ क्रोम चलाएं: --enable-logging --v = 2

+0

आपके उत्तर के लिए धन्यवाद! मैंने यह भी देखा कि क्रोम उस सर्वर से कनेक्ट हो रहा है, लेकिन मुझे लगता है कि यह केवल एक्सएमपीपी के माध्यम से सिंक अधिसूचनाओं की सदस्यता लेने या सिंक सर्वर के साथ उस क्लाइंट/ब्राउज़र को पंजीकृत करने के लिए है? मैंने एक Google प्रस्तुति में पढ़ा है कि सर्वर लोड और जटिलता को कम करने के लिए एक्सएमपीपी के माध्यम से टैब सिंक किया जाता है (बस कल्पना करें कि सिंक अपडेट की जांच के लिए हर मिनट सर्वर पर मतदान करने वाले 10 मिलियन क्रोम ब्राउज़र)। लेकिन मुझे लगता है कि आप सही हैं और एक्सएमपीपी संदेश प्रोटोबफ हैं - जैसे ही मैं सर्वर से कनेक्ट हो जाता हूं, मुझे कुछ सौदा करना पड़ता है ... –

+0

क्या आपने स्मैक का उपयोग कर क्रोम सिंक xmpp से कनेक्ट करने में कामयाब रहे हैं? आप ओथ टोकन कैसे प्राप्त करते हैं? – rustyx

+0

@rustyx: नहीं, दुख की बात है कि मैंने नहीं किया है ... // ने अभी तक vians को संपादित नहीं किया है - बहुत बहुत धन्यवाद, मैं इसे देख लूंगा! –

संबंधित मुद्दे