Praktikum: Windows Communication Foundation teenuse turvamine, VR2.9

From ICO wiki
Jump to navigationJump to search

ASP.NET Membership database loomine ja WCF'ile selle kasutamiseks õiguste andmine

ASP.NET Membership funktsionaalsuse kasutamiseks peab olema teenuse masinasse olema installitud SQL Server (2005/2008/2010 Express versioon).

Selleks et SQL Serverisse Membership andmebaas teha, tuleb käivitada aspnet_regsql.exe. See asub "X:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe".

  • Järgnevalt käivitada see, ning valida "Configure SQL Server for application services".
  • Järgnevalt valida "Windows Authentication" ja määrata serveri aadressiks ".\SQLEXPRESS". Vajutada next.

Sellega loodi SQL Serverisse andmebaas "aspnetdb", ning vajalikud tabelid ASP.NET Membership funktsionaalsuse kasutamiseks.

Järgenvalt tuleb anda õigused WCF Service Process Identity'le, et sellel oleks õigus kasutada loodud baasi.

  • Avame Microsoft SQL Server Management Studio ja autendime end administraatori õigustes kasutajaga.
  • Käivitame järgneva QUERY:
    -- Create a SQL Server login for the Network Service account
    sp_grantlogin 'NT AUTHORITY\NETWORK SERVICE'
    
    -- Grant the login access to the roles database
    USE aspnetdb
    GO
    sp_grantdbaccess 'NT AUTHORITY\NETWORK SERVICE', 'NETWORK SERVICE'
    
    -- Add user to database role
    USE aspnetdb
    GO
    sp_addrolemember 'aspnet_Roles_FullAccess', 'NETWORK SERVICE'

Eelnevaga on loodud kasutajate baas, ning antud WCF'ile õigus seda kasutada.

Sertifikaatide loomine

Selleks, et ei tekiks Certificate Chaining erindit, tuleb luua nii "Certificate Authority", kui ka CA poolt allkirjastatud Sertifikaat, mida kasutatakse turvalise ühenduse jaoks.

Esimesena loome makecert vahendiga Certificate Authority. makecert.exe asub "X:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin" kaustas. Avame command line-i ja muudame oma hetkeasukoha kataloogiks, kuhu me soovime luua CA privaatvõtme ja Self Signed sertifikaadi.

  • Loome Self Signed sertifikaadi
   <<absolute path to makecert>> -n "CN=WcfCA" -r -sv WcfCa.pvk WcfCa.cer
  • Loome Ühenduse sertifikaadi ja paneme selle kohe windowsi hoidlasse Currentuser My.
   <<absolute path to makecert>> -sk SignedByWcfCA -iv WcfCa.pvk -n "CN=localhost" -ic WcfCa.cer -sr CurrentUser -ss My -sky exchange -pe

-n "CN=<<serveriaadress>>", mis meie puhul on hetkel localhost, kuna loome teenuse oma masinas ja samuti kasutame oma masinast. Muul juhul peaks seal olema domeeninimi või IP aadress.

Eelnevaga loodi meie soovitud kausta CA ehk Self Signed sertifikaat, ning sertifikaadihoidlasse CA-ga signeeritud ühendusesertifikaat.

app.config

    <?xml version="1.0"?>
    <configuration>
      <connectionStrings>
        <add name="AspNetDb" connectionString="Data Source=.\SQLEXPRESS;
             Initial Catalog=aspnetdb;
             Integrated Security=true"/>
      </connectionStrings>
      <system.web>
        <membership defaultProvider="MySqlMembershipProvider">
          <providers>
            <add name="MySqlMembershipProvider"
                 type="System.Web.Security.SqlMembershipProvider"
                 connectionStringName="AspNetDb"
                 requiresQuestionAndAnswer="false"
                 requiresUniqueEmail="false"
                 applicationName="WcfSecureService"/>
          </providers>
        </membership>
        <roleManager enabled="true" defaultProvider="MySqlRoleProvider">
          <providers>
            <add name="MySqlRoleProvider"
                 type="System.Web.Security.SqlRoleProvider"
                 connectionStringName="AspNetDb"
                 applicationName="WcfSecureService"/>
          </providers>
        </roleManager>
      </system.web>
      <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
    </configuration>