La sécurisation de la WCF point de terminaison de service avec l'authentification personnalisée

Je tiens à assurer un point de terminaison d'un service WCF, je ne sais pas si vous pouvez obtenir un point de terminaison, et d'autres non. Ci-dessous, j'ai l'dépouillé de service WCF (auto-hébergé). La même WCF sert également le CA de la Politique de fichier. Si je sécuriser ce service WCF ou quelques points de terminaison de ut le CA de la Politique ne doit pas me demander un nom d'utilisateur mot de passe. La politique de fichier doit être accessible tout le temps. Est-ce que ça ira?

J'ai trouvé beaucoup WCF personnalisé blogs/posts. Il ya beaucoup de façons de faire de la sécurité. Tout ce que je veux, c'est que je peux obtenir quelques points de terminaison avec le nom d'utilisateur/mot de passe, mais les informations d'identification ne doit pas être visible avec des outils comme Fiddler. Les données mais il peut être visible dans ce cas.

J'ai mis en place déjà un Customvalidator mais l'app.fichier de configuration est également importent définir les choses. Et je ne suis pas très bon à cela.

namespace WindowsFormsApplication11
{
public partial class Form1 : Form
{
public ServiceHost _host = null;
public Form1()
{
InitializeComponent();
}      
private void button1_Click(object sender, EventArgs e)
{
//Create a ServiceHost for the CalculatorService type and 
//provide the base address.
_host = new ServiceHost(typeof(WmsStatService));
_host.AddServiceEndpoint(typeof(IPolicyProvider), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior());
_host.Open();
}
}
//Define a service contract.
[ServiceContract(Namespace = "http://WindowsFormsApplication11")]
public interface IWmsStat
{
[OperationContract]
string getConnectedViewers(string channelName);
[OperationContract]
string sayHello(string name);
}
[ServiceContract]
public interface IPolicyProvider
{
[OperationContract, WebGet(UriTemplate = "/ClientAccessPolicy.xml")]
Stream ProvidePolicy();
}
//[DataContract]
public class Ads
{
//[DataMember]
public string AdFileName { get; set; }
//[DataMember]
public string AdDestenationUrl { get; set; }
public string ConnectedUserIP { get; set; }
}
//
public class CustomValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
if(null == userName || null == password)
{
throw new ArgumentNullException();
}
if(userName == "Oguz" && password == "2009")
{
return;
}
FaultCode fc =  new FaultCode("ValidationFailed");
FaultReason fr = new FaultReason("Good reason");
throw new FaultException(fr,fc);
}
}
//
public class WmsStatService : IWmsStat, IPolicyProvider
{
public string sayHello(string name)
{
return "hello there " + name + " nice to meet you!";
}
public Stream ProvidePolicy()
{
WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
return new MemoryStream(File.ReadAllBytes("ClientAccessPolicy.xml"), false);
}
public string getConnectedViewers(string channelname)
{
//do stuff
return null;
}
}
}

L'application.config. Ce fichier de configuration ne fonctionne pas. Je voulais mettre l'authentification personnalisée pour un point de terminaison. Je n'ai aucune idée.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="WindowsFormsApplication11.WmsStatService" behaviorConfiguration="mex">
<host>
<baseAddresses>
<add baseAddress="http://192.168.0.199:87" />
</baseAddresses>
</host>        
<endpoint address="http://192.168.0.199:87/Test" binding="basicHttpBinding" bindingConfiguration="" contract="WindowsFormsApplication11.IWmsStat" behaviorConfiguration="MyServiceBehavior" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<!--<bindings>
<wsHttpBinding>      
<binding name="wshttp">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>-->
<behaviors>
<serviceBehaviors>
<behavior name="mex">
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
</behavior>
<behavior name="MyServiceBehavior">
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WindowsFormsApplication11.CustomValidator, CustomValidator" />
</serviceCredentials>
</behavior>
</serviceBehaviors>      
</behaviors>
</system.serviceModel>
</configuration>

OriginalL'auteur Shift | 2009-08-18