2012-08-09 23 views
49

मैं एक ऐसी वेबसाइट तैयार कर रहा हूं जिसमें मोबाइल साथी (केवल आईफोन केवल) होगा। वेबसाइट एक एएसपी.NET एमवीसी 3 आवेदन होगा। आईफोन एप्लिकेशन में सेवाओं का पर्दाफाश करने के लिए मेरे पास एएसपी.Net वेब एपीआई साइट (एमवीसी 4) भी होगी। आईफोन ऐप के पास उपयोगकर्ता से उपयोगकर्ता नाम और पासवर्ड कैप्चर करने और JSON शीर्षलेखों में वेब एपीआई को भेजने के लिए अपना स्वयं का फॉर्म होगा।मोबाइल (आईफोन) ऐप से एएसपी.Net वेब एपीआई (मेरे डिजाइन पर फीडबैक अनुरोध) से प्रमाणीकरण अनुरोध

मैं विचार के बाद शुरुआत से सुरक्षा पर विचार करना चाहता हूं। मैं किसी भी माध्यम से सुरक्षा विशेषज्ञ नहीं हूं। मैंने यह देखने के लिए एक अच्छा सौदा किया है कि वेब सेवा से मोबाइल एप्लिकेशन क्लाइंट के प्रमाणीकरण को कैसे प्रबंधित किया जा रहा है। मुझे लगता है कि मैं एक सभ्य समाधान के साथ आया हूं जिसमें तीसरे पक्ष के ओथ में शामिल नहीं है।

मैं किसी भी और सभी राय, सलाह, आलोचना और सामान्य डब्ल्यूटीएफ की सराहना करता हूं कि आप में से कोई भी पेशकश कर सकता है। :)

मेरे सबसे बड़ी चिंता कर रहे हैं:

  1. सुनिश्चित करना है कि वेब एपीआई की जाने वाली कॉल के लिए अधिकृत हैं
  2. पुनरावृत्ति के दौरे का जोखिम (इसलिए नीचे कॉल में timestamps)

को न्यूनतम आईफोन ऐप इस प्रकार विकसित किया जाएगा:
आईफोन ऐप में दो तारों को हार्ड-कोड किया गया है (प्रत्येक उपयोगकर्ता के लिए समान मान):

  1. अनुप्रयोग ID
    यह एक स्ट्रिंग है कि ग्राहक है कि वेब एपीआई (iPhone, Android, विंडोज फोन, आदि) तक पहुँच रहा है के प्रकार की पहचान करने के लिए प्रयोग किया जाता है।

  2. एप्लिकेशन का हैशिंग नमक
    यह एक स्ट्रिंग है जिसका प्रयोग उपयोगकर्ता-अज्ञात अनुरोधों के लिए नमक हैश के लिए किया जाता है।

दो तार iPhone एप्लिकेशन के स्थानीय डेटाबेस में संग्रहीत हैं (प्रत्येक उपयोगकर्ता के लिए अद्वितीय मान):

  1. एपीआई उपयोगकर्ता पहुँच टोकन
    इस ग्राहक के लिए प्रदान की एक स्ट्रिंग (टोकन) है सफल प्रमाणीकरण पर वेब एपीआई द्वारा और ग्राहक को प्रत्येक अनुरोध में उपयोगकर्ता नाम और पासवर्ड भेजने के बिना वेब एपीआई तक पहुंचने की अनुमति देता है।
  2. उपयोगकर्ता की हैशिंग नमक
    यह एक स्ट्रिंग है स्थापित उपयोगकर्ता खाते के विरुद्ध किए गए अनुरोधों के लिए नमक हैश करने के लिए इस्तेमाल किया जाता है।



iPhone निम्नलिखित तरीके से वेब एपीआई के लिए कॉल कर देगा:

