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);
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ć. –