2012-04-30 2 views
6

Мне нужно расширить встроенную проверку подлинности WCF, поэтому мой новый должен работать бок о бок со встроенными.Расширение аутентификации WCF

Например, я хочу разрешить доступ с зарегистрированного IP (пользовательский auth) или с помощью имени пользователя + пароль (встроенный auth).

Я успешно реализовал ServiceAuthenticationManager и ServiceAuthorizationManager.

ServiceAuthenticationManager.Authenticate просто добавляет IPrincipal реализации к свойствам сообщений, ServiceAuthorizationManager.CheckAccessCore копии IPrincipal из входящих свойств сообщений в AuthorizationContext свойств.

Однако ServiceAuthenticationManager.Authenticate полностью разрушен для стандартных механизмов, даже если я возвращаю authPolicy или результат base.Authenticate.

Возможно, я пошел в неправильном направлении? Каков правильный способ добавления пользовательской проверки подлинности WCF, не затрагивая существующие? Как отказаться от встроенной аутентификации, если пользовательский сбой?

ответ

0

Правильный подход:

Настройка ServiceHost в OnOpening переопределения

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

В Evaluate метод таможенной политики назначить три свойства контекста оценки «PrimaryIdentity» в IIdentity, «Тождество» для сбора идентичности и «Принципал» по IPrincipal

evaluationContext.Properties["PrimaryIdentity"] = identity; 
evaluationContext.Properties["Identities"] = new List<IIdentity>(new[] { identity }); 
evaluationContext.Properties["Principal"] = principal; 
Смежные вопросы