एपीआई विधि: खाता बनाएँ
क्लाइंट भेजता है:

  • नया खाता डेटा (प्रयोक्ता नाम , पासवर्ड, पहला नाम, अंतिम नाम, आदि ..)
  • आवेदन आईडी
  • यूटीसी टाइमस्टैम्प
  • यूटीसी टाइमस्टैम्प + आवेदन आईडी हैश आवेदन के हैशिंग नमक के साथ

एपीआई रिटर्न नमकीन:

  • नई उपयोगकर्ता की हैशिंग नमक

    विचार यहाँ है कि, एक खाता बनाते समय , मैं एप्लिकेशन के हार्डकोडेड नमक का उपयोग कर सकता हूं क्योंकि यह एक बड़ा सुरक्षा जोखिम नहीं है यदि वह नमक कभी बाहर निकलता है (अपघटन या कुछ अन्य माध्यमों के माध्यम से)।

    लेकिन उपयोगकर्ता के डेटा तक पहुंचने और संशोधित करने के तरीकों के लिए मैं केवल उस उपयोगकर्ता द्वारा स्वामित्व वाले नमक का उपयोग करूंगा ताकि इसका उपयोग हमलावर द्वारा दूसरों का प्रतिरूपण करने के लिए नहीं किया जा सके।


एपीआई विधि: जाओ खाता
(खातों वेब साइट पर बनाए गए, लेकिन अभी तक iPhone पर समन्वयित किया नहीं किया गया है के लिए उपयोगकर्ता के हैशिंग नमक प्राप्त करने के लिए प्रयोग किया जाता है यह तब होता है जब कोई उपयोगकर्ता की कोशिश करता है जब। आईफोन और आईफोन पर लॉग इन करता है यह पता लगाता है कि उसके पास उस उपयोगकर्ता नाम के लिए कोई रिकॉर्ड नहीं है।)

क्लाइंट भेजता है:

  • प्रयोक्ता नाम
  • पासवर्ड (अनुप्रयोग के हैशिंग नमक के साथ टुकड़ों में बांटा)
  • अनुप्रयोग ID
  • यूटीसी टाइमस्टैम्प
  • यूटीसी टाइमस्टैम्प + आवेदन आईडी
  • हैश आवेदन के हैशिंग साथ नमकीन नमक

एपीआई रिटर्न:

  • मौजूदा उपयोगकर्ता की हैशिंग नमक


एपीआई विधि: प्रवेश करें (प्रमाणित)
क्लाइंट भेजता है:

  • प्रयोक्ता नाम
  • पासवर्ड (साथ टुकड़ों में बांटा उपयोगकर्ता के हैशिंग नमक)
  • अनुप्रयोग ID
  • यूटीसी टाइमस्टैम्प
  • यूटीसी टाइमस्टैम्प + आवेदन आईडी
  • हैश उपयोगकर्ता की हैशिंग नमक के साथ नमकीन

एपीआई रिटर्न:

  • एपीआई उपयोगकर्ता पहुँच टोकन


एपीआई विधि: कोई भी आदेश (यानी पोस्ट, अद्यतन प्रोफाइल आदि बनाएँ, संदेश प्राप्त, ...)
क्लाइंट भेजता है:

  • कमान डाटा
  • एपीआई उपयोगकर्ता पहुँच टोकन
  • अनुप्रयोग ID
  • यूटीसी टाइमस्टैम्प
  • के हैश यूटीसी टाइमस्टैम्प + एप्लिकेशन आईडी + एपीआई उपयोगकर्ता एक्सेस टोकन उपयोगकर्ता के हैशिंग नमक के साथ नमकीन
+0

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

+0

@AndrewBSchultz, आप सही हैं, और मैं उस पहले कॉल पर एन्क्रिप्ट नहीं कर रहा था। चूंकि यह एसएसएल है और चूंकि प्रारंभिक कॉल केवल एक बार होता है, एक्सपोजर का नगण्य जोखिम होता है। – Stoop

+1

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

उत्तर

3

