6

हम एक मंच बना रहे हैं जहां ग्राहक एएसपी नेट एमवीसी एक है, प्रमाणीकरण और प्राधिकरण (दावाों का उपयोग करके) के लिए एएसपी नेट पहचान 2.0 का उपयोग कर, जो कि बहुत अच्छा काम करता है वेब पक्षएएसपी .NET एमवीसी और डब्ल्यूसीएफ पहचान (दावों) एकीकरण

हम यह भी एक WCF सेवा है जो (कई ग्राहक अनुप्रयोगों के लिए) डेटाबेस पर CRUD संचालन की अनुमति देता है, जो इस एएसपी नेट MVC ग्राहक से अनुरोध हो जाता है। हम मान्य करने के लिए चाहते हैं के रूप में (प्रमाणित & अधिकृत) उपयोगकर्ता WCF पक्ष में विशिष्ट CRUD कार्रवाई करने से पहले, हम ग्राहक से उपयोगकर्ता के दावों प्राप्त करने की आवश्यकता है, और सत्यापन (हैडर का उपयोग करने के लिए प्रदर्शन अधिमानतः एक बहुत साफ ढंग से या किसी भी बाध्यकारी कि डब्ल्यूसीएफ इस मामले के लिए समर्थन करने में सक्षम हो जाएगा)।

मैं अलग मंचों खोज किया गया है, लेकिन इस विशिष्ट परिदृश्य के लिए कोई सरल उत्तर \ ट्यूटोरियल के साथ। क्या कोई इस मामले पर सहायता कर सकता है?

धन्यवाद, Nir।

+0

Nir, तो अपनी समस्या अपने WCF सेवा का दावा गुजर रहा है। आप पहचान से प्राप्त वास्तविक दावों को पारित कर सकते हैं, या आप एक सरणी या डीटीओ को उन मानों को पारित कर सकते हैं जो प्राधिकरणों और आईडी का प्रतिनिधित्व करते हैं, आप अपनी सेवा में भेजना चाहते हैं ... –

+0

@nirpi, आप अपनी सेवा का उपभोग करना चाहते हैं : प्रमाण पत्र या सुरक्षा टोकन? –

+0

@DaveAlperovich, मैं, हेडर से दावों पाने के लिए यदि संभव हो तो करना चाहते हैं, तो मैं करने के लिए "गंदे" मेरे सभी सार्वजनिक प्रमाणीकरण के लिए अतिरिक्त पैरामीटर के साथ तरीकों की जरूरत नहीं होगी। – nirpi

उत्तर

1

मैं इस प्यार: अपने IEndpointBehavior कार्यान्वयन में

ग्राहक अंत पर ऐसा करते हैं:

public object BeforeSendRequest(ref Message request, IClientChannel channel) 
    { 
     request.Headers.Add(MessageHeader.CreateHeader("token", "http://myurl.com/service/token", _theToken)); 
     return null; 
    } 
तो सेवा छोर पर

अपने ServiceAuthenticationManager में जोड़ना

public override ReadOnlyCollection<IAuthorizationPolicy> Authenticate(
     ReadOnlyCollection<IAuthorizationPolicy> authPolicy, Uri listenUri, ref Message message) 
    { 
     IPrincipal user = new MyUserPrincipal(null); 

     if(_currentServiceContractType.GetInterfaces() 
             .Any(x => x == typeof(IMySecuredService))) 
     { 
      var tokenPosition = message.Headers.FindHeader("token", "http://myurl.com/service/token"); 

      if (tokenPosition >= 0 && tokenPosition <= 5) 
      { 
       var encryptedToken = message.Headers.GetHeader<string>(tokenPosition); 

       if (!string.IsNullOrWhiteSpace(encryptedToken)) 
       { 
        var serializedToken = new MyEncryptionUtility().Decrypt(encryptedToken); 
        var token = MyTokenSerializer.Deserialize(serializedToken); 
        var expire = new DateTime(token.ValidToTicks); 
        if (expire > DateTime.Now) 
        { 
         user = new MyUserPrincipal(token); 
        } 
       } 
      } 
     } 
     message.Properties["Principal"] = user; 
     Thread.CurrentPrincipal = user; 
     return authPolicy; 
    } 

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

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