2015-02-09 11 views
15

में गुप्त कुंजी और एक्सप्रेस में जेडब्ल्यूटी के लिए पहुंच टोकन और Facebook के साथ NodeJS बनाए रखने मैं दो अनुप्रयोगों:बाकी एपीआई

  • सर्वर (REST API सर्वर)
    • नोड js
    • एक्सप्रेस
    • jsonwebtokens
    • एक्सप्रेस-जेडटी
    • mongoose
  • ग्राहक (पोर्टेबल मोर्चा के अंत)
    • बूटस्ट्रैप
    • कोणीय जे एस
    • स्थानीय भंडारण
    • कोणीय फेसबुक
    • कोणीय जेडब्ल्यूटी

lateron, क्लाइंट ऐप को एंड्रॉइड, आईफोन और फोन के इस्तेमाल के अन्य प्लेटफार्मों के लिए पोर्ट किया जाएगा eGAP। ओथ के लिए, मैं प्रदाता के रूप में फेसबुक का उपयोग कर रहा हूं। अब, मुझे एहसास हुआ कि JSON वेब टोकन इस तरह के सेट अप के लिए जाने का तरीका हैं। मेरा प्रश्न वाक्य रचनात्मक एक के बजाय एक वास्तुकला है - फेसबुक एक्सेस टोकन पर हस्ताक्षर करते समय एक गुप्त कुंजी का प्रबंधन कैसे करें और नोडजेस में जेडब्ल्यूटी के साथ उपयोगकर्ता आईडी?

तो यह है कि कैसे प्रवाह मेरे एप्लिकेशन में काम करता है:

  1. कोणीय ग्राहक> फेसबुक प्रमाणीकरण शुरू होता है एक लॉग इन बटन
  2. उपयोगकर्ता बटन पर क्लिक करता है
  3. ग्राहक user_id प्राप्त करता है और अमेरिकन प्लान एक्सेस टोकन
  4. क्लाइंट भेजता है [पोस्ट जेसन बॉडी] आप दोनों ser_id और पहुंच टोकन नोड + एक्सप्रेस पर 'http://server.com/auth/login' सर्वर को
  5. नोड सर्वर/प्रमाणन/लॉगिन को छोड़कर सभी मार्गों के लिए एक्सप्रेस-जेडब्ल्यूटी आवेदन किया है एक

    वर expressJwt साथ = आवश्यकता है ('एक्सप्रेस-जेडटी');

    var jwt = आवश्यकता ('jsonwebtoken');

    app.use (expressjwt ({secret: ''}})। ({Path: ['/ auth/login']});

  6. नोड सर्वर, req.body से डेटा प्राप्त इसे प्रयोग

    वर टोकन = expressjwt JavascriptSDK का उपयोग कर फेसबुक से सभी प्रोफ़ाइल विवरण, और संकेत को हासिल करेगा।साइन ({प्रोफाइल},);

  7. नोड सर्वर भंडार (अपडेट, user_id मौजूद रहने पर) DB में नया टोकन बनाकर और ग्राहक
  8. ग्राहक भंडार नए टोकन यह स्थानीय भंडारण
  9. में json डेटा के रूप में मिलने की वजह के रूप में यह भेजता है
  10. ग्राहक का उपयोग करता कोणीय जेडब्ल्यूटी नए टोकन से प्रोफ़ाइल डेटा लाने और स्वचालित रूप से सभी अनुरोधों को यह सर्वर
के लिए भेजता है के लिए प्राधिकरण शीर्षक में नया टोकन संलग्न करने के लिए

अब, मेरे प्रश्न हैं:

  1. क्या मुझे वास्तव में डेटाबेस में जेडब्ल्यूटी टोकन स्टोर करने की आवश्यकता है? मैं निश्चित रूप से डेटाबेस के साथ अनुरोध शीर्षों में टोकन की तुलना नहीं कर रहा हूँ
  2. , हर बार में एक व्यक्ति लॉग मैं सुरक्षा के लिए यादृच्छिक गुप्त कुंजी उत्पन्न की जरूरत है? यदि हां तो यह क्लाइंट और सर्वर दोनों में कैसे फिट होगा?
  3. टोकन की समाप्ति के लिए मुझे कब और कहां की आवश्यकता है? और मैं इसे कैसे रीफ्रेश कर सकता हूं?

मैं एक तरह से डिजाइन प्रवाह और तंत्र के बारे में खो रहा हूँ।

+0

तो अंत में अब आप इसे कैसे कर रहे हैं ?? क्या आप निरस्त टोकन स्टोर करने के लिए कुछ डीबी का उपयोग कर रहे हैं या क्या ?? कृपया उत्तर दें कि यह मेरे लिए वास्तव में उपयोगी होगा –

उत्तर

13

विज्ञापन 1. आप डेटाबेस में जेडब्ल्यूटी स्टोर करने के लिए नहीं है। उपयोगकर्ता आईडी पेलोड का हिस्सा हो सकती है, इसलिए इसके लिए कोई आवश्यकता नहीं है।

विज्ञापन 2. यह सब जेडब्ल्यूटी पैदा करने के लिए एक गुप्त कुंजी का उपयोग करने के सर्वर साइड अनुप्रयोग के लिए एक आम बात है।

विज्ञापन 3. जांच करता है, तो टोकन अपने एपीआई के लिए प्रत्येक अनुरोध को समाप्त हो गई और अनुमति नहीं देतीं, तो टोकन समाप्त हो गया, 401 स्थिति कोड वापस किया है। क्लाइंट ऐप को प्रमाण पत्र के लिए उपयोगकर्ता को संकेत देना चाहिए और नए जेडब्ल्यूटी का अनुरोध करना चाहिए। यदि आप क्रेडेंशियल्स को पुनः सबमिट करने से बचाना चाहते हैं तो आप एक ताज़ा टोकन जारी कर सकते हैं जिसे बाद में नए जेडब्ल्यूटी उत्पन्न करने के लिए उपयोग किया जा सकता है।

JWT refresh token flow

http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web-api-2-owin/

+0

उत्तर के लिए धन्यवाद। क्या आप कृपया थोड़ा आगे विस्तार कर सकते हैं: क्या होगा यदि मैं सर्वर पक्ष से किसी विशेष टोकन के लिए पहुंच निरस्त करना चाहता हूं? और, यदि मैं प्रत्येक उपयोगकर्ता के लिए एक नई गुप्त कुंजी उत्पन्न करने का प्रयास करता हूं, तो क्लाइंट के लिए, क्या मुझे इसे भी हैश करना चाहिए और उसे स्थानीय स्टोरेज में स्टोर करना चाहिए ताकि पेलोड से जानकारी निकालने के लिए नए टोकन को डीकोड किया जा सके? –

+0

सही तरीके से लागू होने पर, आप भरोसा कर सकते हैं कि आपके उपयोगकर्ताओं से जेडब्ल्यूटी पेलोड्स आपके द्वारा मूल रूप से भेजे गए _unaltered_ डेटा हैं। आप टोकन को रद्द करने के लिए इसका लाभ उठा सकते हैं: प्रत्येक पेलोड में "मान्य" ध्वज जोड़ें और यदि यह गलत पर सेट किया गया है तो पुन: प्राधिकरण को मजबूर करें। – sedge

+0

हाँ, लेकिन अगर कोई लॉगआउट नहीं करता है तो आपने लॉग इन नहीं किया है, तो अब कोई और इस जीवनकाल के लिए इस टोकन का उपयोग कर सकता है ?? –

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