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