My Blog

Use ASP.NET SqlMemberShipProvider in WCF self-hosted service with SSL

by lupok on giovedì 30 gennaio 2014 03:35

Questo articolo e' una estensione del precedente Use ASP.NET SqlMemberShipProvider in WCF self-hosted service in cui viene abilitato il supporto SSL per garantire la sicurezza delle informazioni. Per informazioni su come installare in supporto SSL su un servizio WCF self-hosted si rimanda all'articolo Configurare un servizio WCF WebHttpBinding self hosted con SSL.

 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Permissions;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;
 
namespace WcfServiceHTTPSSelfHosted
{
   public class WcfServiceHTTPSSelfHosted : IWcfServiceHTTPSSelfHosted
   {
      [PrincipalPermission(SecurityAction.Demand, Role = "Managers")]
      public string GetData1(int value)
      {
         return string.Format("GetData1 you entered: {0}", value);
      }
 
      public string GetData2(int value)
      {
         if (System.Web.Security.Roles.IsUserInRole("Registered Users"))
         {
            return string.Format("GetData2 you entered: {0}", value);
         }
         else
         {
            throw new Exception("Role validation failed");
         }
      }
 
      public string GetData3(int value)
      {
         return string.Format("GetData3 you entered: {0}", value);
      }
   }
}

app.config:

 

xml version="1.0"?>
<configuration>
   <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
   startup>
   <connectionStrings>
      <add name="mySqlConnection" connectionString="Data Source=.\SQLEXPRESS2012;Integrated Security=SSPI;Initial Catalog=aspnetdb;"/>
   connectionStrings>
   <system.web>
      <compilation debug="true"/>
      
      <membership defaultProvider="MySqlMembershipProvider" userIsOnlineTimeWindow="15">
         <providers>
            <clear/>
            <add name="MySqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="mySqlConnection" applicationName="UsersManagementNavigationApplication" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Hashed"/>
         providers>
      membership>
      
      <roleManager enabled="true" defaultProvider="MySqlRoleProvider">
         <providers>
            <clear/>
            <add name="MySqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="mySqlConnection" applicationName="UsersManagementNavigationApplication"/>
         providers>
      roleManager>
   system.web>
   <system.serviceModel>
      <bindings>
         <webHttpBinding>
            <binding name="webBinding">
               <security mode="Transport">
                  <transport clientCredentialType="Basic"/>
               security>
            binding>
         webHttpBinding>
         <basicHttpBinding>
            <binding name="basicBindingConfiguration">
               <security mode="Transport">
                  <transport clientCredentialType="Basic"/>
               security>
            binding>
         basicHttpBinding>
      bindings>
      <behaviors>
         <endpointBehaviors>
            <behavior name="webEndpointBehavior">
               <webHttp/>
            behavior>
         endpointBehaviors>
         <serviceBehaviors>
            <behavior name="webServiceBehavior">
               <serviceMetadata httpsGetEnabled="true"/>
               <serviceThrottling/>
               <serviceDebug/>
            behavior>
            <behavior name="myServiceBehavior">
               
               <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="MySqlRoleProvider">
               serviceAuthorization>
               <serviceCredentials>
                  
                  <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WcfServiceHTTPSSelfHosted.MyCustomValidator, WcfServiceHTTPSSelfHosted"   />
               serviceCredentials>
               
               <serviceMetadata httpsGetEnabled="true"/>
               
               <serviceDebug includeExceptionDetailInFaults="false"/>
            behavior>
         serviceBehaviors>
      behaviors>
      <services>
         <service behaviorConfiguration="myServiceBehavior" name="WcfServiceHTTPSSelfHosted.WcfServiceHTTPSSelfHosted">
            <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicBindingConfiguration" contract="WcfServiceHTTPSSelfHosted.IWcfServiceHTTPSSelfHosted"/>
            <endpoint address="web" behaviorConfiguration="webEndpointBehavior" binding="webHttpBinding" bindingConfiguration="webBinding" contract="WcfServiceHTTPSSelfHosted.IWcfServiceHTTPSSelfHosted"/>
            <endpoint address="mex" binding="mexHttpsBinding" bindingConfiguration="" contract="IMetadataExchange"/>
            <host>
               <baseAddresses>
                  <add baseAddress="https://localhost:50001/WcfServiceHTTPSSelfHosted/"/>
               baseAddresses>
            host>
         service>
      services>
   system.serviceModel>
configuration>
WcfServiceHTTPSSelfHostedSqlMemberShip.zip

Blogs Parent Separator My Blog
Author
lupok

My Blog

Tags