esemény
Power BI DataViz világbajnokság
febr. 14. 16 - márc. 31. 16
4 esélye, hogy belépjen, nyerhet egy konferenciacsomagot, és bejuthat a LIVE Grand Finale-be Las Vegasban
További információEzt a böngészőt már nem támogatjuk.
Frissítsen a Microsoft Edge-re, hogy kihasználhassa a legújabb funkciókat, a biztonsági frissítéseket és a technikai támogatást.
készítette: Scott Mitchell
Megjegyzés
A cikk írása óta a ASP.NET tagsági szolgáltatókat felváltotta ASP.NET Identity. Határozottan javasoljuk, hogy frissítse az alkalmazásokat az ASP.NET Identity platform használatára a cikk írásának időpontjában kiemelt tagsági szolgáltatók helyett. ASP.NET Identitás számos előnnyel rendelkezik a ASP.NET tagsági rendszerrel szemben, beleértve a következőket:
Kód letöltése vagy PDF- letöltése
Ez az oktatóanyag az SqlMembershipProvider használatához szükséges séma adatbázishoz való hozzáadásához szükséges technikák vizsgálatával kezdődik. Ezt követően megvizsgáljuk a séma kulcstábláját, és megvitatjuk azok célját és fontosságát. Ez az oktatóanyag azzal zárul, hogy miként lehet egy ASP.NET alkalmazásnak megadni, melyik szolgáltatót használja a Membership keretrendszer.
Az előző két oktatóanyag űrlap-hitelesítéssel vizsgálta meg a webhely látogatóinak azonosítását. Az űrlaphitelesítési keretrendszer segítségével a fejlesztők egyszerűen bejelentkezhetnek egy felhasználót egy webhelyre, és a hitelesítési jegyek használatával emlékezhetnek rájuk az oldallátogatások során. A FormsAuthentication
osztály metódusokat tartalmaz a jegy létrehozásához és a látogató cookie-khoz való hozzáadásához. A FormsAuthenticationModule
megvizsgálja az összes bejövő kérést, és az érvényes hitelesítési jegyekkel rendelkezők számára létrehoz és társít egy GenericPrincipal
és egy FormsIdentity
objektumot az aktuális kéréssel. Az űrlapalapú hitelesítés csupán egy olyan mechanizmus, amely hitelesítési jegyet ad a látogatónak bejelentkezéskor, és a későbbi kérések során elemzi a jegyet a felhasználó identitásának meghatározásához. Ahhoz, hogy egy webalkalmazás támogassa a felhasználói fiókokat, továbbra is létre kell hoznunk egy felhasználói tárat, és funkciókat kell hozzáadnunk a hitelesítő adatok ellenőrzéséhez, új felhasználók regisztrálásához és a felhasználói fiókokhoz kapcsolódó feladatok számtalan eleméhez.
A 2.0-s ASP.NET előtt a fejlesztők feladatuk volt minden felhasználói fiókokkal kapcsolatos feladatot megvalósítani. Szerencsére a ASP.NET csapat felismerte ezt a hiányosságot, és bevezette a tagsági keretrendszert a ASP.NET 2.0-val. A tagsági keretrendszer a .NET-keretrendszer olyan osztályai, amelyek programozott felületet biztosítanak az alapvető felhasználói fiókokhoz kapcsolódó feladatok elvégzéséhez. Ez a keretrendszer a szolgáltatói modellalapul, amely lehetővé teszi, hogy a fejlesztők testre szabott implementációt csatlakoztassanak egy szabványosított API-hoz.
Ahogy az Biztonsági alapismeretek és az ASP.NET támogatás oktatóanyag ismerteti, a .NET keretrendszer két beépített tagsági szolgáltatóval rendelkezik: ActiveDirectoryMembershipProvider
és SqlMembershipProvider
. Ahogy a neve is mutatja, a SqlMembershipProvider
egy Microsoft SQL Server-adatbázist használ felhasználói tárolóként. Ahhoz, hogy ezt a szolgáltatót egy alkalmazásban használhassa, meg kell adnunk a szolgáltatónak, hogy milyen adatbázist használjon tárolóként. Tegyük fel, hogy a SqlMembershipProvider
arra számít, hogy a felhasználói tároló adatbázisa rendelkezik bizonyos adatbázistáblákkal, nézetekkel és tárolt eljárásokkal. Ezt a várt sémát hozzá kell adnunk a kiválasztott adatbázishoz.
Ez az oktatóanyag a szükséges séma adatbázishoz való hozzáadásának technikáinak vizsgálatával kezdődik a SqlMembershipProvider
használatához. Ezt követően megvizsgáljuk a séma kulcstábláját, és megvitatjuk azok célját és fontosságát. Ez az oktatóanyag úgy fejeződik be, hogy áttekintjük, hogyan lehet egy ASP.NET alkalmazásnak megadni, melyik szolgáltatót használja a tagsági rendszer.
Lássunk hozzá!
Az ASP.NET-alkalmazások adatait gyakran egy adatbázis több táblájában tárolják. A SqlMembershipProvider
adatbázisséma megvalósításakor el kell döntenünk, hogy a tagsági sémát ugyanabban az adatbázisban helyezik-e el, mint az alkalmazás adatai, vagy egy másik adatbázisban.
A tagsági sémát az alábbi okokból ajánlom ugyanabban az adatbázisban, mint az alkalmazás adatai:
A felhasználói tár és az alkalmazásadatok különálló adatbázisokra való leválasztása csak akkor hasznos, ha több olyan alkalmazással rendelkezik, amelyek mindegyike külön adatbázisokat használ, de közös felhasználói tárolót kell megosztania.
A második oktatóanyag óta készült alkalmazásnak még nincs szüksége adatbázisra. Most azonban szükségünk van egyre a felhasználói tárolóhoz. Hozzunk létre egyet, majd adjuk hozzá a SqlMembershipProvider
szolgáltató által igényelt sémát (lásd: 2. lépés).
Megjegyzés
Ebben az oktatóanyag-sorozatban egy Microsoft SQL Server 2005 Express Edition adatbázist használunk az alkalmazástáblák és a SqlMembershipProvider
séma tárolására. Ez a döntés két okból született: először is a költségek miatt – ingyenes – az Express Edition az SQL Server 2005 legérthetőbb verziója; Másodszor, az SQL Server 2005 Express Edition-adatbázisok közvetlenül a webalkalmazás App_Data
mappájába helyezhetők, így az adatbázist és a webalkalmazást egyetlen ZIP-fájlba csomagolhatja, és speciális beállítási utasítások vagy konfigurációs beállítások nélkül újra üzembe helyezheti. Ha inkább a SQL Server nem Express Edition-verzióját választaná a követéshez, megteheti. A lépések gyakorlatilag azonosak. A SqlMembershipProvider
séma a Microsoft SQL Server 2000 és újabb verziók bármelyikével működik.
A Megoldáskezelőben kattintson a jobb gombbal a App_Data
mappára, és válassza az Új elem hozzáadása lehetőséget. (Ha nem lát App_Data
mappát a projektben, kattintson a jobb gombbal a projektre a Megoldáskezelőben, válassza a ASP.NET mappa hozzáadása lehetőséget, és válassza a App_Data
.) Az Új elem hozzáadása párbeszédpanelen válasszon egy új, SecurityTutorials.mdf
nevű SQL Database-adatbázist. Ebben az oktatóanyagban hozzáadjuk a SqlMembershipProvider
sémát az adatbázishoz; a későbbi oktatóanyagokban további táblákat hozunk létre az alkalmazásadatok rögzítéséhez.
1. ábra: Új, SecurityTutorials.mdf
nevű SQL Database hozzáadása a App_Data
mappához (Kattintással megtekintheti a teljes méretű kép)
Ha hozzáad egy adatbázist a App_Data
mappához, az automatikusan bele van foglalva az Adatbáziskezelő nézetbe. (A Visual Studio nem Express Edition verziójában az Adatbázis-kezelő neve Kiszolgálókezelő.) Nyissa meg az Adatbáziskezelőt, és bontsa ki az imént hozzáadott SecurityTutorials
adatbázist. Ha nem látja az Adatbázis-kezelőt a képernyőn, nyissa meg a Nézet menüt, és válassza az Adatbázis-kezelőt, vagy nyomja le a Ctrl+Alt+S billentyűkombinációt. A 2. ábrán látható, hogy a SecurityTutorials
adatbázis üres – nem tartalmaz táblákat, nézeteket és tárolt eljárásokat.
2. ábra: A SecurityTutorials
adatbázis jelenleg üres (Kattintással megtekintheti a teljes méretű kép)
A SqlMembershipProvider
a felhasználói tároló adatbázisában bizonyos táblákat, nézeteket és tárolt eljárásokat kell telepíteni. Ezek a szükséges adatbázis-objektumok a aspnet_regsql.exe
eszközhasználatával vehetők fel. Ez a fájl a %WINDIR%\Microsoft.Net\Framework\v2.0.50727\
mappában található.
Megjegyzés
A aspnet_regsql.exe
eszköz parancssori funkciókat és grafikus felhasználói felületet is kínál. A grafikus felület felhasználóbarátabb, és ezt fogjuk vizsgálni ebben az oktatóanyagban. A parancssori felület akkor hasznos, ha a SqlMembershipProvider
séma hozzáadását automatizálni kell, például buildszkriptekben vagy automatizált tesztelési forgatókönyvekben.
A aspnet_regsql.exe
eszközzel ASP.NET alkalmazásszolgáltatásokat adhat hozzá vagy távolíthat el egy adott SQL Server-adatbázishoz. A ASP.NET alkalmazásszolgáltatások magukban foglalják a SqlMembershipProvider
és a SqlRoleProvider
sémáit, valamint a más ASP.NET 2.0-s keretrendszerekhez tartozó SQL-alapú szolgáltatók sémáit. Két bitnyi információt kell megadnunk a aspnet_regsql.exe
eszköznek:
Amikor az adatbázis használatára kéri, a aspnet_regsql.exe
eszköz arra kéri, hogy adja meg annak a kiszolgálónak a nevét, amelyen az adatbázis található, az adatbázishoz való csatlakozáshoz szükséges biztonsági hitelesítő adatokat és az adatbázis nevét. Ha az SQL Server nem Express kiadását használja, akkor ezt az információt már ismernie kell, mivel ugyanazt az információt kell megadnia egy kapcsolati sztringen keresztül, amikor egy ASP.NET weblapon keresztül dolgozik az adatbázissal. A kiszolgáló és az adatbázis nevének meghatározása az SQL Server 2005 Express Edition-adatbázis App_Data
mappában való használatakor azonban egy kicsit nagyobb szerepet játszik.
Az alábbi szakasz az SQL Server 2005 Express Edition-adatbázisok kiszolgálójának és adatbázisának nevének App_Data
mappában való megadásának egyszerű módját vizsgálja. Ha nem az SQL Server 2005 Express Editiont használja, nyugodtan ugorjon az Application Services telepítése szakaszra.
App_Data
mappábanA aspnet_regsql.exe
eszköz használatához ismerni kell a kiszolgáló és az adatbázis nevét. A kiszolgáló neve localhost\InstanceName
. Valószínűleg a InstanceNameSQLExpress
. Ha azonban manuálisan telepítette az SQL Server 2005 Express Editiont (vagyis nem telepítette automatikusan a Visual Studio telepítésekor), akkor lehetséges, hogy másik példánynevet választott.
Az adatbázis neve egy kicsit bonyolultabb meghatározni. A App_Data
mappában lévő adatbázisok általában olyan adatbázisnévvel rendelkeznek, amely globálisan egyedi azonosítót az adatbázisfájl elérési útjával együtt. A aspnet_regsql.exe
segítségével meg kell határoznunk az adatbázis nevét, hogy hozzáadhassuk az alkalmazásszolgáltatások sémáját.
Az adatbázis nevének megállapításához a legegyszerűbben az SQL Server Management Studión keresztül vizsgálhatja meg. Az SQL Server Management Studio grafikus felületet biztosít az SQL Server 2005-adatbázisok kezeléséhez, de nem az SQL Server 2005 Express Kiadásával szállítja. A jó hír az, hogy letöltheti az SQL Server Management Studio ingyenes Express Kiadását.
Megjegyzés
Ha az asztali gépen az SQL Server 2005 nem Express Edition verziója is telepítve van, akkor a Management Studio teljes verziója valószínűleg telepítve van. A teljes verzióval meghatározhatja az adatbázis nevét az Express Edition alább ismertetett lépéseit követve.
Először zárja be a Visual Studio-t, és győződjön meg arról, hogy a Visual Studio által az adatbázisfájlra vonatkozó zárolások bezárultak. Ezután indítsa el az SQL Server Management Studiót, és csatlakozzon az SQL Server 2005 Express Edition localhost\InstanceName
adatbázisához. Korábban említettük, hogy a példány neve valószínűleg SQLExpress
. A Hitelesítés beállításnál válassza a Windows-hitelesítés lehetőséget.
3. ábra: Csatlakozás az SQL Server 2005 Express Edition-példányhoz (Kattintással megtekintheti a teljes méretű kép)
Miután csatlakozott az SQL Server 2005 Express Edition-példányhoz, a Management Studio megjeleníti az adatbázisok mappáit, a biztonsági beállításokat, a kiszolgálóobjektumokat stb. Ha kibontja az Adatbázisok lapot, láthatja, hogy a SecurityTutorials.mdf
adatbázis nincs regisztrálva az adatbázispéldányban – először csatolnunk kell az adatbázist.
Kattintson a jobb gombbal az Adatbázisok mappára, és válassza a Helyi menü Csatolás parancsát. Ekkor megjelenik az Adatbázisok csatolása párbeszédpanel. Innen kattintson a Hozzáadás gombra, keresse meg a SecurityTutorials.mdf
adatbázist, és kattintson az OK gombra. A 4. ábrán az Adatbázisok csatolása párbeszédpanel látható, miután a SecurityTutorials.mdf
adatbázis ki lett választva. Az 5. ábrán a Management Studio Objektumkezelője látható az adatbázis sikeres csatolása után.
4. ábra: Csatolja a SecurityTutorials.mdf
-adatbázist (Kattintással megtekintheti a teljes méretű kép)
5. ábra: A SecurityTutorials.mdf
adatbázis megjelenik az Adatbázisok mappában (Kattintással megtekintheti a teljes méretű kép)
Ahogy az 5. ábrán látható, a SecurityTutorials.mdf
adatbázisnak meglehetősen abstruse neve van. Váltsuk át egy emlékezetesebb (és könnyebben beírható) névre. Kattintson a jobb gombbal az adatbázisra, válassza az Átnevezés lehetőséget a helyi menüből, és nevezze át SecurityTutorialsDatabase
. Ez nem változtatja meg a fájlnevet, csak azt a nevet, amelyet az adatbázis az SQL Server felé való azonosításhoz használ.
6. ábra: Nevezze át az adatbázist SecurityTutorialsDatabase
(Kattintással megtekintheti a teljes méretű kép)
Ezen a ponton ismerjük a SecurityTutorials.mdf
adatbázisfájl kiszolgáló- és adatbázisnevét: localhost\InstanceName
és SecurityTutorialsDatabase
. Most már készen állunk az alkalmazásszolgáltatások telepítésére az aspnet_regsql.exe
eszközzel.
A aspnet_regsql.exe
eszköz elindításához nyissa meg a start menüt, és válassza a Futtatás lehetőséget. Írja be %WINDIR%\Microsoft.Net\Framework\v2.0.50727\aspnet_regsql.exe
a szövegmezőbe, és kattintson az OK gombra. Másik lehetőségként a Windows Intézőt használva navigálhat a megfelelő mappához, és duplán kattinthat a aspnet_regsql.exe
fájlra. Mindkét megközelítés ugyanazt az eredményt fogja eredményezni.
A aspnet_regsql.exe
eszköz parancssori argumentumok nélküli futtatása elindítja a ASP.NET SQL Server telepítővarázsló grafikus felhasználói felületét. A varázsló megkönnyíti a ASP.NET alkalmazásszolgáltatások hozzáadását vagy eltávolítását egy megadott adatbázison. A varázsló első képernyője, amely a 7. ábrán látható, az eszköz célját ismerteti.
7. ábra: A ASP.NET SQL Server telepítővarázslójának használatával adja hozzá a tagsági sémát (Kattintással megtekintheti a teljes méretű kép)
A varázsló második lépése megkérdezi, hogy fel szeretnénk-e venni vagy eltávolítani az alkalmazásszolgáltatásokat. Mivel hozzá szeretnénk adni a SqlMembershipProvider
szükséges táblákat, nézeteket és tárolt eljárásokat, válassza az SQL Server konfigurálása alkalmazásszolgáltatásokhoz lehetőséget. Később, ha el szeretné távolítani ezt a sémát az adatbázisból, futtassa újra ezt a varázslót, de ehelyett válassza az Application Services adatainak eltávolítása meglévő adatbázis-beállításból.
8. ábra: Válassza az SQL Server alkalmazási szolgáltatásokhoz való konfigurálását lehetőséget (Kattintson ide a teljes méretű kép megtekintéséhez)
A harmadik lépés az adatbázis adatainak megadását kéri: a kiszolgáló nevét, a hitelesítési adatokat és az adatbázis nevét. Ha követte ezt az oktatóanyagot, és hozzáadta a SecurityTutorials.mdf
adatbázist App_Data
-hez, csatolta localhost\InstanceName
-höz, és átnevezte SecurityTutorialsDatabase
-ra, használja a következő értékeket:
localhost\InstanceName
SecurityTutorialsDatabase
9. ábra: Adja meg az adatbázis adatait (Kattintson ide a teljes méretű kép megtekintéséhez)
Az adatbázis adatainak megadása után kattintson a Tovább gombra. Az utolsó lépés összefoglalja a végrehajtandó lépéseket. Kattintson a Tovább gombra az alkalmazásszolgáltatások telepítéséhez, majd a Befejezés gombra a varázsló befejezéséhez.
Megjegyzés
Ha a Management Studiót használta az adatbázis csatolásához és az adatbázisfájl átnevezéséhez, a Visual Studio újbóli megnyitása előtt mindenképpen válassza le az adatbázist, és zárja be a Management Studiót. A SecurityTutorialsDatabase
adatbázis leválasztásához kattintson a jobb gombbal az adatbázis nevére, és válassza a Feladatok menü Leválasztás parancsát.
A varázsló befejezése után térjen vissza a Visual Studióba, és keresse meg az Adatbázis-kezelőt. Nyissa ki a Táblák mappát. Olyan táblákat kell látnia, amelyek neve a aspnet_
előtaggal kezdődik. Hasonlóképpen számos nézet és tárolt eljárás található a Nézetek és a Tárolt eljárások mappában. Ezek az adatbázis-objektumok alkotják az Application Services sémáját. A tagság- és szerepkörspecifikus adatbázis-objektumokat a 3. lépésben vizsgáljuk meg.
10. ábra: Számos táblázat, nézet és tárolt eljárás lett hozzáadva az adatbázishoz (Kattintással megtekintheti a teljes méretű kép)
Megjegyzés
A aspnet_regsql.exe
eszköz grafikus felhasználói felülete telepíti a teljes Application Services-sémát. Ha azonban aspnet_regsql.exe
parancssorból hajtja végre, megadhatja, hogy az Alkalmazásszolgáltatások mely összetevőit telepítse (vagy távolítsa el). Ezért ha csak a SqlMembershipProvider
és SqlRoleProvider
szolgáltatókhoz szükséges táblákat, nézeteket és tárolt eljárásokat szeretné hozzáadni, futtassa a parancssorból a aspnet_regsql.exe
. Másik lehetőségként manuálisan is futtathatja a aspnet_regsql.exe
által használt T-SQL-létrehozási szkriptek megfelelő részhalmazát. Ezek a szkriptek a WINDIR%\Microsoft.Net\Framework\v2.0.50727\
mappában találhatók, például InstallCommon.sql
,InstallMembership.sql
,InstallRoles.sql
, InstallProfile.sql
,InstallSqlState.sql
stb.
Ezen a ponton létrehoztuk a SqlMembershipProvider
által igényelt adatbázis-objektumokat. Azonban továbbra is arra kell utasítanunk a tagsági keretrendszert, hogy használja a SqlMembershipProvider
(szemben például a ActiveDirectoryMembershipProvider
), és hogy a SqlMembershipProvider
használja a SecurityTutorials
adatbázist. A 4. lépésben bemutatjuk, hogyan adhatja meg a használni kívánt szolgáltatót, és hogyan szabhatja testre a kiválasztott szolgáltató beállításait. Először is nézzük meg részletesebben az imént létrehozott adatbázis-objektumokat.
Ha egy ASP.NET-alkalmazás tagsági és szerepkör-keretrendszereivel dolgozik, a megvalósítás részleteit a szolgáltató foglalja össze. A jövőbeli oktatóanyagokban ezeket a keretrendszereket a .NET-keretrendszer Membership
és Roles
osztályán keresztül fogjuk csatlakoztatni. A magas szintű API-k használatakor nem kell törődnünk az alacsony szintű részletekkel, például a lekérdezések végrehajtásával vagy a SqlMembershipProvider
és a SqlRoleProvider
által módosított táblákkal.
Ennek megfelelően magabiztosan használhatjuk a tagsági és szerepkör-keretrendszereket anélkül, hogy megvizsgálnánk a 2. lépésben létrehozott adatbázissémát. A táblák alkalmazásadatok tárolására való létrehozásakor azonban előfordulhat, hogy felhasználókhoz vagy szerepkörökhöz kapcsolódó entitásokat kell létrehoznunk. Az alkalmazás adattáblái és a 2. lépésben létrehozott táblák közötti idegenkulcs-megkötések létrehozásakor segít a SqlMembershipProvider
és SqlRoleProvider
sémák megismerésében. Ezenkívül bizonyos ritka esetekben előfordulhat, hogy közvetlenül az adatbázis szintjén kell csatlakozni a felhasználóhoz és a szerepkör-tárolókhoz (a Membership
vagy Roles
osztályok helyett).
A tagsági és szerepkör-keretrendszerek úgy vannak kialakítva, hogy egyetlen felhasználó és szerepkörtár több különböző alkalmazás között is megosztható legyen. A tagsági vagy szerepkör-keretrendszereket használó ASP.NET alkalmazásoknak meg kell adniuk a használni kívánt alkalmazáspartíciót. Röviden, több webalkalmazás is használhatja ugyanazt a felhasználói és szerepkör-tárolót. A 11. ábra három alkalmazásba particionált felhasználói és szerepkör-tárolókat ábrázol: HRSite, CustomerSite és SalesSite. Ez a három webalkalmazás mindegyike saját egyedi felhasználóval és szerepkörrel rendelkezik, de mind fizikailag ugyanabban az adatbázistáblában tárolja a felhasználói fiókját és a szerepkör-adatait.
11. ábra: A felhasználói fiókok több alkalmazás között particionálódhatnak (Kattintással megtekintheti a teljes méretű kép)
A aspnet_Applications
tábla határozza meg ezeket a partíciókat. Minden alkalmazás, amely az adatbázist használja a felhasználói fiókok adatainak tárolására, a táblázat egy sora jelöli. A aspnet_Applications
táblázat négy oszlopból áll: ApplicationId
, ApplicationName
, LoweredApplicationName
és Description
.
ApplicationId
uniqueidentifier
típusú, és a tábla elsődleges kulcsa; ApplicationName
minden alkalmazáshoz egyedi, emberbarát nevet ad.
A többi tagsággal és szerepkörnel kapcsolatos tábla a aspnet_Applications
ApplicationId
mezőjére hivatkozik. Az egyes felhasználói fiókok rekordját tartalmazó aspnet_Users
tábla például egy ApplicationId
idegenkulcs-mezővel rendelkezik; ditto a aspnet_Roles
táblához. A táblák ApplicationId
mezője határozza meg azt az alkalmazáspartíciót, amelyhez a felhasználói fiók vagy szerepkör tartozik.
A felhasználói fiókok adatai két táblában találhatók: aspnet_Users
és aspnet_Membership
. A aspnet_Users
tábla olyan mezőket tartalmaz, amelyek a felhasználói fiók alapvető adatait tartalmazzák. A három legfontosabb oszlop a következő:
UserId
UserName
ApplicationId
UserId
az elsődleges kulcs (és típusa uniqueidentifier
).
UserName
nvarchar(256)
típusú, és a jelszóval együtt a felhasználó hitelesítő adatait is alkotják. (A felhasználó jelszava a aspnet_Membership
táblában van tárolva.) ApplicationId
a felhasználói fiókot egy adott alkalmazáshoz kapcsolja aspnet_Applications
. Az UserName
és ApplicationId
oszlopokon van egy összetett UNIQUE
kényszer. Ez biztosítja, hogy egy adott alkalmazásban minden UserName egyedi legyen, de lehetővé teszi, hogy ugyanazt a UserName
használhassa a különböző alkalmazásokban.
A aspnet_Membership
táblázat további felhasználói fiókadatokat tartalmaz, például a felhasználó jelszavát, e-mail-címét, az utolsó bejelentkezési dátumot és időpontot stb. A aspnet_Users
és aspnet_Membership
táblák rekordjai egy-az-egyhez egyezést tartalmaznak. Ezt a kapcsolatot a tábla elsődleges kulcsaként szolgáló aspnet_Membership
UserId
mezője biztosítja. A aspnet_Users
táblához hasonlóan aspnet_Membership
tartalmaz egy ApplicationId
mezőt, amely ezeket az információkat egy adott alkalmazáspartícióhoz iktatja.
A jelszóadatokat a rendszer a aspnet_Membership
táblában tárolja. A SqlMembershipProvider
lehetővé teszi a jelszavak adatbázisban való tárolását az alábbi három módszer egyikével:
A használt jelszótárolási technika a Web.config
SqlMembershipProvider
beállításaitól függ. A 4. lépésben áttekintjük a SqlMembershipProvider
beállításainak testreszabását. Az alapértelmezett viselkedés a jelszó kivonatának tárolása.
A jelszó tárolásáért felelős oszlopok a következők: Password
, PasswordFormat
és PasswordSalt
.
PasswordFormat
olyan int
típusú mező, amelynek értéke a jelszó tárolására használt technikát jelzi: 0 a Törlés; 1 a kivonatolt; 2 a Encryptedhez.
PasswordSalt
véletlenszerűen létrehozott sztring van hozzárendelve a használt jelszótárolási technikától függetlenül; a PasswordSalt
értéke csak a jelszó kivonatának kiszámításakor használatos. Végül a Password
oszlop tartalmazza a tényleges jelszóadatokat, legyen szó egyszerű szöveges jelszóról, a jelszó kivonatáról vagy a titkosított jelszóról.
Az 1. táblázat bemutatja, hogy ez a három oszlop milyen lehet a mySecret jelszó tárolásakor használt különböző tárolási technikákhoz. .
Tárolási technika<_o3a_p/> | jelszó<_o3a_p/> | PasswordFormat<_o3a_p/> | PasswordSalt<_o3a_p/> |
---|---|---|---|
Világos | MySecret! | 0 | tTnkPlesqissc2y2SMEygA== |
Kivonatolt | 2oXm6sZHWbTHFgjgkGQsc2Ec9ZM= | 1 | wFgjUfhdUFOCKQiI61vtiQ== |
Titkosított | 62RZgDvhxykkqsMchZ0Yly7HS6onhpaoCYaRxV8g0F4CW56OXUU3e7Inza9j9BKp | 2 | LSRzhGS/aa/oqAXGLHJNBw== |
1. táblázat: Példaértékek a Password-Related mezőkhöz a Jelszó MySecret!
Megjegyzés
A SqlMembershipProvider
által használt titkosítási vagy kivonatolási algoritmust a <machineKey>
elem beállításai határozzák meg.
A Szerepkörök keretrendszer lehetővé teszi a fejlesztők számára, hogy szerepköröket definiáljanak, és megadják, hogy a felhasználók milyen szerepkörökhöz tartoznak. Ez az információ két táblán keresztül van rögzítve az adatbázisban: aspnet_Roles
és aspnet_UsersInRoles
. A aspnet_Roles
tábla minden rekordja egy adott alkalmazás szerepkörét jelöli. A aspnet_Users
táblához hasonlóan a aspnet_Roles
táblázat három oszlopból áll:
RoleId
RoleName
ApplicationId
RoleId
az elsődleges kulcs (és típusa uniqueidentifier
). A RoleName
a(z) nvarchar(256)
típusú. És ApplicationId
összekapcsolja a felhasználói fiókot egy adott alkalmazással aspnet_Applications
. A RoleName
és ApplicationId
oszlopokra összetett UNIQUE
korlátozás érvényes, amely biztosítja, hogy az egyes szerepkörnevek egyediek legyenek egy adott alkalmazásban.
A aspnet_UsersInRoles
tábla a felhasználók és a szerepkörök közötti leképezést szolgálja. Csak két oszlop van - UserId
és RoleId
-, és együttesen alkotnak egy összetett elsődleges kulcsot.
A szolgáltatói modellt támogató összes keretrendszer – például a tagsági és szerepkör-keretrendszerek – nem rendelkeznek megvalósítási részletekkel, és ehelyett ezt a felelősséget egy szolgáltatói osztálynak delegálják. A tagsági keretrendszer esetében a Membership
osztály határozza meg a felhasználói fiókok kezelésére szolgáló API-t, de nem lép kapcsolatba közvetlenül egyetlen felhasználói tárral sem. Ehelyett a Membership
osztály metódusai átadják a kérést a konfigurált szolgáltatónak – a SqlMembershipProvider
fogjuk használni. Amikor meghívjuk az Membership
osztály egyik metódusát, honnan tudja a tagsági keretrendszer, hogy delegálja a hívást a SqlMembershipProvider
?
A Membership
osztály rendelkezik egy Providers
tulajdonsággal, amely a tagsági keretrendszer által használható összes regisztrált szolgáltatói osztályra mutató hivatkozást tartalmaz. Minden regisztrált szolgáltatóhoz tartozik egy név és típus. A név emberbarát módon hivatkozhat egy adott szolgáltatóra a Providers
gyűjteményben, míg a típus a szolgáltatóosztályt azonosítja. Emellett minden regisztrált szolgáltató konfigurációs beállításokat is tartalmazhat. A tagsági keretrendszer konfigurációs beállításai közé tartozik többek között a passwordFormat
és a requiresUniqueEmail
, még számos más mellett. A SqlMembershipProvider
által használt konfigurációs beállítások teljes listáját a 2. táblázatban találja.
A Providers
tulajdonság tartalma a webalkalmazás konfigurációs beállításain keresztül van megadva. Alapértelmezés szerint minden webalkalmazás rendelkezik egy AspNetSqlMembershipProvider
nevű SqlMembershipProvider
típusú szolgáltatóval. Ez az alapértelmezett tagsági szolgáltató regisztrálva van a machine.config
(található a %WINDIR%\Microsoft.Net\Framework\v2.0.50727\CONFIG)
:
Figyelmeztetés
Úgy tűnik, hogy a keresett minta át lett helyezve! Biztos lehet benne, hogy dolgozunk a probléma megoldásán.
Ahogy a fenti korrektúra is mutatja, a <membership>
elem határozza meg a tagsági keretrendszer konfigurációs beállításait, míg a <providers>
gyermekelem a regisztrált szolgáltatókat. A szolgáltatók a <add>
vagy <remove>
elemek használatával vehetők fel vagy távolíthatók el; az <clear>
elem használatával távolítsa el az összes jelenleg regisztrált szolgáltatót. Ahogy a jelölés fent is mutatja, machine.config
hozzáad egy AspNetSqlMembershipProvider
nevű szolgáltatót, amely SqlMembershipProvider
típusú.
A name
és type
attribútumok mellett a <add>
elem olyan attribútumokat is tartalmaz, amelyek meghatározzák a különböző konfigurálási beállítások értékeit. A 2. táblázat felsorolja az elérhető SqlMembershipProvider
-specifikus konfigurációs beállításokat, valamint az egyes beállítások leírását.
Megjegyzés
A 2. táblázatban feljegyzett alapértelmezett értékek a SqlMembershipProvider
osztályban definiált alapértelmezett értékekre vonatkoznak. Vegye figyelembe, hogy a AspNetSqlMembershipProvider
nem minden konfigurációs beállítása felel meg a SqlMembershipProvider
osztály alapértelmezett értékének. Ha például nincs megadva tagságszolgáltatóban, a requiresUniqueEmail
beállítás alapértelmezés szerint igaz. A AspNetSqlMembershipProvider
azonban felülírja ezt az alapértelmezett értéket egy false
érték explicit megadásával.
Beállítás<_o3a_p /> | leírás<_o3a_p/> |
---|---|
ApplicationName |
Ne feledje, hogy a tagsági keretrendszer lehetővé teszi egy felhasználói tároló particionálását több alkalmazás között. Ez a beállítás a tagságszolgáltató által használt alkalmazáspartíció nevét jelzi. Ha ez az érték nincs explicit módon megadva, futásidőben az alkalmazás virtuális gyökérútvonalának értékére van beállítva. |
commandTimeout |
Az SQL-parancs időtúllépési értékét adja meg (másodpercben). Az alapértelmezett érték 30. |
connectionStringName |
A <connectionStrings> elemben lévő kapcsolati karakterlánc neve, amelyet a felhasználói tároló adatbázisához való csatlakozáshoz kell használni. Ez az érték kötelező. |
description |
A regisztrált szolgáltató emberbarát leírása. |
enablePasswordRetrieval |
Megadja, hogy a felhasználók lekérhetik-e az elfelejtett jelszót. Az alapértelmezett érték a false . |
enablePasswordReset |
Azt jelzi, hogy a felhasználók visszaállíthatják-e a jelszavukat. Alapértelmezés szerint true . |
maxInvalidPasswordAttempts |
A megadott passwordAttemptWindow időn belül egy adott felhasználóra vonatkozóan végrehajtható sikertelen bejelentkezési kísérletek maximális száma, mielőtt a felhasználót zárolnák. Az alapértelmezett érték 5. |
minRequiredNonalphanumericCharacters |
A felhasználó jelszavában megjelenítendő nem alfanumerikus karakterek minimális száma. Ennek az értéknek 0 és 128 közöttinek kell lennie; az alapértelmezett érték 1. |
minRequiredPasswordLength |
A jelszóban kötelező karakterek minimális száma. Ennek az értéknek 0 és 128 közöttinek kell lennie; az alapértelmezett érték 7. |
name |
A regisztrált szolgáltató neve. Ez az érték kötelező. |
passwordAttemptWindow |
A sikertelen bejelentkezési kísérletek nyomon követésének percszáma. Ha egy felhasználó érvénytelen bejelentkezési hitelesítő adatokat ad meg maxInvalidPasswordAttempts megadott ablakban, a rendszer kizárja őket. Az alapértelmezett érték 10. |
PasswordFormat |
A jelszótároló formátuma: Clear , Hashed vagy Encrypted . Az alapértelmezett érték a Hashed . |
passwordStrengthRegularExpression |
Ha meg van adva, ez a reguláris kifejezés a felhasználó által választott jelszó erősségének kiértékelésére szolgál egy új fiók létrehozásakor vagy a jelszó módosításakor. Az alapértelmezett érték egy üres sztring. |
requiresQuestionAndAnswer |
Megadja, hogy a felhasználónak válaszolnia kell-e a biztonsági kérdésére a jelszó beolvasásakor vagy alaphelyzetbe állításakor. Az alapértelmezett érték a true . |
requiresUniqueEmail |
Azt jelzi, hogy egy adott alkalmazáspartíció összes felhasználói fiókjának egyedi e-mail-címmel kell-e rendelkeznie. Az alapértelmezett érték a true . |
type |
A szolgáltató típusát adja meg. Ez az érték kötelező. |
2. táblázat: Tagság és SqlMembershipProvider
konfigurációs beállítások
A AspNetSqlMembershipProvider
mellett más tagsági szolgáltatók is regisztrálhatók alkalmazásonként, ha hasonló korrektúrát ad hozzá a Web.config
fájlhoz.
Megjegyzés
A szerepkörök keretrendszere nagyjából ugyanúgy működik: van egy alapértelmezett regisztrált szerepkör-szolgáltató a machine.config
, és a regisztrált szolgáltatók alkalmazásonként testre szabhatók Web.config
. Egy későbbi oktatóanyagban részletesen megvizsgáljuk a Szerepkörök keretrendszert és annak konfigurációs korrektúrát.
Az alapértelmezett SqlMembershipProvider
(AspNetSqlMembershipProvider
) connectionStringName
attribútuma LocalSqlServer
. A AspNetSqlMembershipProvider
szolgáltatóhoz hasonlóan a kapcsolati karakterlánc neve LocalSqlServer
meg van határozva machine.config
-ben.
Figyelmeztetés
Úgy tűnik, hogy a keresett minta át lett helyezve! Biztos lehet benne, hogy dolgozunk a probléma megoldásán.
Mint látható, ez a kapcsolati sztring egy SQL 2005 Express Edition-adatbázist határoz meg, amely a következő helyen található: |DataDirectory|aspnetdb.mdf'. A sztring |DataDirectory| futásidőben átalakul, hogy a ~/App_Data/
könyvtárra mutasson, így az adatbázis útvonala |DataDirectory|aspnetdb.mdf" a ~/App_Data
/aspnet.mdf
.
Ha nem adtunk meg tagságszolgáltatói adatokat az alkalmazás Web.config
fájljában, az alkalmazás az alapértelmezett regisztrált tagságszolgáltatót használja, AspNetSqlMembershipProvider
. Ha a ~/App_Data/aspnet.mdf
adatbázis nem létezik, a ASP.NET futtatókörnyezet automatikusan létrehozza és hozzáadja az Application Services-sémát. Azonban nem szeretnénk a aspnet.mdf
adatbázist használni; ehelyett a 2. lépésben létrehozott SecurityTutorials.mdf
adatbázist szeretnénk használni. Ez a módosítás kétféleképpen valósítható meg:
LocalSqlServer
kapcsolati sztring nevének értékét aWeb.config
. A LocalSqlServer
kapcsolati sztringnév értékének felülírásával Web.config
használhatjuk a regisztrált alapértelmezett Tagsági szolgáltatót (AspNetSqlMembershipProvider
), és az megfelelően működni fog az SecurityTutorials.mdf
adatbázissal. Ez a módszer akkor megfelelő, ha elégedett a AspNetSqlMembershipProvider
által megadott konfigurációs beállításokkal. Erről a technikáról további információt Scott Guthrie blogbejegyzésében talál, ASP.NET 2.0 Application Services konfigurálása SQL Server 2000 vagy SQL Server 2005használatára.SqlMembershipProvider
szolgáltatót, és konfigurálja aconnectionStringName
beállítást, hogy az aSecurityTutorials.mdf
adatbázisra mutasson. Ez a módszer olyan helyzetekben hasznos, amikor az adatbázis kapcsolati sztringje mellett más konfigurációs tulajdonságokat is testre szeretne szabni. Saját projektjeimben mindig ezt a megközelítést használom rugalmassága és olvashatósága miatt.Mielőtt hozzáadhatnánk egy új regisztrált szolgáltatót, amely a SecurityTutorials.mdf
adatbázisra hivatkozik, először hozzá kell adnunk egy megfelelő kapcsolati sztringértéket a Web.config
<connectionStrings>
szakaszában. Az alábbi korrektúra hozzáad egy SecurityTutorialsConnectionString
nevű új kapcsolati sztringet, amely az SQL Server 2005 Express Edition SecurityTutorials.mdf
adatbázisra hivatkozik a App_Data
mappában.
Figyelmeztetés
Úgy tűnik, hogy a keresett minta át lett helyezve! Biztos lehet benne, hogy dolgozunk a probléma megoldásán.
Megjegyzés
Ha másik adatbázisfájlt használ, szükség szerint frissítse a kapcsolati sztringet. A megfelelő kapcsolati sztring kialakításáról további információért, látogassa meg a ConnectionStrings.comoldalt.
Ezután adja hozzá az alábbi tagságkonfigurációs jelölőt a Web.config
fájlhoz. Ez a jelölés regisztrál egy új szolgáltatót a SecurityTutorialsSqlMembershipProvider
névvel.
Figyelmeztetés
Úgy tűnik, hogy a keresett minta át lett helyezve! Biztos lehet benne, hogy dolgozunk a probléma megoldásán.
A SecurityTutorialsSqlMembershipProvider
szolgáltató regisztrálása mellett a fenti korrektúra az SecurityTutorialsSqlMembershipProvider
határozza meg alapértelmezett szolgáltatóként (a <membership>
elem defaultProvider
attribútumán keresztül). Ne feledje, hogy a tagsági keretrendszer több regisztrált szolgáltatóval is rendelkezhet. Mivel a AspNetSqlMembershipProvider
az első szolgáltatóként van regisztrálva a machine.config
, az alapértelmezett szolgáltatóként szolgál, hacsak másként nem jelezzük.
Az alkalmazás jelenleg két regisztrált szolgáltatóval rendelkezik: AspNetSqlMembershipProvider
és SecurityTutorialsSqlMembershipProvider
. A SecurityTutorialsSqlMembershipProvider
szolgáltató regisztrálása előtt azonban törölhettük volna az összes korábban regisztrált szolgáltatót úgy, hogy közvetlenül a <add>
elem elé adtunk hozzá egy <clear />
elemet. Ez törli a AspNetSqlMembershipProvider
a regisztrált szolgáltatók listájából, ami azt jelenti, hogy az SecurityTutorialsSqlMembershipProvider
lenne az egyetlen regisztrált tagságszolgáltató. Ha ezt a megközelítést használjuk, akkor nem kell alapértelmezett szolgáltatóként megjelölnünk a SecurityTutorialsSqlMembershipProvider
, mivel ez lenne az egyetlen regisztrált tagsági szolgáltató. További információ a <clear />
használatáról: A <clear />
használata szolgáltatók hozzáadásakor.
Vegye észre, hogy a SecurityTutorialsSqlMembershipProvider
connectionStringName
beállítása az imént hozzáadott SecurityTutorialsConnectionString
kapcsolati sztring nevére hivatkozik, és hogy a applicationName
beállítása SecurityTutorials értékre lett állítva. Ezenkívül a requiresUniqueEmail
beállítás true
-re lett beállítva. Minden más konfigurációs beállítás megegyezik a AspNetSqlMembershipProvider
értékeinek. Ha szeretné, itt bármilyen konfigurációmódosítást elvégezhet. Például megszűkítheti a jelszó erősségét úgy, hogy két nem alfanumerikus karaktert követel meg egy helyett, vagy ha hét helyett nyolc karakterre növeli a jelszó hosszát.
Megjegyzés
Ne feledje, hogy a tagsági keretrendszer lehetővé teszi egy felhasználói tároló particionálását több alkalmazás között. A tagságszolgáltató applicationName
beállítása azt jelzi, hogy a szolgáltató milyen alkalmazást használ a felhasználói tároló használatakor. Fontos, hogy explicit módon állítson be egy értéket a applicationName
konfigurációs beállításhoz, mert ha a applicationName
nincs explicit módon beállítva, akkor futásidőben hozzá lesz rendelve a webalkalmazás virtuális gyökérútvonalához. Ez mindaddig jól működik, amíg az alkalmazás virtuális gyökérútvonala nem változik, de ha az alkalmazást egy másik elérési útra helyezi át, a applicationName
beállítás is megváltozik. Ha ez történik, a tagságszolgáltató a korábban használttól eltérő alkalmazáspartícióval fog dolgozni. Az áthelyezés előtt létrehozott felhasználói fiókok egy másik alkalmazáspartícióban lesznek, és ezek a felhasználók már nem tudnak bejelentkezni a webhelyre. Erről részletesebben A applicationName
tulajdonság beállítása ASP.NET 2.0-s tagság és egyéb szolgáltatók konfigurálásakorcímű témakörben olvashat.
Jelenleg van egy adatbázisunk a konfigurált alkalmazásszolgáltatásokkal (SecurityTutorials.mdf
), és úgy konfiguráltuk a webalkalmazást, hogy a tagsági keretrendszer az imént regisztrált SecurityTutorialsSqlMembershipProvider
szolgáltatót használja. Ez a regisztrált szolgáltató SqlMembershipProvider
típusú, és connectionStringName
értéke a megfelelő kapcsolati karakterláncra (SecurityTutorialsConnectionString
) van állítva, míg applicationName
értéke kifejezetten meg van határozva.
Most már készen állunk az alkalmazás tagsági keretrendszerének használatára. A következő oktatóanyagban megvizsgáljuk, hogyan hozhat létre új felhasználói fiókokat. Ezt követően áttekintjük a felhasználók hitelesítését, a felhasználóalapú engedélyezést és a további, felhasználóval kapcsolatos információk tárolását az adatbázisban.
Boldog programozást!
Az oktatóanyagban tárgyalt témakörökről az alábbi forrásokban talál további információt:
applicationName
tulajdonságot a ASP.NET 2.0-s tagság és egyéb szolgáltatók konfigurálásakor<add>
elem a szolgáltatók számára a tagsághoz<membership>
elem<providers>
eleme<clear />
használata szolgáltatók hozzáadásakorSqlMembershipProvider
Scott Mitchell, több ASP/ASP.NET-könyv szerzője és a 4GuysFromRolla.com alapítója, 1998 óta dolgozik a Microsoft webtechnológiáival. Scott független tanácsadóként, edzőként és íróként dolgozik. Legújabb könyve Sams Teach Yourself ASP.NET 2.0 24 óra alatt. Scott elérhető a mitchell@4guysfromrolla.com vagy a blogján keresztül a http://ScottOnWriting.NET.
Ezt az oktatóanyag-sorozatot sok hasznos véleményező áttekintette. Az oktatóanyag vezető véleményezője Alicja Maziarz volt. Szeretné áttekinteni a közelgő MSDN-cikkeimet? Ha igen, dobj egy sort a mitchell@4GuysFromRolla.com.
esemény
Power BI DataViz világbajnokság
febr. 14. 16 - márc. 31. 16
4 esélye, hogy belépjen, nyerhet egy konferenciacsomagot, és bejuthat a LIVE Grand Finale-be Las Vegasban
További információOktatás
Modul
Adatbázisok használata .NET Aspire-projektben - Training
Ismerje meg azokat az adatbázis-rendszereket, amelyekhez a .NET Aspire képes csatlakozni beépített összetevők használatával. Ezután megtudhatja, hogyan konfigurálhatja a relációs és a nem kapcsolódó adatbázisokhoz való kapcsolatokat, és hogyan tárolhatja az adatokat.