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 SqlRoleProvider
kapja.
<!-- 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
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.
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.
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
Győződjön meg arról, hogy az elérési út tartalmazza azt a mappát, amelyben Makecert.exe található.
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.
Indítsa el a Client.exe a \client\bin fájlból. Az ügyféltevékenység megjelenik az ügyfélkonzol-alkalmazásban.
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
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.
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.
Hozzon létre egy könyvtárat az ügyfélszámítógépen az ügyfél bináris fájljaihoz.
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.
A kiszolgálón nyisson meg egy fejlesztői parancssort a Visual Studióhoz rendszergazdai jogosultságokkal, és futtassa a parancsot
setup.bat service
. Azsetup.bat
argumentum futtatásávalservice
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.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.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.
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.
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.
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