Megosztás a következőn keresztül:


Tagság és szerepkör-szolgáltató

A tagsági és szerepkör-szolgáltatói minta bemutatja, hogy egy szolgáltatás hogyan használhatja a ASP.NET tagságot és szerepkör-szolgáltatókat az ügyfelek hitelesítésére és engedélyezésére.

Ebben a mintában az ügyfél egy konzolalkalmazás (.exe), és a szolgáltatást az Internet Information Services (IIS) üzemelteti.

Feljegyzés

A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.

A minta bemutatja, hogyan:

  • Az ügyfél a felhasználónév-jelszó kombinációval végezhet hitelesítést.

  • A kiszolgáló érvényesítheti az ügyfél hitelesítő adatait a ASP.NET tagságszolgáltatója számára.

  • A kiszolgáló hitelesítése a kiszolgáló X.509-tanúsítványával végezhető el.

  • A kiszolgáló az ASP.NET szerepkör-szolgáltató használatával leképítheti a hitelesített ügyfelet egy szerepkörre.

  • A kiszolgáló a PrincipalPermissionAttribute szolgáltatás által közzétett bizonyos metódusokhoz való hozzáférést szabályozhatja.

A tagság- és szerepkör-szolgáltatók úgy vannak konfigurálva, hogy az SQL Server által támogatott tárolót használjanak. A szolgáltatáskonfigurációs fájlban kapcsolati sztring és különböző beállítások vannak megadva. A tagságszolgáltató a nevet SqlMembershipProvider kapja, míg a szerepkör-szolgáltató a nevet SqlRoleProviderkapja.

<!-- Set the connection string for SQL Server -->
<connectionStrings>
  <add name="SqlConn"
       connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=aspnetdb;" />
</connectionStrings>

<system.web>
  <!-- Configure the Sql Membership Provider -->
  <membership defaultProvider="SqlMembershipProvider" userIsOnlineTimeWindow="15">
    <providers>
      <clear />
      <add
        name="SqlMembershipProvider"
        type="System.Web.Security.SqlMembershipProvider"
        connectionStringName="SqlConn"
        applicationName="MembershipAndRoleProviderSample"
        enablePasswordRetrieval="false"
        enablePasswordReset="false"
        requiresQuestionAndAnswer="false"
        requiresUniqueEmail="true"
        passwordFormat="Hashed" />
    </providers>
  </membership>

  <!-- Configure the Sql Role Provider -->
  <roleManager enabled ="true"
               defaultProvider ="SqlRoleProvider" >
    <providers>
      <add name ="SqlRoleProvider"
           type="System.Web.Security.SqlRoleProvider"
           connectionStringName="SqlConn"
           applicationName="MembershipAndRoleProviderSample"/>
    </providers>
  </roleManager>
</system.web>

A szolgáltatás egyetlen végpontot tesz elérhetővé a szolgáltatással való kommunikációhoz, amelyet a Web.config konfigurációs fájllal határoz meg. A végpont egy címből, egy kötésből és egy szerződésből áll. A kötés konfigurálva van egy szabványos wsHttpBinding, amely alapértelmezés szerint a Windows-hitelesítést használja. Ez a minta a felhasználónév-hitelesítés használatára állítja be a szabványt wsHttpBinding . A viselkedés azt határozza meg, hogy a kiszolgálótanúsítványt a szolgáltatáshitelesítéshez kell használni. A kiszolgálótanúsítványnak ugyanazt az értéket kell tartalmaznia, SubjectName mint a findValue<serviceCertificate konfigurációelem attribútumának.> Emellett a viselkedés azt is meghatározza, hogy a felhasználónév-jelszó párok hitelesítését a ASP.NET tagságszolgáltató végzi, a szerepkör-leképezést pedig a ASP.NET szerepkör-szolgáltató végzi el a két szolgáltatóhoz definiált nevek megadásával.

