2012-04-30 17 views
6

Necesito extender la autenticación incorporada WCF, por lo que mi nuevo debería funcionar lado a lado con los integrados.Autenticación extensión WCF

Por ejemplo, quiero permitir el acceso desde la IP registrada (autenticación personalizada) o con nombre de usuario + contraseña (autenticación incorporada).

Implementé con éxito ServiceAuthenticationManager y ServiceAuthorizationManager.

ServiceAuthenticationManager.Authenticate simplemente añade IPrincipal aplicación a las propiedades del mensaje, ServiceAuthorizationManager.CheckAccessCore copias IPrincipal de propiedades de los mensajes entrantes a AuthorizationContext propiedades.

Sin embargo, ServiceAuthenticationManager.Authenticate está completamente roto para los mecanismos estándar, incluso si devuelvo authPolicy o el resultado de la llamada base.Authenticate.

¿Quizás fui en la dirección incorrecta? ¿Cuál es la forma correcta de agregar autenticación WCF personalizada, sin afectar a las existentes? ¿Cómo recurrir a la autenticación integrada si falla la función personalizada?

Respuesta

0

enfoque correcto:

ServiceHost de instalación en OnOpening anulan

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

En el método de evaluación de la política de encargo asignar tres propiedades del contexto de evaluación "PrimaryIdentity" a IIdentity, "Identidades" al conjunto de identidades y "Principal" para IPrincipal

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