Gincsai Gábor MSDN Kompetencia Központ Budapesti Műszaki és Gazdaságtudományi Egyetem Automatizálási és Alkalmazott Informatikai Tanszék Biztonság és jogosultság kezelés ASP.NET 2.0 környezetben
2 Tartalom Membership szolgáltatás Role manager szolgáltatás Profilok használata Egyéb újdonságok
3 Membership szolgáltatás Felhasználók kezelése és azonosítása Deklaratív elérés: Web Site Admin Tool Programozott elérés: Membership API Egyszerűsíti az űrlap alapú hitelesítést Logika a felhasználó nevének és jelszavának ellenőrzésére, létrehozására stb. Felhasználók bejelentkezési adatainak, e- mail címének stb. tárolása Provider-alapú rugalmas tárolás!
4 Tagság séma API Adatok SQL Server stb. Providerek Active Directory Active Directory Login LoginStatus LoginView stb. Membership MembershipUser SqlMembershipProvider ActiveDirectory- MembershipProvider stb. Vezérlők
5 Provider modell SQL Server Alkalmazás API Provider Interface Konfig ASP.NET.dll SQL Provider SQL Provider Access Provider Access Provider Egyéb Provider Egyéb Provider Access stb.
6 Provider Toolkit Letölthető Starter Kit Access adatbázist használó provider minta implementációja Membership Role Manager Profil
7 Aspnet_regsql.exe SqlMembershipProvider által használt adatbázis létrehozását segítő eszköz.
8 Milyen adatbázist hoz létre?
9 <membership defaultProvider="AspNetSqlMembershipProvider„ userIsOnlineTimeWindow="15"> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, …" connectionStringName="LocalSqlServer" enablePasswordRetrieval="[true|false]" enablePasswordReset="[true|false]" requiresQuestionAndAnswer="[true|false]" applicationName="/" requiresUnique ="[true|false]" passwordFormat="[Clear|Encrypted|Hashed]" maxInvalidPasswordAttempts="5" passwordAttemptWindow="10" passwordStrengthRegularExpression="" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" /> <membership defaultProvider="AspNetSqlMembershipProvider„ userIsOnlineTimeWindow="15"> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, …" connectionStringName="LocalSqlServer" enablePasswordRetrieval="[true|false]" enablePasswordReset="[true|false]" requiresQuestionAndAnswer="[true|false]" applicationName="/" requiresUnique ="[true|false]" passwordFormat="[Clear|Encrypted|Hashed]" maxInvalidPasswordAttempts="5" passwordAttemptWindow="10" passwordStrengthRegularExpression="" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" /> SqlMembershipProvider beállítása web.config
10 Membership osztály System.Web.Security Statikus függvények a tagsági feladatokra. Felhasználó létrehozása és törlése Információk elkérése a felhasználóról Új jelszó létrehozása Belépés ellenőrzése Provider beállítások elérése.
11 Felhasználó ellenőrzése ASP.NET v1.X Stored Procedures Data Access Layer (DAL) Business Logic Layer (BLL)
12 if( Membership.ValidateUser( UserName.Text, Password.Text ) ) { RedirectFromLoginPage(UserName.Text,RememberMe.Checked ); } else { // TODO: Nem sikerült belépni } if( Membership.ValidateUser( UserName.Text, Password.Text ) ) { RedirectFromLoginPage(UserName.Text,RememberMe.Checked ); } else { // TODO: Nem sikerült belépni } Felhasználó ellenőrzése ASP.NET v2.0
13 try { } catch( MembershipCreateUserException e ) { // Miért nem sikerült létrehozni a felhasználót switch( e.StatusCode ) { case MembershipCreateStatus.DuplicateUsername: … case MembershipCreateStatus.Duplicate … case MembershipCreateStatus.InvalidPassword: … default: … } try { } catch( MembershipCreateUserException e ) { // Miért nem sikerült létrehozni a felhasználót switch( e.StatusCode ) { case MembershipCreateStatus.DuplicateUsername: … case MembershipCreateStatus.Duplicate … case MembershipCreateStatus.InvalidPassword: … default: … } Új felhasználó létrehozása C#
14 MembershipUser osztály System.Web.Security Regisztrált felhasználót reprezentáló osztály. Tulajdonságok a felhasználó adatainak elkérésére / beállítására. A Membership osztály függvényei ezt adják vissza.
15 if( Membership.ValidateUser( UserName.Text, Password.Text ) ) { MembershipUser user = Membership.GetUser( UserName.Text ); user.Comment = "0"; // Hibás próbálkozások törlése RedirectFromLoginPage( UserName.Text, RememberMe.Checked ); } else { MembershipUser user = Membership.GetUser( UserName.Text ); if( user != null ) { // Hibás próbálkozások számának növelése string count = Convert.ToInt32( user.Comment ) + 1; // Ha 4-nél több, akkor kitiltjuk if( count > 4 ) user.IsApproved = false; // Hibás próbálkozások számának frissítése user.Comment = count.ToString(); } if( Membership.ValidateUser( UserName.Text, Password.Text ) ) { MembershipUser user = Membership.GetUser( UserName.Text ); user.Comment = "0"; // Hibás próbálkozások törlése RedirectFromLoginPage( UserName.Text, RememberMe.Checked ); } else { MembershipUser user = Membership.GetUser( UserName.Text ); if( user != null ) { // Hibás próbálkozások számának növelése string count = Convert.ToInt32( user.Comment ) + 1; // Ha 4-nél több, akkor kitiltjuk if( count > 4 ) user.IsApproved = false; // Hibás próbálkozások számának frissítése user.Comment = count.ToString(); } Felhasználó kitiltása C#
16 Login vezérlők Felület és logika a biztonsággal kapcsolatos feladatokhoz Login Password- Recovery Password- Recovery LoginStatus LoginName LoginView CreateUser- Wizard CreateUser- Wizard Change- Password Change- Password Tagság és szerepkör kezelés
17 Login Controls Felhasználó beléptetése Jelszó emlékeztető Jelszó csere
18 Tartalom Membership szolgáltatás Role manager szolgáltatás Profilok használata Egyéb újdonságok
19 Role Manager szolgáltatás Szerep alapú jogosultság kezelés készen Deklaratív elérés: Web Site Admin Tool Programozott elérés: Roles API Egyszerűbb szerep alapú jogosultság kezelés űrlap alapú hitelesítés esetén Minden kérésnél szerepekhez rendeli a felhasználót Tárolja a szerepkörök adatait Provider-alapú rugalmas tárolás!
20 Szerepkör kezelés séma Role API Adatok SQL Server stb. Providerek Authorization Manager Authorization Manager Login LoginStatus LoginView stb. Vezérlők Roles SqlRole- Provider AuthorizationStore- RoleProvider stb. WindowsToken- RoleProvider
21 Role Manager bekapcsolása A szerepkör kezelés alapértelmezés szerint nincs engedélyezve. Engedélyezzük a web.config-ban: web.config
22 <roleManager enabled="[true|false]" defaultProvider="AspNetSqlRoleProvider" createPersistentCookie="[true|false]" cacheRolesInCookie="[true|false]" cookieName=".ASPXROLES" cookieTimeout="00:30:00" cookiePath="/" cookieRequireSSL="[true|false]" cookieSlidingExpiration="[true|true]" cookieProtection="[None|Validation|Encryption|All]" domain="" maxCachedResults="25" > <add applicationName="/" connectionStringName="LocalSqlServer" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider,System.Web,…" /> <roleManager enabled="[true|false]" defaultProvider="AspNetSqlRoleProvider" createPersistentCookie="[true|false]" cacheRolesInCookie="[true|false]" cookieName=".ASPXROLES" cookieTimeout="00:30:00" cookiePath="/" cookieRequireSSL="[true|false]" cookieSlidingExpiration="[true|true]" cookieProtection="[None|Validation|Encryption|All]" domain="" maxCachedResults="25" > <add applicationName="/" connectionStringName="LocalSqlServer" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider,System.Web,…" /> Role Manager beállítása web.config
23 Roles osztály System.Web.Security Átjáró a Role Management API-hoz Legfontosabb feladatokhoz statikus függvények Szerepek létrehozása / törlése Felhasználók szerephez rendelése Felhasználók eltávolítása egy szerepből Provider beállítások elérése
24 // Ha nem létezik a szerepkör, létrehozzuk if( !Roles.RoleExists("Bloggers" ) ) { Roles.CreateRole( "Bloggers" ); } // Elkérjük az aktuális felhasználót string name = Membership.GetUser().Username; // Hozzáadjuk a szerepkörhöz Roles.AddUserToRole( name, "Bloggers" ); // Ha nem létezik a szerepkör, létrehozzuk if( !Roles.RoleExists("Bloggers" ) ) { Roles.CreateRole( "Bloggers" ); } // Elkérjük az aktuális felhasználót string name = Membership.GetUser().Username; // Hozzáadjuk a szerepkörhöz Roles.AddUserToRole( name, "Bloggers" ); Használata C#
25 Szerepkör cache Ha a süti engedélyezve van Titkosított lista a szerepkörökről Nem kell adatbázishoz fordulni minden kérésénél Ha a süti nincs engedélyezve A Role Manager továbbra is működik Az első alkalommal lekérdezni a szerepeket Az oldalon található többi hivatkozás a cache-elt listát használja.
26 Role Management Web Site Admin Tool Felhasználók kezelése
27 Tartalom Membership szolgáltatás Role manager szolgáltatás Profilok használata Egyéb újdonságok
28 Profilok Felhasználói adatok perzisztens tárolása Erősen típusos elérés ( Session) Felolvasás igény esetén ( Session) Perzisztens ( Session) Bejelentkezett és névtelen felhasználóknak Saját típusok támogatása Elérés HttpProfileBase segítségével Provider-alapú rugalmas tárolás!
29 Profil séma Profilok Profil adatok SQL Server Express Expressstb.stb. ProfileBaseProfileBase ProfileCommonProfileCommon stb.stb. Profil providerek SqlProfileProviderSqlProfileProvider SQL Server
30 // Cím és téma belállítása Profile.Title = "Gina Blooooogja"; // Szerző azonosítójának beállítása Profile.AuthorID = new Guid(user.ProviderUserKey.ToString()); // Fénykép beállítása Profile.Photo = myPhoto; // Cím és téma belállítása Profile.Title = "Gina Blooooogja"; // Szerző azonosítójának beállítása Profile.AuthorID = new Guid(user.ProviderUserKey.ToString()); // Fénykép beállítása Profile.Photo = myPhoto; <add name="Photo" type="System.Drawing.Image" serializeAs="Binary"/> <add name="Photo" type="System.Drawing.Image" serializeAs="Binary"/> Profil definíció és elérése C# web.config
31 Egyedi típusok Type attribútummal adható meg a típus Teljesen meghatározott névvel (FQN) kell rá hivatkozni serializeAs hogyan sorosítsa Binary | Xml | String serializeAs="Binary„ Sorosíthatónak kell lennie a típusnak serializeAs="String„ Típus konverziót támogatni kell
32 public partial class _Default : System.Web.UI.Page { … protected ProfileCommon Profile { get { return ((ProfileCommon)(this.Context.Profile)); } } … } public partial class _Default : System.Web.UI.Page { … protected ProfileCommon Profile { get { return ((ProfileCommon)(this.Context.Profile)); } } … } Hogyan működik? Az oldal generált osztálya ProfileBase-ből származó generált osztály, ami tartalmazza a profil adatokat A generált oldal osztály tartalmazza a Profile tulajdonságot. C#
33 Profil csoportok Tulajdonságokat csoportosíthatjuk kulcsszóval definiáljuk Csoportok nem ágyazhatók egymásba
34 // Beállítjuk a blog címét Profile.BlogData.Title = "Gina Bloooogja"; // Beállítjuk az alcímet Profile.BlogData.SubTitle = "Mert blogolni jó :)"; // Beállítjuk a blog címét Profile.BlogData.Title = "Gina Bloooogja"; // Beállítjuk az alcímet Profile.BlogData.SubTitle = "Mert blogolni jó :)"; Profil csoport létrehozása web.config
35 Anonymous profil Alapértelmezés szerint nincs engedélyezve. Azonosított felhasználó ID-jával indexeli Anonymous profil engedélyezése Engedélyezzük az anonymous azonosítást Határozzuk meg, mely profil tulajdonságokkal rendelkezzen az anonymous felhasználó Anonymous ID-val indexeli az adatokat.
36 Anonymous profil web.config
37 <anonymousIdentification enabled="[true|false]" cookieName=".ASPXANONYMOUS" cookieTimeout="69:10:40" cookiePath="/" cookieRequireSSL="[true|false]" cookieSlidingExpiration="[true|false]" cookieProtection="[None|Validation|Encryption|All]" cookieless="[UseUri|UseCookies|AutoDetect|UseDeviceProfile]" domain="" /> <anonymousIdentification enabled="[true|false]" cookieName=".ASPXANONYMOUS" cookieTimeout="69:10:40" cookiePath="/" cookieRequireSSL="[true|false]" cookieSlidingExpiration="[true|false]" cookieProtection="[None|Validation|Encryption|All]" cookieless="[UseUri|UseCookies|AutoDetect|UseDeviceProfile]" domain="" /> Anonymous azonosítás Sütivel, vagy süti nélküli (URL munging) web.config
38 Eseménykezelő neve Leírás AnonymousIdentification_ Creating Az anonymous ID létrehozása előtt váltódik ki. Profile_MigrateAnonymous A felhasználó belépésekor váltódik ki, hogy ha az anonymous felhasználók is tárolhatnak adatok a Profilba, lehessen ezeket az információkat átmigrálni a belépett felhasználó profiljába. Profile_Personalize A profil betöltődése előtt váltódik ki, hogy lehessen saját profilt is betölteni. Profile_ProfileAutoSaving A profil mentése előtt váltódik ki, hogy a saját típusokat tartalmazó profilokat testreszabhassuk. Profil események A profil szolgáltatás és az anonymous azonosítás globális eseményeket vált ki.
39 void Profile_MigrateAnonymous( Object sender, ProfileMigrateEventArgs e) { if( Profile.Title == null ) Profile.Title = Profile.GetProfile(e.AnonymousID).Title; } void Profile_MigrateAnonymous( Object sender, ProfileMigrateEventArgs e) { if( Profile.Title == null ) Profile.Title = Profile.GetProfile(e.AnonymousID).Title; } Anonymous felhasználó migrálása global.asax
40 <profile enabled="[true|false]" defaultProvider="AspNetSqlProfileProvider" automaticSaveEnabled="[true|false]" inherits=""> <add applicationName="/" connectionStringName="LocalSqlServer" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlProfileProvider, …" /> <profile enabled="[true|false]" defaultProvider="AspNetSqlProfileProvider" automaticSaveEnabled="[true|false]" inherits=""> <add applicationName="/" connectionStringName="LocalSqlServer" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlProfileProvider, …" /> Profil szolgáltatás beállítása web.config
41 Profil Saját profil létrehozása Regisztráció Profil adatok módosítása
42 Tartalom Membership szolgáltatás Role manager szolgáltatás Profilok használata Egyéb újdonságok
43 web.config titkosítása Bizalmas információ a web.config-ban Pl: adatbázishoz kapcsolódási adatok aspnet_regiis tudja titkosítani A.NET fel tudja olvasni, számunkra transzparens módon aspnet_regiis –pef ”ConnectionStrings” ”c:\Blog” –prov ”DataProtectionConfigurationProvider”
44 Nem ASP.NET fájlok védelme Cassini Alapértelmezés szerint védi Web.config alapján IIS 6.0 Alapértelmezésben nem védi Az IIS nem továbbítja a kérést Web.config-ban megadható, hogy védje
45 Összefoglalás Biztonság sokkal kevesebb kóddal Login kontrollok kódolás nélkül Kiterjeszthető, rugalmas modell Beépített webes adminisztrációs felület Nem újdonság, megoldás!
46 További információk Fejlesztői Portál: Webfejlesztés témaközpont: ASP.NET honlap MSDN ASP.NET Developer Center Visual Studio 2005 MSDN Documentation Visual Web Developer 2005 Express Edition Visual Web Developer 2005 Express Edition MSDN documentation ASP.NET 2.0 Quickstart tutorial Scott Guthrie blogja
47 Kérdések és válaszok Értékelőlapok!
48 © 2006 Microsoft Corporation. Minden jog fenntartva. Az előadás csupán tájékoztató jellegű, a Microsoft Magyarország a benne szereplő esetleges hibákért vagy tévedésekért semmilyen felelősséget nem vállal.