<system.serviceModel>

  <protocolMapping>
    <add scheme="http" binding="wsHttpBinding" />
  </protocolMapping>

  <bindings>
    <wsHttpBinding>
      <!-- Set up a binding that uses Username as the client credential type -->
      <binding>
        <security mode ="Message">
          <message clientCredentialType ="UserName"/>
        </security>
      </binding>
    </wsHttpBinding>
  </bindings>

  <behaviors>
    <serviceBehaviors>
      <behavior>
        <!-- Configure role based authorization to use the Role Provider -->
        <serviceAuthorization principalPermissionMode ="UseAspNetRoles"
                              roleProviderName ="SqlRoleProvider" />
        <serviceCredentials>
          <!-- Configure user name authentication to use the Membership Provider -->
          <userNameAuthentication userNamePasswordValidationMode ="MembershipProvider"
                                  membershipProviderName ="SqlMembershipProvider"/>
          <!-- Configure the service certificate -->
          <serviceCertificate storeLocation ="LocalMachine"
                              storeName ="My"
                              x509FindType ="FindBySubjectName"
                              findValue ="localhost" />
        </serviceCredentials>
        <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
        <serviceDebug includeExceptionDetailInFaults="false" />
        <serviceMetadata httpGetEnabled="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

A minta futtatásakor az ügyfél három különböző felhasználói fiókban hívja meg a különböző szolgáltatásműveleteket: Alice, Bob és Charlie. A műveleti kérelmek és válaszok az ügyfélkonzol ablakában jelennek meg. Az "Alice" felhasználóként indított mind a négy hívásnak sikeresnek kell lennie. A "Bob" felhasználónak hozzáférés-megtagadási hibát kell kapnia a Divide metódus meghívásakor. A "Charlie" felhasználónak hozzáférés-megtagadási hibát kell kapnia a Szorzás metódus meghívásakor. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.

A minta beállítása, összeállítása és futtatása

  1. A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse a Windows Communication Foundation-minták futtatásával kapcsolatos utasításokat.

  2. Győződjön meg arról, hogy konfigurálta a ASP.NET Application Services-adatbázist.

    Feljegyzés

    Ha SQL Server Express Editiont futtat, a kiszolgáló neve .\SQLEXPRESS. Ezt a kiszolgálót kell használni a ASP.NET Application Services-adatbázis, valamint a Web.config kapcsolati sztring konfigurálásához.

    Feljegyzés

    A ASP.NET feldolgozói folyamat fiókjának engedélyekkel kell rendelkeznie az ebben a lépésben létrehozott adatbázishoz. Ehhez használja az sqlcmd segédprogramot vagy az SQL Server Management Studiót.

  3. A minta egy- vagy számítógépközi konfigurációban való futtatásához kövesse az alábbi utasításokat.

A minta futtatása ugyanazon a számítógépen

  1. Győződjön meg arról, hogy az elérési út tartalmazza azt a mappát, amelyben Makecert.exe található.

  2. Futtassa a Setup.bat a Visual Studio fejlesztői parancssorának telepítési mappájából rendszergazdai jogosultságokkal. Ez telepíti a minta futtatásához szükséges szolgáltatástanúsítványokat.

  3. Indítsa el a Client.exe a \client\bin fájlból. Az ügyféltevékenység megjelenik az ügyfélkonzol-alkalmazásban.

  4. Ha az ügyfél és a szolgáltatás nem tud kommunikálni, olvassa el a WCF-minták hibaelhárítási Tippek című témakört.

