2012-12-19 29 views
9

का उपयोग करते हुए एज़ूर वेब भूमिकाओं को स्केल करते समय सुरक्षा एपीआई अपवाद जब मैं विंडोज लाइव और Google के खिलाफ एज़ूर एसीएस का उपयोग कर रहा हूं और यह बिना किसी समस्या के चल रहा है। कल रात हमने 1 रनिंग इंस्टेंस से 3 तक उदाहरणों को बढ़ाया और तब से लोगों ने हमारी साइट तक पहुंचने पर मुद्दों की सूचना दी है। हमने इसे निम्नलिखित अपवाद पर पाया है जो काफी नियमित आधार पर होता है।एसीएस

हम मानते हैं कि हमें हमारी कॉन्फ़िगरेशन में कहीं समस्या है लेकिन यह सुनिश्चित नहीं है कि हम क्या खो रहे हैं। हमने मशीन कुंजी सेट की है ...

<machineKey decryption="AES" decryptionKey="F7_SOMETHING_SOMETHING_FA" validation="SHA1" validationKey="63_SOMETHING_SOMETHING_BF" /> 

क्या कोई इस समस्या पर कुछ प्रकाश डाल सकता है?

System.InvalidOperationException: ID1073: A CryptographicException occurred when attempting to decrypt the cookie using the ProtectedData API (see inner exception for details). If you are using IIS 7.5, this could be due to the loadUserProfile setting on the Application Pool being set to false. ---> System.Security.Cryptography.CryptographicException: Key not valid for use in specified state. 

    at System.Security.Cryptography.ProtectedData.Unprotect(Byte[] encryptedData, Byte[] optionalEntropy, DataProtectionScope scope) 
    at Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Decode(Byte[] encoded) 
    --- End of inner exception stack trace --- 
    at Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Decode(Byte[] encoded) 
    at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(Byte[] cookie, Boolean outbound) 
    at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver) 
    at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(Byte[] token, SecurityTokenResolver tokenResolver) 
    at Microsoft.IdentityModel.Web.SessionAuthenticationModule.ReadSessionTokenFromCookie(Byte[] sessionCookie) 
    at Microsoft.IdentityModel.Web.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken& sessionToken) 
    at Microsoft.IdentityModel.Web.SessionAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs) 
    at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

नोट: संदर्भ के लिए। इस एक Windows Azure वेब भूमिका में चल रहा है और MVC 4.

उत्तर

7

अब जब कि तुम बाहर बढ़ा लिया है और के बाद से अपने आवेदन एक लोड संतुलन के पीछे होस्ट किया गया है, तो यह है कि अपने उपयोगकर्ता सर्वर एक पर नेविगेट संभव है है, सर्वर ए पर डीपीएपीआई द्वारा सुरक्षित सत्र कुकी प्राप्त की गई, लेकिन जैसे ही वे साइट के चारों ओर ब्राउज़ करना जारी रखते हैं, लोड बैलेंसर सर्वर बी पर निष्पादित करने के अनुरोध को पुनर्निर्देशित करता है। ऐसा होने पर, सर्वर बी में मिलान करने वाली मशीन कुंजी नहीं होती है, इसलिए यह असमर्थ है सत्र कुकी को डिक्रिप्ट करने और उपरोक्त त्रुटि को फेंकने के लिए। यहां तीन तरीके हैं जिनमें आप इस मुद्दे को हल कर सकते हैं।

विंडोज आइडेंटिटी फाउंडेशन (डब्ल्यूआईएफ) एक आउट-ऑफ-बैंड रनटाइम है जिसे कंप्यूटर पर स्थापित किया जाना चाहिए ताकि आपके दावे-जागरूक एप्लिकेशन इसका उपयोग कर सकें। Windows Azure उदाहरणों पर डिफ़ॉल्ट रूप से WIF स्थापित नहीं है। अपने क्लाउड दावों-जागरूक एप्लिकेशन को चलाने के लिए, आपको Windows Azure इंस्टेंस पर WIF रनटाइम उपलब्ध करना होगा। ऐसा करने का सबसे आसान तरीका है तैनाती पैकेज के साथ डब्ल्यूआईएफ असेंबली को शामिल करना।

