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);
Bir kirli hüner kimliğin claimset çıkartıp bununla birlikte istediğiniz kullanmak değerlendirin. Denemedim ama sanırım işe yaramalı. –