A minta futtatása számítógépeken

  1. Hozzon létre egy könyvtárat a szolgáltatásszámítógépen. Hozzon létre egy servicemodelsamples nevű virtuális alkalmazást ehhez a könyvtárhoz az Internet Information Services (IIS) felügyeleti eszközével.

  2. Másolja a szolgáltatásprogram fájljait az \inetpub\wwwroot\servicemodelsamples fájlból a szolgáltatásszámítógép virtuális könyvtárába. Győződjön meg arról, hogy a \bin alkönyvtárban lévő fájlokat másolja. Másolja a Setup.bat, a GetComputerName.vbs és a Cleanup.bat fájlokat is a szolgáltatásszámítógépre.

  3. Hozzon létre egy könyvtárat az ügyfélszámítógépen az ügyfél bináris fájljaihoz.

  4. Másolja az ügyfélprogram fájljait az ügyfélszámítógép ügyfélkönyvtárába. Másolja a Setup.bat, Cleanup.bat és ImportServiceCert.bat fájlokat is az ügyfélbe.

  5. A kiszolgálón nyisson meg egy fejlesztői parancssort a Visual Studióhoz rendszergazdai jogosultságokkal, és futtassa a parancsot setup.bat service. Az setup.bat argumentum futtatásával service létrehoz egy szolgáltatástanúsítványt a számítógép teljes tartománynevével, és exportálja a szolgáltatástanúsítványt egy Service.cer nevű fájlba.

  6. Szerkessze a Web.config fájlt az új tanúsítványnév (a findValue<serviceCertificate> attribútumban) megfelelően, amely megegyezik a számítógép teljes tartománynevével.

  7. Másolja a Service.cer fájlt a szolgáltatáskönyvtárból az ügyfélszámítógép ügyfélkönyvtárába.

  8. Az ügyfélszámítógép Client.exe.config fájljában módosítsa a végpont címértékét úgy, hogy az megfeleljen a szolgáltatás új címének.

  9. Az ügyfélen nyisson meg egy fejlesztői parancssort a Visual Studióhoz rendszergazdai jogosultságokkal, és futtassa a ImportServiceCert.bat. Ez importálja a szolgáltatástanúsítványt a Service.cer fájlból a CurrentUser – Megbízható Kapcsolatok tárolóba.

  10. Az ügyfélszámítógépen indítsa el a Client.exe parancssorból. Ha az ügyfél és a szolgáltatás nem tud kommunikálni, olvassa el a WCF-minták hibaelhárítási Tippek című témakört.

A minta utáni tisztítás

  • A minta futtatása után futtassa a Cleanup.bat a mintamappában.

Feljegyzés

Ez a szkript nem távolítja el az ügyfél szolgáltatástanúsítványait, amikor a mintát számítógépeken futtatja. Ha windowsos kommunikációs alap (WCF) mintákat futtat, amelyek tanúsítványokat használnak a számítógépeken, mindenképpen törölje a CurrentUser – Megbízható Kapcsolatok tárolóban telepített szolgáltatástanúsítványokat. Ehhez használja a következő parancsot: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> Például: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.

A Batch-fájl beállítása

A mintában szereplő Setup.bat kötegfájl lehetővé teszi a kiszolgáló megfelelő tanúsítványokkal való konfigurálását egy olyan saját üzemeltetésű alkalmazás futtatásához, amely kiszolgálói tanúsítványalapú biztonságot igényel. Ezt a kötegfájlt úgy kell módosítani, hogy a számítógépeken is működjön, vagy nem üzemeltetett esetben működjön.

Az alábbiakban röviden áttekintheti a kötegfájlok különböző szakaszait, hogy azok a megfelelő konfigurációban való futtatásukhoz módosíthatók legyenek.

  • A kiszolgálótanúsítvány létrehozása.

    A Setup.bat kötegfájl alábbi sorai hozzák létre a használni kívánt kiszolgálótanúsítványt. A(z) %Standard kiadás RVER_NAME% változó megadja a kiszolgáló nevét. Módosítsa ezt a változót a saját kiszolgáló nevének megadásához. Ez a kötegfájl alapértelmezés szerint localhost lesz.

    A tanúsítvány a Saját (Személyes) tárolóban, a LocalMachine áruházban található.

    echo ************
    echo Server cert setup starting
    echo %SERVER_NAME%
    echo ************
    echo making server cert
    echo ************
    makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -pe
    
  • A kiszolgálótanúsítvány telepítése az ügyfél megbízható tanúsítványtárolójába.

    A Setup.bat kötegfájl alábbi sorai másolja a kiszolgálótanúsítványt az ügyfél megbízható személyek tárolójába. Erre a lépésre azért van szükség, mert a Makecert.exe által létrehozott tanúsítványokat az ügyfélrendszer nem implicit módon megbízhatónak minősíti. Ha már rendelkezik olyan tanúsítvánnyal, amely egy ügyfél megbízható főtanúsítványában gyökerezik – például egy Microsoft által kiadott tanúsítványban –, nem szükséges az ügyféltanúsítvány-tároló kiszolgálótanúsítvánnyal való feltöltésének ez a lépése.

    certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople