Nombre de usuario WCF sin certificado

Estoy trabajando en un proyecto donde necesito lo siguiente.

Servicio WCF en el lado del servidor (.NET 3.5)Cliente WPF para el lado del cliente (.NET 3.0)

Tengo una aplicación existente de la que tengo que usar la autenticación y autorización (en el lado del servidor). También necesito almacenar algunos metadatos sobre el usuario en el Principal de subprocesos del servicio WCF (un objeto del sitio). Hago esto para poder acceder al servicio WCF si es absolutamente necesario; alguna lógica de negocios puede requerirlo. Entonces mi plan era hacer lo siguiente ...

Cree un ServiceAuthorizationManager personalizado para el servidor y allí iniciaré sesión en el usuario y obtendré los roles de la aplicación existente. Guardaré en caché el objeto "Sitio" y, tras más solicitudes, extraeré del caché. También necesitaré un objeto CustomPrincipal para guardar mis datos personalizados. Quiero suplantar al usuario para que pueda usar el filtrado de roles incorporado en WCF de esta manera:

[PrincipalPermission(SecurityAction.Demand, Role = "Role1")]
public string[] RolesForUser(string username){}

Intenté usar la autorización ASP.NET con un proveedor de roles personalizado, pero no pude configurar nada en el Principal actual. También intenté usar una IAuthorizationPolicy personalizada, pero surgieron problemas. Estos problemas tenían que ver con la posibilidad de utilizar la aplicación WCFClient.exe, cuando descubría (utilizando el endoso mex) no daba credenciales, por lo que el inicio de sesión fallaba. Finalmente decidí que un ServiceAuthorizationManager era el camino correcto, pero estoy abierto a otras sugerencias.

En el cliente, reuniré las credenciales y las colocaré en la clase de proxy WCF, de la siguiente manera.

proxy.ChannelFactory.Credentials.UserName.UserName = userName;
proxy.ChannelFactory.Credentials.UserName.Password = password;

Cuando comencé a seguir esta ruta, noté que no podía obtener el nombre de usuario / contraseña en el método CheckAccessCore de mi clase de administrador. La investigación adicional mostró que realmente debería autenticarme en un UserNamePasswordValidator personalizado. Entonces creé uno de esos. El problema es que nunca se llamó al método de validación.

La investigación adicional demostró que para que el método de validación se llame, mi servicio WCF debe tener seguridad de mensaje o de nivel de transporte. El problema con eso es que no puedo entender cómo tener un mensaje o seguridad de nivel de transporte sin unX.509 certificado. Este producto entra en varios cientos de máquinas increíblemente bloqueadas, y no es posible instalar un certificado.

¿Hay alguna manera de hacer lo que le pido sin instalar un certificado?