ASP.NET har - som du sikkert har hørt/læst - indbygget et API kaldet
Membership
som mere eller mindre automatisk kan håndtere oprettelse af brugere/roller, bruger
login, ændring af bruger/rolle oplysninger m.m. - For at benytte dette kræves det
at din database indeholder et sæt pre-defineret tabeller og stored procedures, samt
at der i din web.config fil er konfigureret providers for Membership, Roles m.m.
- Hvis du ikke kender til Membership, vil vi anbefale at du
læser om Membership på MSDN først.
Membership og placering af data (MS SQL Server)
Dine bruger/roller m.m. oplysninger gemmes automatisk af Membership API'et i et
sæt pre-defineret tabeller og stored procedures. Ønsker du at anvende Membership/Roles
skal du konfigurere din SQL Server database til at indeholde disse tabeller og stored
procedures, således databasen indeholder både dine egne tabeller og Membership API'ets
tabeller/stored procedures.
Bemærk at du ikke kan anvende "App_Data" folderen til at placere en filbaseret "aspnetdb.mdf"
database - denne funktionalitet er slået fra pga. sikkerhed - du skal tilføje de
pre-defineret tabeller og stored procedures som er krævet af Membership API'et til
din egen SQL Server database.
For at tilføje de pre-defineret tabeller og stored procedures, som er krævet af
Membership API'et, til din database skal du tilføje tabeller, views, StoredProcedures
m.m. via SQL scripts som Microsoft har udarbejdet.
Du finder .SQL filerne (scripts) i folderen "C:\WINDOWS\Microsoft.NET\Framework\[Versionsnummer]".
Her ligger der 9 .SQL filer der installerer support for de forskellige API (de hedder
alle "Install[API].SQL) - Du kan også vælge at downloade Microsofts
Membership.sql fil der opretter tabeller/SPs til at understøtte Membership,
Roles, Profiles og WebParts .. altså de 4 absolut mest anvendte API'er. Du logger
ind på din database via
Microsoft SQL Server Management Studio og afvikler de .SQL scripts der er
nødvendige. Bemærk at "InstallCommon.sql" skal afvikles som det første script. Følgende
er en oversigt over de scripts der understøtter de typiske API'er:
- InstallCommon.sql (SKAL udføres som det første script - og skal udføres uanset
hvilket API du ønsker at benytte!)
- InstallMembership.SQL (understøtter Membership API)
- InstallRoles.SQL (Understøtter Roles API)
- InstallProfile.SQL (Understøtter Profile API)
Bemærk: Du skal erstatte databasenavnet "aspnetdb" med navnet på sin egen
database på serveren i ovenstående scripts.
Når du har fået oprettet de tabeller og stored procedures som er krævet er det tid
til at opsætte providers i din web.config fil.
web.config
Hele Membership API'et er - som så meget andet i ASP.NET - Provider baseret, hvilket
bl.a. betyder at al konfiguration af Membership og Roles API'et sker i web.config
filen. Det er derfor vigtigt at du tilretter din web.config fil til at indeholde
Membership og Roles providers - se din velkomstmail som indeholder både Membership
og RoleManager providers.
Se vores eksempel web.config filer:
Web.config - ASP.NET 3.5 /
Web.config
- ASP.NET 4.0
De forskellige providers kræver at connectionStringName er udfyldt med navnet på
din ConnectionString - Vi anbefaler at du anvender navnet 'MyAspNetDB', men du kan
anvende et vilkårligt navn - du skal bare sikre dig at du har en ConnectionString
til din database som ser således ud:
<connectionStrings>
<add name="MyAspNetDB" connectionString="DataSource=(local);Initial Catalog=DATABASE;User
ID=USERNAME;Password=PASSWORD" providerName="System.Data.SqlClient" />
</connectionStrings>
Den primære web.config fil, som indeholder Membership/RoleManager providers, ConnectionString
m.m., placeres i roden (folderen 'httpdocs') af dit website. Det mest almindelige
er at roden være tilgængelig for anonyme brugere, men en eller flere foldere skal
være beskyttet af Membership, hvilket er præcis hvad ovenstående eksempel beskriver.
Eksemplet indeholder en web.config fil, hvor roden er tilgængelig for alle og folderen
"admin" er beskyttet af Membership - kort fortalt skal der i den folder der skal
beskyttes blot placeres en web.config fil som indeholder nedenstående:
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
Hvor <deny users="?" /> indikerer at alle anonyme brugere ikke har adgang
(? = anonym / * = alle). Brugeren vil automatisk blive redirected til filen "login.aspx"
som skal være placeret i roden af dit website (vil typisk indeholde en login kontrol).
Membership/Roles API manager applikation
Når du har konfigureret din web.config fil korrekt er du klar til at oprette den
første bruger/rolle. Dette gøres lettest ved at downloade vores
Membership/Roles API manager applikation (link fremgår af din
velkomstmail) og kopiere alle .aspx filer, default.htm og indeholdet af "bin" folderen
op på dit webhotel - Bemærk at du på dette tidspunkt skal have en korrekt opsat
web.config fil i roden af dit website, samt have kopieret tabeller/stored procedures
m.m. til din database på serveren.
Typisk vil man kun anvende vores Membership/Roles API manager applikation til at
oprette den/de første brugere og roller. Dette gøres af ejeren af websitet - applikationen
er kun tænkt som en hjælp i de situationer, hvor man har brug for en enkelt bruger
eller to til at beskytte f.eks. sin administrationsdel af websitet og derefter ikke
har brug for at oprette flere brugere - Husk at fjerne applikationen efter brug,
således andre ikke kan kalde den og oprette sin egen bruger!
Hvis websitet indeholder et community eller andet, hvor det er en del af websitet
at brugeren skal oprette sig som bruger skal websitet selv indeholde en side hvor
en kommende bruger kan oprette/registrere sig (denne side kunne f.eks. anvende en
'CreateUserWizard' kontrol).
De 7 login kontroller
Membership indeholder 7 login kontroller som du kan anvende til de mest almindelige
opgaver såsom at oprette en bruger, validere en bruger (login), vise information
hvis en bruger er logget ind osv. - MSDN indeholder
detaljeret information omkring de 7 login kontroller.
De fleste vil nok vælge at oprette brugere via CreateUserWizard kontrollen (vist
nedenfor) som automatisk opretter en bruger OG aktiverer denne, hvilket vil sige
at brugeren umiddelbart efter oprettelse kan logge ind.
CreateUserWizard kontrollen har som default proptery'en "DisableCreatedUser" sat
til false, hvilket betyder at brugeren kan logge ind med det samme (idet han så
er "enabled"), hvilket typisk også er det man ønsker. Der kan dog være situationer,
hvor man ønsker selv at bestemme hvornår den nye bruger er aktiv (så han kan logge
ind). Hvis du ønsker dette skal du sætte proptery'en "DisableCreatedUser" til true
på 'CreateUserWizard' kontrollen.
Ønsker man selv senere at enable brugeren kan dette gøres ved noget kode i stil
med nedenstående, som enabler brugeren (IsApproved) og skifter brugerens hemmelige
spørgsmål og svar:
MembershipUser u = Membership.GetUser();
u.IsApproved = true;
u.ChangePasswordQuestionAndAnswer(CurrentPassword.Text, Question.Text, Answer.Text);
Membership.UpdateUser(u);
Se iøvrigt Scott Mitchells fremragende artikel serie om
ASP.NET 2.0's Membership, Roles and Profiles (download
PDF) og uddrag fra bogen
ASP.NET 2.0 Security (download
PDF) for yderligere information.
Yderligere information og artikler
Internettet er fyldt med artikler om ASP.NET og Membership. En søgning på
Google efter ASP.NET og Membership vil give
dig en række artikler. Dog har vi fundet nedenstående artikler specielt interessante: