2016-02-22 25 views
5

Kullanıcı doğrulamak için özel bir KullanıcıAdıPasswordValidator kullandığım bir WCF hizmetim var.Başlık verisi ile IAuthorizationPolicy ve UserNamePasswordValidator ile giriş yap?

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

bu IAuthorizationPolicy.Evaluate tetiklenir yapılır ve böyle bir özel kullanıcı bağlamına müdürü set nerede bu olduğunda:

evaluationContext.Properties["Principal"] = userContext; 

Sorun almak için 2 şey gerektiğidir Doğru kullanıcı sözleşmesi ve bu kullanıcı adı ve başlıktan bir değer.

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"); 
     } 

Ama uygun bir giriş (set anapara) yapabilir yüzden değerlendirin yönteminde bu bilgileri almak gerekir:

ben böyle başlık verilerini almak için bir messageinspector kullanabilirsiniz biliyoruz. Mümkün mü? Ve eğer öyleyse, nasıl? Alternatif nedir?

PS. Bu çağrı ile yapılacaktır, böylece belirli bir giriş yöntemi kullanılamaz.

Çözüldü:

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

Bir kirli hüner kimliğin claimset çıkartıp bununla birlikte istediğiniz kullanmak değerlendirin. Denemedim ama sanırım işe yaramalı. –

cevap

1

Bu konuda başlık verilerine erişmek için deneyebilir miyim:

bu ile sona erdi? Ben de o zaman başlığından değerleri ayıklamak AfterReceiveRequest olduğunu düşünüyorum ve kimliğin claimset üzerine belirleyebilir ve

WebOperationContext.Current.IncomingRequest.Headers