2016-02-22 23 views
5

Mam usługę WCF, w której używam niestandardowego UserNamePasswordValidator do sprawdzania poprawności użytkownika.Logowanie przy użyciu opcji IAuthorizationPolicy i UserNamePasswordValidator z danymi nagłówka?

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

Kiedy to zrobił to IAuthorizationPolicy.Evaluate jest wyzwalany i to, gdzie ustawić kapitał do kontekstu użytkownika niestandardowego jak ten:

evaluationContext.Properties["Principal"] = userContext; 

Problemem jest to, że muszę 2 rzeczy, aby uzyskać właściwy usercontext i jest to nazwa użytkownika oraz wartość z nagłówka.

wiem, że mogę użyć messageinspector aby uzyskać dane nagłówka tak:

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

Ale muszę dostać tę informację w sposób Szacowanie więc mogę dokonać właściwego loginu (zestaw kapitał). Czy to możliwe? A jeśli tak, to w jaki sposób? Jaka jest alternatywa?

PS. Zostanie to wykonane przez wywołanie, więc nie można użyć żadnej konkretnej metody logowania.

rozwiązany:

skończyło się tak:

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

Jeden brudna sztuczka mogę myśleć w AfterReceiveRequest wyodrębnić wartości z nagłówka i ustawić go na claimset tożsamości, a następnie w Ocenić wyodrębnić go z claimset tożsamość i używać go jednak chcesz. Nie próbowałem tego, ale myślę, że to powinno działać. –

Odpowiedz

1

można próbować uzyskać dostęp do danych nagłówka z tym?

WebOperationContext.Current.IncomingRequest.Headers