2011-06-28 13 views
9

मैं एक ASP.Net सी # आवेदन WebServices हर 5 मिनट का उपयोग करके बाहरी एपीआई से कनेक्ट करने की जरूरत है कि है अद्यतन कर रहा है के लिए बेस्ट प्रैक्टिस।भंडारण और बाहरी एपीआई पासवर्ड

  • उपयोगकर्ता नाम और पासवर्ड की आवश्यकता होती है
  • मैं यूज़रनेम और पासवर्ड प्रत्येक वेब सेवा अनुरोध
  • पासवर्ड के साथ संचारित चाहिए हर 90 दिनों की समय सीमा समाप्त और होना चाहिए:

    बाहरी वेब सेवा की आवश्यकताओं को इस प्रकार हैं समाप्ति तिथि से पहले बदल दिया

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

मैं पिछले के सभी का निर्माण किया है की आवश्यकता होती है, लेकिन मैं इस समय एक मुद्दा है। वर्तमान और ऐतिहासिक पासवर्ड संग्रहीत करने के लिए सबसे अच्छा अभ्यास क्या है?

स्पष्ट रूप से सादे टेक्स्ट पासवर्ड संग्रहीत करना एक खराब समाधान है। मुझे अपना webservice पासवर्ड पढ़ने और प्रत्येक अनुरोध के साथ संचारित करने में सक्षम होना चाहिए। मुझे यह सुनिश्चित करने के लिए सभी ऐतिहासिक पासवर्ड तक पहुंचने में भी सक्षम होना चाहिए कि मेरा नया जेनरेट किया गया पासवर्ड डुप्लिकेट नहीं है।

आदर्श रूप में, मैं अपने डेटाबेस में प्रत्येक (एन्क्रिप्टेड) ​​पासवर्ड की दुकान है और यह डिक्रिप्ट जब भी मैं वेब सेवा कॉल करने की आवश्यकता करना चाहते हैं। क्या मुझे सबसे अच्छा अभ्यास करना चाहिए? क्या मुझे Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Cryptographer.EncryptSymmetric (..) का उपयोग करके प्रत्येक पासवर्ड एन्क्रिप्ट करना चाहिए?

नोट: दुर्भाग्य से, मेरे पास बाहरी API फ़ंक्शन के तरीके को बदलने के लिए कोई पहुंच नहीं है। मुझे प्रदान किए गए नियमों का पालन करना होगा।

+0

स्टिक पासवर्ड के अंत में एक 5 अंकों काउंटर, संख्या महीनों के साथ? –

उत्तर

6

पासवर्ड इतिहास के संबंध में मैं दो मार्गों में से एक नीचे जाना होगा: फ़ाइल में

  1. अपने वर्तमान योजना के अनुसार दुकान पासवर्ड/db/config - सुझाव है कि आप एक का उपयोग "समानता" के लिए संग्रहीत पासवर्ड हैश के साथ नए पासवर्ड की तुलना करने के लिए हैशिंग एल्गोरिदम (एन्क्रिप्शन के विपरीत)।

  2. पासवर्ड इतिहास को संग्रहीत करने से परेशान न करें - पासवर्ड बदलने का पहला प्रयास वेब सेवा को बस विफल होने पर विफल होने दें, फिर वैकल्पिक पासवर्ड के साथ पुनः भेजें। इस तरह, आप पासवर्ड परिवर्तन वेब सेवा के व्यावसायिक नियमों को डुप्लिकेट नहीं कर रहे हैं (उदाहरण के लिए, मान लें कि वे इसे 6 महीने के बाद पासवर्ड का पुनः उपयोग करने की अनुमति देने के लिए बदलते हैं)।

वर्तमान पासवर्ड भंडारण के संबंध में: यह सोचते हैं आप प्लेन टेक्स्ट के रूप में पासवर्ड भेजना होगा, तो हाँ, आप इसे एन्क्रिप्टेड रूप में संग्रहीत करना चाहिए।ऐसा करने के तरीके पर out there पर कई लेख हैं। या आप अपनी कॉन्फ़िगरेशन फ़ाइल के विशिष्ट अनुभाग को भी seen here एन्क्रिप्ट कर सकते हैं।

0

ASP.NET आईआईएस पंजीकरण उपकरण (aspnet_regiis.exe) एन्क्रिप्ट और web.config के वर्गों को डिक्रिप्ट कर सकते हैं। एप्लिकेशन में कोई विशेष कोड आवश्यक नहीं है, क्योंकि ASP.NET 2.0 रनटाइम पर अनुभागों को जादुई रूप से डिक्रिप्ट करेगा।

http://msdn2.microsoft.com/en-us/library/zhhddkxy.aspx

+0

यह मेरी समस्या को हल करने के लिए प्रतीत नहीं होता है। – Jon

+0

-1 गतिशील रूप से web.config को संशोधित करना एक भयानक विचार की तरह लगता है – Earlz

+0

@earlz - कुछ भी गतिशील रूप से संशोधित नहीं है। आप कमांड लाइन से तैनाती के समय पर ऐसा करते हैं। मैं सुझाव देना चाहता हूं कि आप उस डाउनवोट को पूर्ववत करें क्योंकि यह एक सूचित वोट नहीं था। धन्यवाद। – Kev

1

सबसे आसान तरीका है ... ProtectedData वर्ग का उपयोग करें: वर्ष 2010 के बाद से

http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx

byte[] bytes = System.Text.Encoding.UTF8.GetBytes(password); 
byte[] cypher = ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser); 
//... reverse 
byte[] bytes = ProtectedData.Unprotect(cypher, null, DataProtectionScope.CurrentUser); 
string password = System.Text.Encoding.UTF8.GetString(bytes); 
संबंधित मुद्दे