c# - IIS अनुप्रयोग पर ProtectedData.Unprotect-IISRESET के बाद काम करने में विफल रहता है




iis-7 dpapi (2)

मुझे एक स्थानीय डेटाबेस से संवेदनशील डेटा को संग्रहित और पुनर्प्राप्त करने की आवश्यकता है - यह डेटा किसी वेब एप्लिकेशन द्वारा उपयोग किया जाता है

रक्षात्मक डेटा वर्ग का उपयोग करने के लिए मैंने कहा डेटा को ProtectedData के लिए

IIS अनुप्रयोग किसी विशिष्ट एडी उपयोगकर्ता (उन्नत सेटिंग में पहचान संपत्ति) का उपयोग कर चल रहा है।

जब तक मैं एक IISRESET नहीं करता सब कुछ ठीक काम करता है - इस समय, ऐसा प्रतीत होता है कि ProtectedData डेटा श्रेणी के उद्देश्यों के लिए पहचान बदल जाती है, और मुझे डेटा के साथ छोड़ दिया गया है जो मैं डिक्रिप्ट नहीं कर सकता - मैं Key not valid for use in specified state हूं Key not valid for use in specified state अपवाद

यह कोड मैं उपयोग कर रहा हूं:

    static public string Encrypt(string data)
    {
        var encryptedData = ProtectedData.Protect(System.Text.Encoding.UTF8.GetBytes(data), entropy, DataProtectionScope.CurrentUser);
        return Convert.ToBase64String(encryptedData);
    }

    static public string Decrypt(string base64string)
    {
        var encryptedData = Convert.FromBase64String(base64string);
        return System.Text.Encoding.UTF8.GetString(ProtectedData.Unprotect(encryptedData, entropy, DataProtectionScope.CurrentUser));
    }

entropy स्पष्ट रूप से मेरे आवेदन के लिए स्थिर है।

क्या चल रहा है? मैं इस धारणा के तहत था कि DataProtectionScope.CurrentUser का उपयोग करेगा, जैसा कि नाम का तात्पर्य है, वर्तमान उपयोगकर्ता - जो होना चाहिए, मेरे ज्ञान के लिए, अनुप्रयोग पूल पहचान ऐसा क्यों लगता है जब मैं एक IISRESET करते हैं तो यह बदल जाता है?


एएसपी.नेट कोर डाटा प्रोटेक्शन एपीआई का उपयोग करते समय मेरे पास सटीक त्रुटि थी, और जिन लोगों के लिए यह त्रुटि थी, कृपया पुष्टि करें कि लोड यूसरप्रोफ़ाइल को एप्लिकेशन पूल यूजर के लिए सक्षम किया गया था।


हालांकि मुझे नहीं पता कि यह क्यों हो रहा है, मैंने इसके बदले एईएस एन्क्रिप्शन का उपयोग करने के लिए कोड बदल दिया - यह ठीक काम कर रहा है।

हालांकि समस्या का उत्तर नहीं प्रति-कहने के लिए मुझे लगता है कि यह एक वैध समाधान है जिसका उल्लेख करना उचित है।

संपादित करें :

मुझे लगता है कि मैंने पाया है कि इस मुद्दे का कारण क्या था (मुझे अभी भी पता नहीं है कि यह क्यों हो रहा है, लेकिन मैंने आज कुछ ध्यान दिया है)।

यदि वेब अनुप्रयोग ApplicationPool पहचान का उपयोग कर रहा है, तो सभी ठीक है और ठीक है और डीपीएपीआई को IISRESET के बाद काम करना जारी रखना चाहिए। हालांकि अगर मैं एडी में परिभाषित विशिष्ट उपयोगकर्ता को पहचान बदलता हूं, तो एप्लिकेशन पूल के पुनर्नवीनीकरण के बाद चीजें गड़बड़ हो जाती हैं।

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





dpapi