2016-02-22 4 views
5

मेरे पास एक डब्ल्यूसीएफ सेवा है जहां मैं उपयोगकर्ता को मान्य करने के लिए एक कस्टम UserNamePasswordValidator का उपयोग करता हूं।हेडर डेटा के साथ IAuthorizationPolicy और UserNamePasswordValidator के साथ लॉगिन करें?

public override void Validate(string userName, string password) 
     { 
      LoginHelper loginHelper = new LoginHelper(); 
      loginHelper.ValidateUserRegularLogin(userName, password); 
     } 

जब ऐसा होता है IAuthorizationPolicy.Evaluate शुरू हो रहा है और इस जहां मैं इस तरह एक कस्टम उपयोगकर्ता संदर्भ के लिए प्रिंसिपल सेट किया गया है:

evaluationContext.Properties["Principal"] = userContext; 

समस्या यह है कि मैं 2 बातें की जरूरत है पाने के लिए है उचित usercontext और यह उपयोगकर्ता नाम और शीर्षलेख से एक मान है।

मुझे पता है कि मैं इस तरह हैडर डेटा प्राप्त करने के एक messageinspector उपयोग कर सकते हैं:

public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext) 
     { 
      IntegrationHeader integrationHeader; 
      LoginHandler loginHandler; 
      UserContextOnService userContext = null; 

      if (request.Headers.Action == null || request.Headers.Action.ToString().Length < 1) 
       return null; 

      foreach (var header in request.Headers) 
      { 
       if (header.Namespace == "ns" && header.Name == "SecurityToken") 
       { 

        return null; 
       } 
      } 

      throw new SecurityTokenException("Unknown username or invalid password"); 
     } 

लेकिन मैं तो मैं एक उचित लॉगिन (सेट प्रिंसिपल) कर सकते हैं मूल्यांकन पद्धति में यह जानकारी प्राप्त करने की जरूरत है। क्या यह संभव है? और यदि हां, तो कैसे? विकल्प क्या है?

पी एस। यह कॉल द्वारा किया जाएगा ताकि कोई विशिष्ट लॉगिन विधि का उपयोग नहीं किया जा सके।

हल:

integrationHeader = OperationContext.Current.IncomingMessageHeaders.GetHeader<IntegrationCertificateHeader>(header.Name, header.Namespace); 
+0

एक गंदा चाल मैं आप हैडर से मान एक्सट्रैक्ट AfterReceiveRequest में है के बारे में सोच और पहचान के claimset पर सेट कर सकते हैं और फिर पहचान की claimset से निकालने और का उपयोग यह तथापि आप चाहते हैं का मूल्यांकन करें। मैंने कोशिश नहीं की है लेकिन मुझे लगता है कि इसे काम करना चाहिए। –

उत्तर

1

आप इस के साथ शीर्ष लेख डेटा का उपयोग करने की कोशिश कर सकते हैं:

मैं इस के साथ समाप्त हो गया?

WebOperationContext.Current.IncomingRequest.Headers 
संबंधित मुद्दे