2013-11-26 11 views
5

स्टैकफ्लो में कुछ समान विषय हैं लेकिन मुझे लगता है कि उनमें से कोई भी मेरे प्रश्न का उत्तर नहीं दे रहा है।वेब एपीआई एक्सेस टोकन को कैसे संग्रहीत किया जाना चाहिए?

ASP.NET वेब एपीआई 2 क्या हम अब का उपयोग करें। अब मैं अपने वेबएपीआई से CORS प्रमाणीकरण अनुरोध स्वीकार करने में सक्षम हूं। Authorization हैडर (वाहक xxx) में साथ भेजा पहुँच टोकन के साथ, मैं संसाधनों [Authorize] टैग द्वारा संरक्षित उपयोग करने में सक्षम हूँ।

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

को लागू करने के लिए इस "मुझे याद रखें" समारोह में अपने सुझाव क्या है?

+0

, संपादन के लिए धन्यवाद b__। – Blaise

उत्तर

4

आपका प्रमाणीकरण प्रदाता यदि आप ऐसा करने के लिए कार्यक्षमता देना चाहिए।

FormsAuthentication.RedirectFromLoginPage(strUserName, true); 

ऊपर "सही", एक सतत् कुकी सेट: यह अगर आप ASP.Net सदस्यता प्रदाता का उपयोग करने के लिए बहुत सरल है।

जब आप सीओआरएस का उपयोग करते हैं और अपने वेबएपी को प्रमाणीकरण कुकी भेजते हैं, तो वेबएपी परवाह नहीं है कि प्रमाणीकरण पुराने "मुझे याद रखें" कुकी या ताजा लॉगिन से है या नहीं। यह सब इस बात की परवाह करता है कि प्राधिकरण शीर्षलेख में पारित कुकी मान वैध है।

कुकी के एन्क्रिप्शन के लिए के रूप में, यह भी कुछ अपने प्रमाणीकरण प्रदाता आप बॉक्स से बाहर देना चाहिए है।

+0

उत्तर के लिए धन्यवाद। हम सीओआरएस का उपयोग कर रहे हैं और एक्सेस टोकन क्लाइंट साइड पर संग्रहीत किया जाना चाहिए, जो केवल HTML और जावास्क्रिप्ट है। ऐसा लगता है कि आप एक कुकी के अंदर टोकन संग्रहित करने का सुझाव देते हैं, है ना? – Blaise

+0

हां, यही वह है जो मैं कर रहा हूं। मुझे अब यह जोड़ने की जरूरत है कि हम एक केंद्रीकृत एसटीएस का उपयोग कर रहे हैं जो प्रमाणीकरण टोकन एन्क्रिप्ट करने के लिए प्रमाणपत्र का उपयोग करता है। यह ग्राहक पर डिक्रिप्शन प्रमाण पत्र के बिना बेकार है। इसलिए यही कारण है कि मेरे लिए कुकी का उपयोग करना मेरे लिए एक गैर-मुद्दा है, और यह मुझे इसके लिए आउट ऑफ़ द बॉक्स समाधान का उपयोग करने की अनुमति देता है। यदि आप यह नहीं चाहते हैं, तो आप ThinkTecture.com पर एक नज़र डाल सकते हैं। इन लोगों के पास एक समाधान है जो आपको कॉर्स प्रमाणीकरण के लिए जेसन टोकन भेज सकता है। – Morten

+0

धन्यवाद। क्या मैं जान सकता हूं कि आप "केंद्रीकृत एसटीएस" का उपयोग कर रहे हैं? – Blaise

6

मुझे याद रखें "समस्या यह है कि मैं एक समारोह के एक के समान लागू कर सकते हैं, कि" "सामान्य लॉगिन रूप में चेकबॉक्स?"

सहेजें clientside localStorage में टोकन जब "मुझे याद रखें" चेक किया गया है => जब टैब/ब्राउज़र बंद हो जाता है तो टोकन अभी भी जीवित है और अगली बार जब आप स्वचालित रूप से

क्लाइंटसाइड सत्र संग्रहण में टोकन सहेजें, "मुझे याद रखें" चेक नहीं किया गया है => हर बार जब आप एक टैब बंद करते हैं/ब्राउज़र सत्र भंडारण को मंजूरी दे दी है। अगली बार जब आप टोकन की जांच करेंगे तो यह अस्तित्व में नहीं है। इसलिए यो फिर से प्रवेश करने के लिए है ...

"हम सभी चाहते हैं कि उपयोगकर्ता फिर से अगली बार लॉग इन करने के हमारे वेबपेज पर जाकर की जरूरत नहीं है है।"

उपरोक्त उत्तर देखें!

क्या केवल एक सत्र के लिए पहुंच टोकन है?

हाँ ब्राउज़र में एक टैब एक सत्र है।

वेबएपीआई 2 टोकन की समाप्ति कैसे सेट करता है?

टोकन की समयसीमा समाप्त होने पर आप समय निर्धारित करते हैं!

हम सत्र में कुछ जानकारी कैसे सहेज सकते हैं या ऐसी प्रमाणीकरण जानकारी संग्रहीत करने के लिए स्थानीय संग्रहण का उपयोग कैसे कर सकते हैं?

केवल ग्राहक के पक्ष एन्क्रिप्टेड टोकन संगृहीत कभी नहीं userid/पासवर्ड

जब हम ग्राहक के पक्ष में इस टोकन संगृहीत, हम एन्क्रिप्शन के कुछ प्रकार की जरूरत है उसे बचाने के लिए करते हैं?

टोकन सर्वर पक्ष पर एन्क्रिप्ट किया गया है और फिर प्रत्येक अनुरोध के लिए क्लाइंट को भेजा जाता है। ग्राहक को टोकन पढ़ने में सक्षम होने की आवश्यकता नहीं है। क्लाइंट को इसे हमेशा अनुरोध के साथ भेजना होगा।

+2

मुझे प्रश्न पता है और उत्तर पुराना है, लेकिन फिर भी: सत्र स्टोरेज के साथ समस्या यह है कि यह एक ही ब्राउज़र के टैब के बीच लगातार नहीं है। यदि उपयोगकर्ता किसी लिंक से एक नया टैब/विंडो खोलने का प्रयास करता है तो वह वर्तमान टैब/विंडो पर जो काम कर रहा है उसे खोने की कोशिश नहीं करता है, तो एप्लिकेशन फिर से लॉगिन करने के लिए कहेंगे क्योंकि उस नए टैब/विंडो के लिए कोई ऑब्जेक्ट नहीं होगा sessionStorage अब ... – CesarD

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