Die Sicherung der WCF-service-Endpunkt mit benutzerdefinierten Authentifizierung

Möchte ich einige sichere Endpunkt einer WCF-service -, ich weiß nicht, ob Sie können einige sichere Endpunkt-und andere nicht. Unten habe ich die stripped WCF-Dienst (selbst gehostet). Das gleiche WCF dient auch der CA-Policy-Datei. Wenn ich Schrauben Sie den WCF-Dienst oder einige Endpunkte ut der CA-Policy müssen Sie nicht mich Fragen, eine Benutzername-Passwort. Die Richtliniendatei muss zugänglich sein, alle Zeit. Ist das auch möglich?

Ich fand eine Menge WCF-benutzerdefinierte blogs/postings. Es gibt eine Menge Möglichkeiten, das zu tun Sicherheit. Alles was ich will ist, dass ich sicher einige Endgeräte mit Benutzername/Passwort, aber die Anmeldeinformationen müssen nicht sichtbar sein, mit tools wie Fiddler. Die Daten kann aber sichtbar sein in diesem Fall.

Implementiert habe ich schon ein Customvalidator-aber die app.config-Datei ist auch wichtig zu definieren, Dinge. Und ich bin nicht sehr gut darin.

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;
        }
    }
}

App.config. Diese config-Datei funktioniert nicht. Ich wollte die benutzerdefinierte Authentifizierung für einen Endpunkt. Ich habe keine Ahnung.

<?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>
InformationsquelleAutor Shift | 2009-08-18
Schreibe einen Kommentar