Si se refiere a la this topic (WCF Security: Getting the password of the user) by Rory Primrose, logra similar a lo que está preguntando con la provisión de un validador personalizado, siendo el método de extensión importante CreateSecurityTokenManager
:
public class PasswordServiceCredentials : ServiceCredentials
{
public PasswordServiceCredentials()
{
}
private PasswordServiceCredentials(PasswordServiceCredentials clone)
: base(clone)
{
}
protected override ServiceCredentials CloneCore()
{
return new PasswordServiceCredentials(this);
}
public override SecurityTokenManager CreateSecurityTokenManager()
{
// Check if the current validation mode is for custom username password validation
if (UserNameAuthentication.UserNamePasswordValidationMode == UserNamePasswordValidationMode.Custom)
{
return new PasswordSecurityTokenManager(this);
}
Trace.TraceWarning(Resources.CustomUserNamePasswordValidationNotEnabled);
return base.CreateSecurityTokenManager();
}
}
para utilizar esta credencial servicio personalizado, se deberá especificar el atributo type en el <ServiceCredentials>
's ConfigurationElement
en su configuración, como:
<serviceCredentials type="your.assembly.namespace.PasswordServiceCredentials,
your.assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" >
</serviceCredentials>
Del mismo modo, puede establecer este atributo type
programáticamente, pero no estoy familiarizado con cómo.
Gracias. ¿También puede mostrar cómo especifico el CustomValidator con el código? – jgauffin
De nuevo, no lo he intentado, pero ServiceCredentials es solo otro comportamiento de servicio, por lo que debería poder crear una instancia de ServiceCredentialsElement, establecer las propiedades UserNameAuthentication, luego invocar CreateBehavior() y agregarlo al ServiceHost. – tomasr