2012-04-30 182 views
6

我需要擴展內置的WCF身份驗證,所以我的新身份驗證應該與內置身份驗證一起使用。WCF擴展身份驗證

舉例來說,我想允許從註冊的IP(自定義AUTH)或用戶名+密碼(內置AUTH)的訪問。

我已經成功地實現ServiceAuthenticationManagerServiceAuthorizationManager

ServiceAuthenticationManager.Authenticate簡單地增加IPrincipal實施消息屬性,ServiceAuthorizationManager.CheckAccessCore拷貝IPrincipal從傳入消息屬性AuthorizationContext性質。

然而,ServiceAuthenticationManager.Authenticate完全打破了標準的機制,即使我回到authPolicybase.Authenticate調用的結果。

也許我走錯了方向?添加自定義WCF身份驗證的正確方法是什麼,不會影響現有的身份驗證?如果自定義失敗,如何回退到內置身份驗證?

回答

0

正確的做法:

在OnOpening設置的ServiceHost覆蓋

Authorization.PrincipalPermissionMode = PrincipalPermissionMode.Custom; 
Authorization.ExternalAuthorizationPolicies = new ReadOnlyCollection<IAuthorizationPolicy>(new[] { new MyCustomAuthorizationPolicy() }); 

在自定義策略的評估方法分配評價中,「PrimaryIdentity」來的IIdentity的三個屬性,「身份」,以身份的收集和「校長」 到IPrincipal的

evaluationContext.Properties["PrimaryIdentity"] = identity; 
evaluationContext.Properties["Identities"] = new List<IIdentity>(new[] { identity }); 
evaluationContext.Properties["Principal"] = principal;