2016-02-22 20 views
5

我有一個WCF服務,我使用自定義的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; 

的問題是,我需要兩件事情讓正確的用戶上下文,這是用戶名和頭的值。

我知道,我可以用一個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"); 
     } 

但我需要在評估方法這個信息,所以我可以作出適當的登錄(集本金)。可能嗎?如果是這樣,怎麼樣?什麼是替代方案?

PS。這將通過調用完成,因此不能使用特定的登錄方法。

解決:

我結束了與此:

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

一個使壞我可以想到的是在AfterReceiveRequest你提取標題值,並將其放在身份的claimset然後評估來自身份的claimset提取和使用它不過你想要的。我沒有嘗試過,但我想它應該工作。 –

回答

1

你可以嘗試用此來訪問頭數據?

WebOperationContext.Current.IncomingRequest.Headers 
相關問題