Skip to content

Commit

Permalink
added Message Level Security to SoapService
Browse files Browse the repository at this point in the history
  • Loading branch information
MasterLindi committed Dec 12, 2012
1 parent b21b3b2 commit 1ed7529
Show file tree
Hide file tree
Showing 13 changed files with 217 additions and 20 deletions.
1 change: 1 addition & 0 deletions BLInterfaces/IEngineerBL.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@ public interface IEngineerBL
void createCustomer(CustomerModel customer);
void createInstallation(InstallationModel installation);
List<CustomerModel> showMyCustomers(int engineerid);
bool validateEngineer(string username, string password);
}
}
13 changes: 13 additions & 0 deletions Heli.Scada.BL/EngineerBL.cs
Original file line number Diff line number Diff line change
Expand Up @@ -116,5 +116,18 @@ public List<CustomerModel> showMyCustomers(int engineerid)
}
return clist;
}

public bool validateEngineer(string username, string password)
{
try
{
return erepo.validateEngineer(username, password);
}
catch (BLException exp)
{
log.Error("Fehler bei der Authentifikation des Engineer via Soap.");
throw new BLException("Fehler bei der Authentifikation des Engineer via Soap.", exp);
}
}
}
}
1 change: 1 addition & 0 deletions Heli.Scada.DalInterfaces/IEngineerRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ namespace Heli.Scada.DalInterfaces
public interface IEngineerRepository<T> :IRepository<T> where T:class
{
List<CustomerModel> GetMyCustomers(int id);
bool validateEngineer(string username, string password);
}
}
60 changes: 40 additions & 20 deletions Heli.Scada.SoapService/App.config
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" />
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="MesswerteEntities1" connectionString="metadata=res://*/DBMesswerte.csdl|res://*/DBMesswerte.ssdl|res://*/DBMesswerte.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MYSNWIN7\SQLEXPRESS;initial catalog=Messwerte;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<add name="DefaultConnection" connectionString="Data Source = |SQL/CE|" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
Expand All @@ -16,7 +17,7 @@
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="C:\Users\Christoph\Documents\Visual Studio 2012\Projects\Heli.Scada.dal\log.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
Expand All @@ -30,19 +31,38 @@
</log4net>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
<add key="ClientSettingsProvider.ServiceUri" value="" />
<add key="ClientSettingsProvider.ConnectionStringName" value="DefaultConnection" />
</appSettings>
<system.web>
<compilation debug="true" />
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<clear />
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" connectionStringName="DefaultConnection" credentialsProvider="" />
</providers>
</membership>
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
<providers>
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" connectionStringName="DefaultConnection" />
</providers>
</roleManager>
</system.web>
<!-- Bei der Bereitstellung des Dienstbibliothekprojekts muss der Inhalt der Konfigurationsdatei der app.config-Datei
des Hosts hinzugefügt werden. System.Configuration unterstützt keine Konfigurationsdateien für Bibliotheken. -->
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndpointBinding">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="Heli.Scada.SoapService.SoapService" behaviorConfiguration="SoapServiceBehaviour">
<endpoint address="" binding="basicHttpBinding" contract="Heli.Scada.SoapService.ISoapService">
<identity>
<dns value="localhost" />
</identity>
<service name="Heli.Scada.SoapService.SoapService" behaviorConfiguration="SoapServiceBehaviour">
<endpoint address="" name="wsHttpEndpoint" binding="wsHttpBinding" bindingConfiguration="wsHttpEndpointBinding" contract="Heli.Scada.SoapService.ISoapService">
</endpoint>
<host>
<baseAddresses>
Expand All @@ -53,54 +73,54 @@
</services>
<behaviors>
<serviceBehaviors>
<behavior name ="SoapServiceBehaviour">

<serviceMetadata httpGetEnabled="true" />
<behavior name="SoapServiceBehaviour">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<serviceCertificate findValue="Heli.Scada"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName" />
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Heli.Scada.SoapService.CustomUsernameValidator, Heli.Scada.SoapService" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">

<alias alias="ICustomerRepository" type="Heli.Scada.DalInterfaces.ICustomerRepository`1, Heli.Scada.DalInterfaces" />
<alias alias="IEngineerRepository" type="Heli.Scada.DalInterfaces.IEngineerRepository`1, Heli.Scada.DalInterfaces" />
<alias alias="IInstallationRepository" type="Heli.Scada.DalInterfaces.IInstallationRepository`1, Heli.Scada.DalInterfaces" />
<alias alias="IMeasurementRepository" type="Heli.Scada.DalInterfaces.IMeasurementRepository`1, Heli.Scada.DalInterfaces" />
<alias alias="IMeasurementTypeRepository" type="Heli.Scada.DalInterfaces.IMeasurementTypeRepository`1, Heli.Scada.DalInterfaces" />

<alias alias="CustomerRepository" type="Heli.Scada.dal.CustomerRepository, Heli.Scada.dal" />
<alias alias="EngineerRepository" type="Heli.Scada.dal.EngineerRepository, Heli.Scada.dal" />
<alias alias="InstallationRepository" type="Heli.Scada.dal.InstallationRepository, Heli.Scada.dal" />
<alias alias="MeasurementRepository" type="Heli.Scada.dal.MeasurementRepository, Heli.Scada.dal" />
<alias alias="MeasurementTypeRepository" type="Heli.Scada.dal.MeasurementTypeRepository, Heli.Scada.dal" />

<alias alias="ICustomerBL" type="Heli.Scada.BLInterfaces.ICustomerBL, Heli.Scada.BLInterfaces" />
<alias alias="IEngineerBL" type="Heli.Scada.BLInterfaces.IEngineerBL, Heli.Scada.BLInterfaces" />
<alias alias="IStatisticService" type="Heli.Scada.BLInterfaces.IStatisticService, Heli.Scada.BLInterfaces" />
<alias alias="IRestServiceBL" type="Heli.Scada.BLInterfaces.IRestServiceBL, Heli.Scada.BLInterfaces" />

<alias alias="CustomerBL" type="Heli.Scada.BL.CustomerBL, Heli.Scada.BL" />
<alias alias="EngineerBL" type="Heli.Scada.BL.EngineerBL, Heli.Scada.BL" />
<alias alias="StatisticService" type="Heli.Scada.BL.StatisticService, Heli.Scada.BL" />
<alias alias="RestServiceBL" type ="Heli.Scada.BL.RestServiceBL, Heli.Scada.BL" />

<alias alias="RestServiceBL" type="Heli.Scada.BL.RestServiceBL, Heli.Scada.BL" />
<alias alias="CustomerModel" type="Heli.Scada.Entities.CustomerModel, Heli.Scada.Entities" />
<alias alias="EngineerModel" type="Heli.Scada.Entities.EngineerModel, Heli.Scada.Entities" />
<alias alias="InstallationModel" type="Heli.Scada.Entities.InstallationModel, Heli.Scada.Entities" />
<alias alias="MeasurementModel" type="Heli.Scada.Entities.MeasurementModel, Heli.Scada.Entities" />
<alias alias="MeasurementTypeModel" type="Heli.Scada.Entities.MeasurementTypeModel, Heli.Scada.Entities" />
<container>

<register type="ICustomerRepository[CustomerModel]" mapTo="CustomerRepository" />
<register type="IEngineerRepository[EngineerModel]" mapTo="EngineerRepository" />
<register type="IInstallationRepository[InstallationModel]" mapTo="InstallationRepository" />
<register type="IMeasurementRepository[MeasurementModel]" mapTo="MeasurementRepository" />
<register type="IMeasurementTypeRepository[MeasurementTypeModel]" mapTo="MeasurementTypeRepository" />

<register type="ICustomerBL" mapTo="CustomerBL" />
<register type="IEngineerBL" mapTo="EngineerBL" />
<register type="IStatisticService" mapTo="StatisticService" />
<register type="IRestServiceBL" mapTo="RestServiceBL" />
</container>
</unity>
</configuration>
</configuration>
46 changes: 46 additions & 0 deletions Heli.Scada.SoapService/CustomUsernameValidator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using System.IdentityModel.Tokens;
using System.Security.Principal;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using Heli.Scada.BLInterfaces;
using System.Configuration;
using log4net;


namespace Heli.Scada.SoapService
{
public class CustomUsernameValidator : System.IdentityModel.Selectors.UserNamePasswordValidator
{
public static readonly ILog log = LogManager.GetLogger(typeof(CustomUsernameValidator));
public override void Validate(string userName, string password)
{
try
{
if (userName == null || password == null)
{
throw new ArgumentNullException();
}
IUnityContainer container = new UnityContainer();
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Configure(container);
IEngineerBL rservicebl = container.Resolve<IEngineerBL>();

if (!rservicebl.validateEngineer(userName, password))
{
throw new FaultException("Incorrect Username or Password");
}
}
catch (Exception exp)
{
log.Error("Fehler bei Validierung des Engineers via Soap.");
throw new Exception("Fehler bei Validierung des Engineers via Soap.", exp);
}
}
}
}
18 changes: 18 additions & 0 deletions Heli.Scada.SoapService/Heli.Scada.SoapService.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -51,19 +51,34 @@
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.IdentityModel" />
<Reference Include="System.IdentityModel.Selectors" />
<Reference Include="System.identitymodel.services" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="CustomUsernameValidator.cs" />
<Compile Include="ISoapService.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
<Compile Include="SoapService.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\BLInterfaces\Heli.Scada.BLInterfaces.csproj">
Expand All @@ -87,6 +102,9 @@
<Name>Heli.Scada.Entities</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Service References\" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\WCF\Microsoft.VisualStudio.ServiceModel.targets" />
<ProjectExtensions>
Expand Down
26 changes: 26 additions & 0 deletions Heli.Scada.SoapService/Properties/Settings.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions Heli.Scada.SoapService/Properties/Settings.settings
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
</SettingsFile>
19 changes: 19 additions & 0 deletions Heli.Scada.dal/EngineerRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,5 +125,24 @@ where result.engineerid.Equals(id)
}
return clist;
}