, विंडोज Azure तैनाती पैकेज

  1. समाधान Explorer में साथ WIF विधानसभा शामिल करने के लिए अपने दावे को अवगत आवेदन का पता लगाने।
  2. संदर्भ फ़ोल्डर का विस्तार करें।
  3. संदर्भ फ़ोल्डर के अंतर्गत Microsoft.IdentityModel असेंबली का पता लगाएं।
  4. असेंबली राइट-क्लिक करें, और उसके बाद गुणक्लिक करें।
  5. गुण विंडो में, स्थानीय को सही और विशिष्ट संस्करण के रूप में गलत कॉपी करें निर्दिष्ट करें।

डिफ़ॉल्ट रूप से, WIF कुकीज़ को क्रिप्टोग्राफी डेटा संरक्षण एप्लीकेशन प्रोग्रामिंग इंटरफेस (DPAPI) का उपयोग कर सुरक्षा करता है। डीपीएपीआई विंडोज़ एज़ूर पर उपलब्ध नहीं है। यह सुनिश्चित करने के लिए कि आपके क्लाउड दावे-जागरूक वेब एप्लिकेशन सही ढंग से Windows Azure पर तैनात किए जाने पर कार्य करता है, आपको आरएसए का उपयोग करके कुकीज़ एन्क्रिप्शन कार्यक्षमता जोड़नी होगी।

आरएसए

  1. का उपयोग कर समाधान Explorer में कुकीज़ को एनक्रिप्ट करने के लिए, आपके क्लाउड दावों अवगत वेब अनुप्रयोग का पता लगाने।
  2. विजुअल स्टूडियो एडिटर में global.asax फ़ाइल के पीछे कोड जो global.asax.cs फ़ाइल खोलें।

निम्नलिखित घोषणाओं जोड़ें:

void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e) 
{ 
    // 
    // Use the <serviceCertificate> to protect the cookies that are 
    // sent to the client. 
    // 
    List<CookieTransform> sessionTransforms = 
     new List<CookieTransform>(new CookieTransform[] { 
     new DeflateCookieTransform(), 
     new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate), 
     new RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate) }); 
    SessionSecurityTokenHandler sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly()); 
    e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler); 
} 

void Application_Start(object sender, EventArgs e) 
{ 
    FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated; 

अधिक जानकारी यहां पाया जा सकता है:

using Microsoft.IdentityModel.Tokens; 
using Microsoft.IdentityModel.Web; 
using Microsoft.IdentityModel.Web.Configuration; 

निम्न कोड जोड़ें http://msdn.microsoft.com/en-us/library/hh289318.aspx

2

यह आम अपवाद में WIF का उपयोग करते समय है farm पर्यावरण। मुद्दा यह है कि कुकी को एन्क्रिप्ट करने के लिए डीपीएपीआई का डिफ़ॉल्ट व्यवहार है। हालांकि डीपीएपीआई मशीनकी बाध्य है।

आपको ग्लोबल में एक छोटा सा बदलाव करना है। एएसएक्स और फेडऑथ कुकी को एन्क्रिप्ट/डिक्रिप्ट करने के लिए आरएसए क्रिप्टो सेवा प्रदाता का उपयोग करें। this article on how to achieve that पर एक नज़र डालें।

1

मैं एसीएस का उपयोग एक एमवीसी 4 ऐप के साथ विंडोज़ एज़ूर वेबसाइट इंस्टेंस बनाम क्लाउड सेवा के रूप में तैनात करने के दौरान एक समान समस्या में भाग गया। निम्नलिखित ने मुझे समस्या को हल करने में मदद की। http://msdn.microsoft.com/en-us/library/hh568644.aspx

बहुत नीचे स्क्रॉल करें और उदाहरण ढूंढें जो सत्र सुरक्षा को टोकनहैंडलर को हटा रहा है और इसे मशीनकेसेशन सिक्योरिटी टोकन हैंडलर से बदल रहा है।