मेरे सुझाव

  1. प्रमाणीकरण और प्रमाणीकरण। इसे 2 अलग-अलग सर्वरों पर बनाएं (कुछ प्रोजेक्ट्स में मैंने 3 का भी उपयोग किया है)। रिवर्स प्रॉक्सी सर्वर इस के साथ वास्तव में अच्छे हैं। एक सर्वर पर प्रमाणीकरण करें और इसे दूसरे पर अधिकृत करें।

यह सबसे महत्वपूर्ण कदम है जो मुझे लगता है कि वेब एपीआई का उपयोग करने वाली मोबाइल सुरक्षा में इसकी आवश्यकता है।

  1. सब कुछ Encapsulate।

  2. सभी सुरक्षित जानकारी के लिए एसएसएल का उपयोग करें। मेरे मामले में मैं इसे सब कुछ के लिए उपयोग करता हूं।

  3. अपने टाइमस्टैम्प के लिए एक उपयुक्त समय चुनें जिसके लिए आप प्राधिकरण प्राप्त कर सकते हैं। इसे बहुत छोटा मत बनाओ क्योंकि आपका ऐप धीमा या बहुत लंबा हो जाएगा क्योंकि नेटवर्क स्नीफर्स पैकेट तक पहुंच सकते हैं।

यदि आप 3 सर्वर आर्किटेक्चर चाहते हैं तो आपके अनुरोधों के लिए एक एप्लिकेशन कुंजी भी है जिसका उपयोग आप एक्सेस कुंजी (सर्वर 1 से) उत्पन्न करने के लिए करते हैं। यह एक्सेस कुंजी आपके अनुरोधों को प्रमाणित करेगी जो सफल प्रमाणीकरण (सर्वर 2 से) के बाद आप किसी अन्य सर्वर से अपने अनुरोधों को अधिकृत करने के लिए उस कुंजी का उपयोग कर सकते हैं (सर्वर 3)

आपके द्वारा उल्लिखित अनुरोध मानक मानदंड हैं। वास्तव में उसमें कोई समस्या नहीं दिखती है।

+1

मुझे लुकअप [रिवर्स प्रॉक्सी सर्वर] देखना था (http://publib.boulder.ibm.com/infocenter/sametime/v8r5/index.jsp?topic=%2Fcom.ibm.help.sametime.v851.doc%2Fconfig% 2Fst_adm_port_rvprxy_overview_c.html)। दिलचस्प अवधारणा और एक जिसे मैं और अधिक खोजूंगा। "सब कुछ Encapsulate" से आपका क्या मतलब है? – Stoop

+0

एएसपी.Net वेब एपीआई जो आप बना रहे हैं, आपने सार्वजनिक एपीआई के मुकाबले किसी अन्य चीज़ का खुलासा नहीं किया है। हमारे पास कुछ डेवलपर्स हैं जो हमें डराते हैं। –

+0

इसके अलावा हमारे मामले में हम रिवर्स प्रॉक्सी के लिए nginx का उपयोग करते हैं। यह बहुत स्थिर और बहुत तेज़ है। –

4

वी.एस. 2013 में आपके पास एक कार्यशील कार्यान्वयन कि प्रवेश पर एक OAuth2 टोकन वाहक पैदा करने और इसे प्राधिकृत करने है उत्पन्न करने के लिए "Asp MVC एसपीए आवेदन" टेम्पलेट का उपयोग कर सकते हैं के लिए SSL का प्रयोग करें WebApi नियंत्रक के लिए [अधिकृत] विशेषताओं का उपयोग कर कॉल करता है। यह उपयोगकर्ताओं को स्टोर करने के लिए सदस्यता और इकाई फ्रेमवर्क का उपयोग करता है और स्थानीय रूप से SQL सर्वर में हैश करता है। बस एएसपी एमवीसी भागों को हटाएं जिनकी आपको आवश्यकता नहीं है और वेब एपीआई के लिए ऑथ भाग रखें। यहां अधिक जानकारी: http://msdnrss.thecoderblogs.com/2013/09/understanding-security-features-in-the-spa-template-for-vs2013-rc/

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