2011-12-15 17 views
28

मैं एक परियोजना के लिए एक RESTful API निर्माण कर रहा हूँ मैं पर काम कर रहा हूँ और मैं मुख्य आवेदन करना चाहते हैं के साथ अपनी खुद की एपीआई उपभोक्ता बारे में एपीआई का उपभोग है क्योंकि:प्रश्न OAuth

  1. यह परिणाम होगा कोड का एक सेट बनाए रखने के लिए
  2. हम एपीआई 3 पार्टी devs के लिए यह पहले से ही किया जाएगा बेनकाब करने का निर्णय लेते होने में
  3. यह मोबाइल अनुप्रयोगों है कि यह उपभोग
  4. मैं वास्तव में सीखना चाहते हैं बनाने के लिए संभावना को खोलता है यह कैसे करें

एपीआई एक सबडोमेन https://api.example.com पर होस्ट किया जाएगा और मुख्य वेब एप्लिकेशन रूट डोमेन https://example.com पर होस्ट किया जाएगा।

संकल्पनात्मक रूप से मैं समझता हूं कि सब कुछ कैसे काम करता है, लेकिन मेरा मुख्य प्रश्न यह है कि प्रमाणीकरण प्रवाह कैसे बदल जाएगा। आमतौर पर 3 पार्टी क्षुधा होगा:

  1. से https://api.example.com/request_token
  2. एक अनुरोध टोकन उपयोगकर्ता https://api.authenticate.com/authorize
  3. पर प्रमाणित करने के लिए वापस 3 पार्टी आवेदन
  4. पर पुनः निर्देशित हो जाओ https://api.example.com/access_token
  5. से पहुंच टोकन प्राप्त प्राप्त पुन: निर्देशित

चूंकि मैं दोनों डोमेन नियंत्रित करता हूं, क्या मैं कुछ ऐसा कर सकता हूं:

  1. एक अनुरोध टोकन प्राप्त जब उपयोगकर्ता कि https://api.example.com/authorize
  2. रूप में एक ही कोड कॉल https://www.example.com पर https://www.example.com
  3. उपयोगकर्ता एक फ़ॉर्म का उपयोग करके प्रमाणित करता है पर लॉग इन स्क्रीन पर भूमि क्रेडेंशियल्स मान्य हैं, तो अनुरोध टोकन बदली है पहुँच टोकन के लिए
  4. पहुँच टोकन सत्र में बचाया और समाप्त हो रहा है जब उपयोगकर्ता इसे तरह लॉग आउट है आमतौर पर करते हैं

चरण 3 महसूस करता यह गलत है के बाद से वहाँ duplica किया जाएगा टी कोड, लेकिन क्या यह मुझे एक्सएसएस हमलों तक नहीं खोल पाएगा https://www.example.com पर लॉगिन फॉर्म https://api.example.com पर डेटा भेजा गया है क्योंकि वे तकनीकी रूप से विभिन्न डोमेन हैं?

क्या मैं इसे अधिक जटिल बना रहा हूं?

उत्तर

20

मैं एक ही मुद्दे पर आया हूं और इसे इस तरह हल किया है।

मेरे एपीआई का उपयोग करके तीसरे पक्ष के ऐप्स के लिए, उन्हें सभी अनुरोधों पर ओएथ के माध्यम से प्रमाणित करना होगा।

अपने ही तीसरे पक्ष के ग्राहकों के लिए, (मोबाइल, आकाशवाणी आदि) - वे, OAuth का उपयोग अंतर यह है कि मैं इन प्राधिकरण चरण में सीधे यूज़रनेम और पासवर्ड भेजने की अनुमति देने के साथ (तो मैं एक देशी बना सकते हैं लॉगिन संवाद)। यह प्रदान किया जाता है कि आपका एपीआई एसएसएल/एचटीटीपीएस से अधिक है।

मेरे वेब एप्लिकेशन के लिए, मैं एपीआई तक पहुंचने के लिए कुकी प्रमाणीकरण का उपयोग करता हूं। I.e लॉग इन करने के बाद, उपयोगकर्ता बस एपीआई कॉल कर सकता है: यूआरएल और जेएसओएन/एक्सएमएल वापस प्राप्त करें। एपीआई की त्वरित खोज के लिए भी अच्छा है (हालांकि एपीआईजीआई जैसे वास्तविक एपीआई कंसोल वहां बेहतर काम करता है)।

+2

क्या आप आइटम 3 पर विस्तृत कर सकते हैं? जब उपयोगकर्ता लॉग इन करता है तो आप एक कुकी में सत्र आईडी सहेज रहे हैं, और फिर जब आप एपीआई कॉल करते हैं, तो उसे छद्म-एक्सेस टोकन के रूप में उपयोग करते हैं, और फिर जब आप एपीआई अनुरोध प्राप्त करते हैं तो इसे देख रहे हैं? ऐसा लगता है कि यह एक सुरक्षा भेद्यता होगी ... – Steve

+1

संक्षेप में हाँ। लेकिन यह एक भेद्यता कैसी है? वेब एप से एपीआई को कॉल करते समय मैं OAuth का उपयोग नहीं करता हूं। अगर आप लॉग इन हैं (जैसा कि कुकी को सत्यापित करके निर्धारित किया गया है) - तो एपीआई बस यूआरएल को कॉल करके सुलभ है। मैं उल्लेख करना भूल गया था कि मैं एपीआई की सेवा करता हूं: एक ही डोमेन पर वेब ऐप पर। –

+0

मुझे लगता है कि जब तक आप सर्वर आईडी पर उपयोगकर्ता की पहचान करने के लिए सत्र आईडी पर पूरी तरह भरोसा नहीं कर रहे हैं, यह नहीं है। मैं सोच रहा था कि आप [सत्र अपहरण] (http://en.wikipedia.org/wiki/Session_hijacking) तक खुद को खोल सकते हैं, लेकिन स्कूल खत्म होने के बाद शुक्रवार है और मैं थक गया हूं। अन्य सवालों के आपके उत्तरों के आधार पर आप निश्चित रूप से एक बहुत ही जानकार फेलो हैं! आपकी सहायताके लिए धन्यवाद! – Steve

0

मैं कहूंगा कि आप इसे थोड़ा अधिक जटिल कर रहे हैं। यदि आपका कोड ठीक से अलग हो गया है, तो आप आसानी से अपने एप्लिकेशन की सेवा परत पर एक पतली आरईएसटी परत बना सकते हैं, जबकि आपके एप्लिकेशन के नियंत्रक आपकी सेवा परत पर भी पतली परत हो सकते हैं।

+2

सेवा परत से आपका क्या मतलब है? क्या यह उन नियंत्रकों के अंदर मॉडल है जो भारी भारोत्तोलन करते हैं? यदि ऐसा है, तो यह मेरी तरह की योजना है - यह वास्तव में प्रमाणीकरण बिट है जो मुझे लूप के लिए फेंक रहा है। मैं सभी व्यावसायिक तर्क को एक अलग एपीआई सबडोमेन में ले जाना चाहता हूं क्योंकि हमें इसे मोबाइल ऐप विकास के लिए बेनकाब करना होगा, और मुझे लगता है * यह मुझे इस अर्थ में स्केलेबिलिटी के साथ मदद करेगा कि मैं संख्या को ऊपर या नीचे स्पिन कर सकता हूं एपीआई से कनेक्ट गूंगा क्लाइंट्स और बस केंद्रीय एपीआई सभी डेटा कैशिंग को संभाल लें। मैं अभी तक स्केलेबिलिटी के बारे में ज्यादा नहीं जानता ... – Steve

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