public bool validateEngineer(string username, string password)
{
try
{
IQueryable<Engineer> queryusername = from result in context.Engineer
where result.username.Equals(username) && result.password.Equals(password)
select result;
if (queryusername.Count() > 0)
return true;
else
return false;
}
catch (Exception exp)
{
log.Error("Fehler bei Authentikation des Engineers via Soap.");
throw new DalException("Fehler bei Authentikation des Engineers via Soap.", exp);
}
}
}
}
Binary file added RootCATest.cer
Binary file not shown.
Binary file added RootCATest.pvk
Binary file not shown.
46 changes: 46 additions & 0 deletions log.txt
Original file line number Diff line number Diff line change
Expand Up @@ -136,3 +136,49 @@ INFO 2012-12-03 03:37:44
INFO 2012-12-03 03:37:44 � Installation wurde gespeichert.
INFO 2012-12-03 03:37:45 � InstallationRepo wurde gespeichert.
INFO 2012-12-03 03:37:46 � Installation saved.
INFO 2012-12-06 11:26:50 � Engineer wurde konvertiert.
INFO 2012-12-06 11:26:50 � Engineer wurde geladen.
INFO 2012-12-06 11:26:50 � EngineerModel wurde konvertiert.
INFO 2012-12-06 11:26:50 � CustomerModel wurde konvertiert.
INFO 2012-12-06 11:26:50 � Customer wurde gespeichert.
INFO 2012-12-06 11:26:51 � CustomerRepo wurde gespeichert.
INFO 2012-12-06 11:26:51 � Customer saved.
INFO 2012-12-06 11:27:50 � InstallationModel wurde konvertiert.
INFO 2012-12-06 11:27:50 � Installation wurde gespeichert.
INFO 2012-12-06 11:27:50 � InstallationRepo wurde gespeichert.
INFO 2012-12-06 11:27:50 � Installation saved.
INFO 2012-12-12 05:21:41 � Installation wurde konvertiert.
INFO 2012-12-12 05:21:41 � Installation wurde konvertiert.
INFO 2012-12-12 05:21:41 � Installation wurde konvertiert.
INFO 2012-12-12 05:21:41 � Installation wurde konvertiert.
INFO 2012-12-12 05:21:41 � Installation wurde konvertiert.
INFO 2012-12-12 05:21:41 � InstallationQuery wurde konvertiert.
INFO 2012-12-12 05:21:41 � Installations von Customer wurden geladen.
INFO 2012-12-12 05:21:41 � StatisticPerYear f�r Installation 0 wurde erstellt
INFO 2012-12-12 05:21:41 � StatisticPerYear f�r Installation 2 wurde erstellt
INFO 2012-12-12 05:21:41 � StatisticPerYear f�r Installation 4 wurde erstellt
INFO 2012-12-12 05:21:41 � StatisticPerYear f�r Installation 5 wurde erstellt
INFO 2012-12-12 05:21:41 � StatisticPerYear f�r Installation 6 wurde erstellt
INFO 2012-12-12 05:21:41 � Statistik f�r Kunden 1 wurde erstellt.
INFO 2012-12-12 05:21:41 � Installation wurde konvertiert.
INFO 2012-12-12 05:21:41 � Installation wurde konvertiert.
INFO 2012-12-12 05:21:41 � Installation wurde konvertiert.
INFO 2012-12-12 05:21:41 � Installation wurde konvertiert.
INFO 2012-12-12 05:21:41 � Installation wurde konvertiert.
INFO 2012-12-12 05:21:41 � InstallationQuery wurde konvertiert.
INFO 2012-12-12 05:21:41 � Installations von Customer wurden geladen.
INFO 2012-12-12 05:21:41 � InstallationState f�r Kunden 1 wurde erstellt.
INFO 2012-12-12 08:12:31 � Engineer wurde konvertiert.
INFO 2012-12-12 08:12:31 � Engineer wurde geladen.
INFO 2012-12-12 08:12:31 � EngineerModel wurde konvertiert.
INFO 2012-12-12 08:12:31 � CustomerModel wurde konvertiert.
INFO 2012-12-12 08:12:31 � Customer wurde gespeichert.
INFO 2012-12-12 08:12:31 � CustomerRepo wurde gespeichert.
INFO 2012-12-12 08:12:31 � Customer saved.
INFO 2012-12-12 08:31:39 � Engineer wurde konvertiert.
INFO 2012-12-12 08:31:39 � Engineer wurde geladen.
INFO 2012-12-12 08:31:39 � EngineerModel wurde konvertiert.
INFO 2012-12-12 08:31:39 � CustomerModel wurde konvertiert.
INFO 2012-12-12 08:31:39 � Customer wurde gespeichert.
INFO 2012-12-12 08:31:39 � CustomerRepo wurde gespeichert.
INFO 2012-12-12 08:31:39 � Customer saved.
1 change: 1 addition & 0 deletions packages/repositories.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<repositories>
<repository path="..\..\..\WebSites\WCFService1\packages.config" />
<repository path="..\ConsoleApplication1\packages.config" />
<repository path="..\DBHandler\packages.config" />
<repository path="..\Heli.Scada.BL\packages.config" />
Expand Down

0 comments on commit 1ed7529

Please sign in to comment.