Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Server eus për të punuar me llogaritë e përdoruesve. Kontrolli i hyrjes

Elementi Kontrollet e hyrjes

Kontrolli i hyrjes e bën të lehtë krijimin e një faqeje identifikimi për vërtetimin e formularit në lidhje me API-në e Anëtarësimit. Ofron gati për përdorim ndërfaqja e përdoruesit A që kërkon emrin dhe fjalëkalimin e përdoruesit dhe ofron një buton për të hyrë në përdorues. Në prapaskenë, ai përmbledh funksionalitetin që u përshkrua në artikullin e mëparshëm: vërtetimi i identiteteve të përdoruesve nëpërmjet API-së së Anëtarësimit dhe kapsulimi i funksioneve të vërtetimit të formave bazë, si ridrejtimi në faqen e kërkuar fillimisht në zonën e sigurt të aplikacionit pas një hyrje të suksesshme.

Kjo do të thotë që Login përmbledh gjëra të tilla si Membership.ValidateUser() ose FormsAuthentication.RedirectFromLoginPage() kështu që ju nuk keni nevojë ta shkruani vetë këtë kod. Figura më poshtë tregon kontrollin e hyrjes në veprim:

Sa herë që përdoruesi klikon butonin Identifikohu, kontrolli vërteton automatikisht emrin e përdoruesit dhe fjalëkalimin duke përdorur funksionin Membership.ValidateUser() dhe më pas thërret FormsAuthenication.RedirectFromLoginPage() nëse vërtetimi është i suksesshëm. Të gjitha opsionet e kontrollit të hyrjes ndikojnë në hyrjen që u jep këtyre metodave. Për shembull, nëse kontrolloni kutinë e zgjedhjes Më mbaj mend herën tjetër, ajo do të kalojë e vërtetë në parametrin createPersistentCookie të metodës RedirectFromLoginPage(). Prandaj, FormsAuthenticationModule krijon një cookie të qëndrueshme.

Prapa Skenave Hyrja është një kontroll i përbërë ASP.NET. Ai është plotësisht i zgjerueshëm, në kuptimin që ju lejon të anashkaloni çdo stil dhe veçori të paraqitjes, si dhe të kapni ngjarjet e krijuara për të anashkaluar sjelljen e tij të paracaktuar. Nëse e lini kontrollin ashtu siç është dhe nuk kapni asnjë ngjarje, ai do të përdorë automatikisht ofruesin e anëtarësimit të konfiguruar për aplikacionin.

Forma më e thjeshtë e një kontrolli Login në një faqe duket si kjo:

Janë dhënë disa veçori për të ndryshuar pamjen e kontrollit Login. Mund të aplikoni cilësime të ndryshme stili, siç tregohet më poshtë:

Ju gjithashtu mund të përdorni klasa CSS për të personalizuar pamjen e hyrjes. Çdo veti stili e mbështetur nga kontrolli Login përfshin një veçori CssClass. Ashtu si me çdo kontroll tjetër ASP.NET, kjo veti ju lejon të specifikoni emrin e një klase CSS që ishte shtuar më parë në faqen e internetit. Le të supozojmë se skeda e mëposhtme e stilit CSS i shtohet projektit me emrin e skedarit MyStyles.css:

MyLoginTextBoxStyle ( kursori: treguesi; ngjyra e sfondit: e verdhë; rreshtimi i tekstit: në qendër; mbushja: 6 px; kufiri: e zezë me pika; font-familja: Verdana; rreshtimi vertikal: në mes; ) . Identifikohu ( shfaqja: inline-block; ) .Titulli (mbushje: 6px; )

Ky skedar stili mund të përfshihet në faqen e identifikimit për të qenë në gjendje të stiloni elementin Login:

Tabela e mëposhtme liston stilet e mbështetura nga kontrolli Login. Çdo stil funksionon në të njëjtën mënyrë. Karakteristikat e shkronjave dhe ngjyrave mund të vendosen drejtpërdrejt, ose mund të përdorni veçorinë CssClass për të specifikuar klasën e dëshiruar CSS:

Stilet e mbështetura nga kontrolli i hyrjes
Stili Përshkrim
Stili i kutisë së kontrollit

Përcakton vetitë e stilit për kutinë e zgjedhjes Më mbaj mend herën tjetër

FailureStyle

Përcakton stilin për tekstin që shfaqet kur identifikimi dështon.

HyperLinkStyle

Kontrolli Login ju lejon të përcaktoni disa lloje hiperlidhjesh, si p.sh. në faqen fillestare të regjistrimit. Ky stil përcakton pamjen e lidhjeve të tilla.

InstructionTextStyle

Kontrolli i hyrjes ju lejon të specifikoni tekstin e ndihmës që shfaqet drejtpërdrejt në vetvete. Ky stil përcakton pamjen e këtij teksti.

LabelStyle

Përcakton stilin për etiketat Emri i përdoruesit (Emri i përdoruesit) dhe Fjalëkalimi (Fjalëkalimi)

LoginButtonStyle

Përcakton stilin e butonit të hyrjes

TextBoxStyle

Përcakton stilin për fushat e tekstit Emri i përdoruesit dhe Fjalëkalimi

TitleTextStyle

Përcakton stilin e tekstit të kokës për kontrollin Login

ValidatorTextStyle

Përcakton stilet për kontrollet e përdorura për të vërtetuar emrin e përdoruesit dhe fjalëkalimin

Ndërfaqja e përdoruesit të elementit Login nuk është e personalizueshme vetëm përmes këtyre stileve; Vetitë e tjera shtesë janë për pjesë të veçanta të përmbajtjes së kontrollit, të tilla si butoni "Identifikohu", i cili gjithashtu ju lejon të personalizoni GUI-në.

Për shembull, mund të zgjidhni tekstin e shfaqur në butonin e hyrjes, ose madje të shfaqni një hiperlidhje në vend të këtij butoni (siç është vendosur si parazgjedhje). Për më tepër, ju mund të shtoni hiperlidhje të shumta në kontrollin Login, të tilla si një lidhje për një faqe ndihme ose një faqe regjistrimi. Të dyja faqet duhet të jenë të hapura për akses anonim, sepse ndihma duhet t'u ofrohet edhe përdoruesve anonimë (mos harroni se nëse dikush sheh kontrollin Login, ai është potencialisht një përdorues anonim). Për të përfshirë lidhje shtesë në Login, modifikoni përkufizimin e treguar më parë si më poshtë:

...

Ky kod bën që të shfaqen dy lidhje shtesë, një në faqen e ndihmës dhe një në faqen fillestare të regjistrimit, dhe shton një tekst të shkurtër udhëzimi nën titullin e elementit Login:

Stilet e përshkruara më parë zbatohen edhe për këto veti. Tabela e mëposhtme përshkruan vetitë e rëndësishme për personalizimin e kontrollit Login:

Karakteristikat e rëndësishme për personalizimin e kontrollit të hyrjes
Pronës Përshkrim
Teksti i mesazhit
Teksti i titullit

Teksti i shfaqur në titullin e kontrollit

teksti i udhëzimit

Kjo veçori është përdorur tashmë në fragmentin e mëparshëm të kodit. Përmban tekstin e shfaqur poshtë titullit të kontrollit

Teksti i dështimit

Teksti i shfaqur nga kontrolli Login nëse përpjekja për hyrje dështon

Emri i përdoruesitLabelText

Teksti shfaqet si etiketë përpara fushës së tekstit të emrit të përdoruesit

PasswordLabelText

Teksti shfaqet si etiketë përpara fushës së tekstit të fjalëkalimit të përdoruesit

emri i përdoruesit

Vlera fillestare që plotëson fushën e tekstit të emrit të përdoruesit

Mesazhi i Emrit të Përdoruesit RequiredGabim

Mesazhi i gabimit shfaqet nëse përdoruesi nuk ka futur një emër

Mesazhi i PasswordRequiredError

Mesazhi i gabimit shfaqet nëse përdoruesi nuk ka futur një fjalëkalim

Butoni i hyrjes
LoginButtonText

Teksti shfaqet në butonin e hyrjes

LoginButtonType
LoginButtonImageUrl

Nëse butoni i hyrjes paraqitet si një imazh grafik, duhet të specifikoni URL-në ku ndodhet ky imazh

Faqja e hyrjes
DestinationPageUrl

Nëse përpjekja për hyrje ishte e suksesshme, kontrolli i hyrjes e ridrejton përdoruesin në këtë faqe. Si parazgjedhje, kjo pronë është bosh. Nëse është bosh, përdor kornizën e vërtetimit të formularëve për të ridrejtuar ose në faqen e kërkuar origjinale ose në URL-në e paracaktuar të konfiguruar në web.config për vërtetimin e formularëve

Veprimi i dështimit

Përcakton veprimin që kryen kontrolli pas një përpjekjeje të dështuar për hyrje. Dy opsionet e vlefshme janë Refresh dhe RedirectToLoginPage. Vlera e parë bën që vetëm faqja aktuale të rifreskohet, ndërsa vlera e dytë ridrejtohet në faqen e konfiguruar të hyrjes. Opsioni i dytë është i dobishëm nëse kontrolli Login po përdoret diku tjetër nga faqja e hyrjes

VisibleWhenLoggedIn

Nëse vendoset në false, kontrolli fshihet automatikisht nëse përdoruesi është i identifikuar tashmë. Nëse vendoset në true (default), elementi Login shfaqet edhe nëse përdoruesi është i identifikuar.

Përshtatja e etiketës "Më mbaj mend".
DisplayRememberMe

Ju lejon të shfaqni ose fshehni kutinë e zgjedhjes Më mbaj mend herën tjetër. Kjo veçori është caktuar si e vërtetë si parazgjedhje.

RememberMeSet

Përcakton vlerën e paracaktuar të kutisë së zgjedhjes Më mbaj mend herën tjetër. Si parazgjedhje, kjo veti është caktuar në false, d.m.th. kutia e kontrollit nuk është e zgjedhur

Faqja e regjistrimit
CreateUserUrl

Përcakton një hiperlidhje në një faqe interneti që ju lejon të krijoni (regjistroni) një përdorues. Kështu, kjo zakonisht përdoret për të lejuar hyrjen e përdoruesit në faqen fillestare të regjistrimit. Kjo zakonisht shfaq kontrollin CreateUserWizard.

CreateUserText
CreateUserIconUrl

URL-ja e grafikut për t'u shfaqur me tekstin e hiperlidhjes CreateUserUrl

Faqja e Ndihmës
HelpPageUrl

URL për të ridrejtuar përdoruesin në faqen e ndihmës

HelpPageText
HelpPageIconUrl

URL-ja e ikonës së shfaqur së bashku me tekstin e hiperlidhjes HelpPageUrl

Faqja e rikuperimit të fjalëkalimit
PasswordRecoveryUrl

URL-ja për të ridrejtuar përdoruesin në faqen e rikuperimit të fjalëkalimit. Kjo faqe përdoret kur përdoruesi ka harruar fjalëkalimin. Zakonisht shfaq një kontroll të rikuperimit të fjalëkalimit

PasswordRecoveryText
PasswordRecoveryIconUrl

URL-ja e ikonës së shfaqur së bashku me tekstin e hiperlidhjes PasswordRecoveryUrl

Modelet dhe kontrolli i hyrjes

Siç mund ta shihni, falë të gjitha këtyre veçorive, kontrolli Login është shumë i personalizueshëm. Por siç e keni vënë re ndoshta, është e pamundur të përcaktohet një shprehje për të vërtetuar hyrjen. Sigurisht, ju mund të zbatoni vërtetimin nga ana e serverit brenda procedurave të ngjarjeve të ofruara nga kontrolli Login. Kur dëshironi të shtoni disa elementë në kontrollin e përbërë Login, nuk mund ta bëni këtë përmes vetive të mësipërme. Për shembull, çka nëse ju nevojitet një fushë e dytë teksti për vërtetim të fortë me një fjalëkalim të dytë ose çelës aksesi të personalizuar, siç bëhet në disa sajte qeveritare?

Për fat të mirë, si kontrollet e tjera si GridView, kontrolli i hyrjes mbështet shabllonet. Duke përdorur shabllone, ju mund të personalizoni përmbajtjen e kontrollit të hyrjes pa asnjë kufizim. Mund të shtoni çdo kontroll të ri në të. Zbaton një shabllon të personalizuar në kontrollin Login duke përdorur një dorezë LayoutTemplate:

Hyni

Emri i përdoruesit:
Fjalëkalimi:


Duke parë kodin e mësipërm, lind një pyetje: nëse duhet të shkruani kaq shumë kod UI kur konfiguroni një shabllon (ose ta dizajnoni atë në një projektues vizual), pse të mos shkruani faqen tuaj të hyrjes pa përdorur kontrollin e hyrjes?

Kjo është pyetja e duhur. Megjithatë, siç u shpjegua më herët, pjesa e ndërfaqes është vetëm një pjesë e elementit Login. Për shembull, në rast se përdoruesi klikon butonin e hyrjes, kontrolli i hyrjes ka tashmë të gjithë kodin e nevojshëm për të vërtetuar automatikisht përdoruesin kundrejt dyqanit të anëtarësimit dhe për ta ridrejtuar përdoruesin në faqen origjinale që ai ka kërkuar nëpërmjet kornizës së vërtetimit të formularëve. Pra, ju jeni të kursyer patjetër nga sherri për të shkruar këtë kod.

Me kontrollet e duhura dhe vlerat e duhura të ID-së për ato kontrolle, nuk do t'ju duhet të shkruani asnjë kod për trajtimin e ngjarjeve. Kodi funksionon në mënyrën e zakonshme, përveç se ju përcaktoni një grup kontrollesh dhe paraqitjen e tyre. Në fakt, kontrolli Login kërkon të paktën dy fusha teksti me ID Emri i Përdoruesit dhe Fjalëkalimi. Nëse këto dy fusha teksti mungojnë (ose kanë vlera të ndryshme ID), atëherë Hyrja do të bëjë një përjashtim. Të gjitha kontrollet e tjera janë opsionale, por nëse specifikoni një vlerë të përshtatshme ID (si p.sh. "Identifikohu për një buton identifikimi), atëherë "Identifikohu" do të trajtojë automatikisht ngjarjet e tyre dhe do të sillet si do të sillet kur të aplikohet faqosja e paracaktuar.

Tabela më poshtë liston vlerat e veçanta të identifikuesit, llojet e elementeve të kërkuara për to dhe flamurin e detyrueshëm:

Kontrolli me ID Login mund të jetë çdo kontroll që mbështet flluskimin e ngjarjeve dhe një veti CommandName. Është e rëndësishme të vendosni veçorinë CommandName të këtij elementi në Login, sepse përndryshe, kontrolli Login nuk do ta njohë atë gjatë trajtimit të ngjarjeve. Nëse nuk shtoni një kontroll me një veçori CommandName të vendosur në Login, do t'ju duhet t'i trajtoni vetë ngjarjet dhe të shkruani kodin e duhur për të vërtetuar emrin e përdoruesit dhe fjalëkalimin dhe të ridrejtoni në faqen e kërkuar origjinale.

Ju gjithashtu mund të shtoni kontrolle me ID të tjera që nuk kanë të bëjnë fare me Login. Kodi i mësipërm përdori elementet RequiredFieldValidator dhe RegularExpressionValidator për të vërtetuar fushat e emrit të përdoruesit dhe fjalëkalimit.

Kur përdorni LayoutTemplate, shumë nga vetitë që janë origjinale të kontrollit bëhen të padisponueshme. Kur aplikohet një shabllon, mbeten të disponueshme vetëm vetitë e mëposhtme:

    DestinationPageUrl

    VisibleWhenLoggedIn

  • Ofruesi i Anëtarësisë

Të gjitha vetitë e stilit dhe disa veti të paracaktuara të personalizimit të përmbajtjes së tekstit të elementeve nuk janë më të disponueshme në Redaktuesin e Vetive të Visual Studio, pasi ato mund të shtohen manualisht si kontrolle individuale ose tekst statik në shabllonin e elementit Login. Nëse i shtoni te elementi Identifikimi në modalitetin e shabllonit, ato thjesht do të shpërfillen sepse shablloni anashkalon ndërfaqen e paracaktuar të elementit Login që përdor këto veti.

Programimi i kontrollit të hyrjes

Kontrolli i hyrjes mbështet disa ngjarje dhe veçori që mund t'i përdorni për të personalizuar sjelljen e tij. Ato ofrojnë kontroll të plotë mbi rregullimin e saktë të kontrollit të Identifikimit (së bashku me mjetet e tjera të personalizimit si shabllonet dhe vetitë e stilit). Kontrolli Login mbështet ngjarjet e renditura në tabelën e mëposhtme:

Ngjarjet e kontrollit të hyrjes
Ngjarja Përshkrim
Hyrja

U shkrep pak përpara se përdoruesi të vërtetohet nga kontrolli

I identifikuar

Futet pasi përdoruesi është vërtetuar nga kontrolli

Gabim identifikimi

Aktivizohet kur përpjekja për hyrjen e një përdoruesi dështon për ndonjë arsye (për shembull, një fjalëkalim ose emër përdoruesi i pasaktë)

Autentifiko

Nisur për të vërtetuar një përdorues. Nëse e trajtoni këtë ngjarje, duhet ta vërtetoni vetë përdoruesin dhe kontrolli i hyrjes do të mbështetet tërësisht në kodin tuaj të vërtetimit

Tre ngjarjet e para mund të trajtohen për të kryer disa veprime përpara vërtetimit të përdoruesit, pas vërtetimit dhe nëse ndodh një gabim gjatë vërtetimit. Për shembull, ngjarja LoginError mund të përdoret për të ridrejtuar automatikisht përdoruesin në faqen e rikuperimit të fjalëkalimit pas një numri të caktuar përpjekjesh për hyrje, siç tregohet më poshtë:

Mbrojtur void Page_Load(objekt dërgues, EventArgs e) ( if (!this.IsPostBack) ViewState["LoginErrors"] = 0; ) void i mbrojtur Login1_LoginError(objekt dërgues, EventArgs e) ( // Nëse gjendja LoginErrors nuk ekziston, krijoni nëse (ViewState["Gabimet e hyrjes"] == null) ViewState["Gabimet e hyrjes"] = 0; // Rritni numëruesin e dështuar të hyrjes int ErrorCount = (int)ViewState["Gabimet e hyrjes"] + 1; ViewState["Gabimet e hyrjes"] = ErrorCount ; // Kontrollo numrin e përpjekjeve të dështuara nëse ((ErrorCount > 3) && (Login1.PasswordRecoveryUrl != string.Empty)) Response.Redirect(Login1.PasswordRecoveryUrl); )

Kontrolli Login ndez ngjarjet në rendin e treguar në figurën më poshtë:

Siç u përmend më herët, nëse po kapni ngjarjen Authenticate, duhet të shtoni kodin tuaj të verifikimit të emrit të përdoruesit/fjalëkalimit. Pronës Autentifiko mban një shembull të listës së parametrave AuthenticateEventArgs. Kjo klasë argumenti ngjarjesh mbështet një pronë të quajtur Authenticated. Nëse vendoset në true, kontrolli Login supozon se vërtetimi ishte i suksesshëm dhe aktivizon ngjarjen LoggedIn. Nëse e vendosni këtë veti në false, do të shfaqet një FailureText dhe do të ngrihet ngjarja LoginError:

I pavlefshëm i mbrojtur Login1_Authenticate(dërguesi i objektit, AuthenticateEventArgs e) (nëse (Membership.ValidateUser(Login1.UserName, Login1.Fjalëkalimi)) ( e.Authenticated = e vërtetë; ) tjetër ( e.Authenticated = false; ) )

Siç mund ta shihni, ka qasje të drejtpërdrejtë në vlerat e futura përmes vetive Emri i Përdoruesit dhe Fjalëkalimi, të cilat përmbajnë tekstin e futur në fushat përkatëse të tekstit. Nëse jeni duke përdorur komandat e shabllonit dhe dëshironi të merrni vlerën nga një element tjetër, përveç elementeve me ID Emri i Përdoruesit dhe Fjalëkalimi, atëherë mund të përdorni metodën FindControl() për të marrë atë element shtesë. Kjo metodë merr ID-në e elementit të dëshiruar dhe kthen një shembull të System.Web.UI.Control. Objekti që rezulton thjesht hidhet në llojin e kontrollit të dëshiruar dhe lexohet vlera e nevojshme nga metoda e personalizuar e verifikimit të identitetit të përdoruesit.

Si pjesë e teknologjisë ASP.Net Web Forms, ekziston një grup ES për krijimin dhe përdorimin e llogarive të përdoruesve:

  • Hyrja - një ES për lidhjen e një përdoruesi (duke futur një emër dhe fjalëkalim) dhe për të kontrolluar përputhjen e tij me të dhënat e përfshira në bazën e të dhënave. Nëse të dhënat përputhen (d.m.th., përdoruesi është vërtetuar, atëherë kryhet kalimi në faqen e kërkuar).
  • LoginView - ju lejon të shfaqni informacione të ndryshme për përdoruesit e lidhur. Për shembull, mund ta përdorni këtë faqe për të shfaqur informacione që janë të disponueshme vetëm për përdoruesit e vërtetuar.
  • LoginStatus - Një UI që tregon një lidhje në faqen e identifikimit për përdoruesit që nuk janë vërtetuar (Logout) dhe një lidhje në faqen e daljes për përdoruesit e identifikuar (Login).
  • LoginName - UI që tregon emrin aktual të përdoruesit nëse është i lidhur me sistemin.
  • Password Recovery është një ES për kryerjen e rikuperimit të fjalëkalimit të përdoruesit duke dërguar një mesazh e-mail ose kur përdoruesi i përgjigjet një pyetjeje sekrete.
  • CreateUserWizard është një ES që mbledh informacione për një përdorues të ri dhe krijon një llogari të re në bazën e të dhënave.
  • ChangePassword - një EC që lejon përdoruesin e lidhur të ndryshojë fjalëkalimin.

Kontrolli Login ofron një ndërfaqe të gatshme për përdorim që kërkon një emër përdoruesi dhe fjalëkalim. Ai përfshin një buton me atributin CommandName-"Login" për të lidhur përdoruesin. Kur përdoruesi klikon në këtë buton, ES kontrollon automatikisht nëse emri i përdoruesit dhe fjalëkalimi i futur përputhen me të dhënat e përfshira në bazën e të dhënave dhe më pas shkakton një kalim në forma e kërkuar në ueb e aplikacionit. Ky ES është plotësisht i zgjerueshëm dhe ju lejon të anashkaloni shënimin, stilin dhe vetitë e tij, si dhe t'i trajtoni vetë ngjarjet për të ndryshuar sjelljen e paracaktuar. Një shembull i personalizimit të përshkrimit të hyrjes EM tregohet më poshtë:

<%@ Page Language="C#" AutoEventWireup="true”

CodeFile="LogPage.aspx.cs" Inherits="LogPage" %>

BorderColor="Black" BorderStyle="double">

Lidhja me sistemin

ControlToValidate="Fjalëkalimi" ErrorMessage=”*” />

Shfaqja e Login ES e konfiguruar më sipër është paraqitur në fig. 4.22.

Oriz. 4.22. Duke shfaqur hyrjen e konfiguruar të ES

ES LoginView është mjaft i thjeshtë dhe i fuqishëm. Kjo ju lejon të shfaqni grupe të ndryshme EG për përdoruesit anonimë dhe të vërtetuar. Përveç kësaj, ju lejon gjithashtu të tregoni hapësirën e përmbajtjes, duke marrë parasysh rolin të cilit i përket përdoruesi i lidhur. Entiteti LoginView është një entitet shabllon me lloje të ndryshme shabllonesh: një për përdoruesit anonimë, një tjetër për përdoruesit e vërtetuar dhe një i tretë për të mbështetur shabllone të vetëdijshëm për role.

Në këto shabllone, thjesht duhet të shtoni një ED për të shfaqur situatën përkatëse, siç tregohet më poshtë. Ky ES tregon tekst të thjeshtë për përdoruesit anonimë dhe disa tekst për përdoruesit e regjistruar:

Bbi është një përdorues anonim

Bbi i lidhur me web-npHno>KeHHK>

<1т2>Vetëm administratorët mund ta shohin këtë përmbajtje

Kjo përmbajtje është për dizajnerët dhe lexuesit e uebit.

Shembuj të përdorimit të ES për të siguruar një aplikacion ueb mund të gjenden në dosjen Account të shabllonit standard të Uebfaqes ASP.Net.

Sergej Baklanov

Importet System.Data.SqlClient Imports System.Web.Identifikimi i klasës publike të sigurisë trashëgon System.Web.UI.Faqja e mbrojtur me ngjarje txtEmri si System.Web.UI.WebControls.TextBox i mbrojtur meEvents txtPassword As System.WebControlTUI. WithEvents lbl As System.Web.UI.WebControls.Label Protected WithEvents btnIdentifikohu si System.Web.UI.WebControls.Button #Region " Kodi i krijuar nga Dizajnuesi i Formave të Uebit " "Kjo thirrje kërkohet nga Dizajnuesi i Formave të Uebit. Private Sub InitializeComponent() Fund Sub "SHËNIM: Deklarata e mëposhtme e mbajtësit të vendndodhjes kërkohet nga Projektuesi i Formave të Uebit. "Mos e fshini ose zhvendosni atë. Dizajner privatPlaceholderDeklarata si System.Object Nën-Private Page_Init(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Init "CODEGEN: Kjo thirrje metodë kërkohet nga Projektuesi i Formave të Uebit "Mos e modifikoni duke përdorur redaktuesin e kodit . InitializeComponent() Fund Sub #End Region Private Sub Page_Load(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Load "Vendos kodin e përdoruesit për të inicializuar faqen këtu Fundi Sub Private Sub btnLogin_Click(Dërguesi ByVal si objekt, ByVal e As System.EventArgs) Trajton btnLogin. Kliko Dim cn Si SqlConnection i ri("server=localhost;database=FormAuthUsers;uid=sa;pwd=;") Dim cm si i ri SqlCommand("FindUser", cn) Dim dr Bileta e zbehtë e SqlDataReader As FormsAuthenticationTicket Dim n Si numër i plotë, strRoles si varg, strEnkriptuar si varg " Hap lidhjen Provoni cn.Open() Catch ex As SqlException Response.Write(ex.Message) Dil Sub End Try "Command Set typeT cmpe. CommandType.StoredProcedure " Shto parametrat e emrit Dim prmName = New SqlParameter("@Name", SqlDbType.NVarChar, 50) prmName.Value = txtName.Tekst cm.Parameters.Add(prmPametersNameName te reja prm. @Password", SqlDbType.NVarChar, 50) prmPass.Va lue = txtPassword.Text cm.Parameters.Add(prmPass) " Ekzekutoni pyetjen n = cm.ExecuteScalar Nëse n > 0 Pastaj " Nëse ekziston një përdorues me të njëjtin emër dhe fjalëkalim, atëherë kërkoni rolet e tij cm = Asgjë cm = E re SqlCommand("exec FindRoles "" & txtName.Text & """, cn) dr = cm.ExecuteReader() " Listoni rolet Ndërsa dr.Read If strRoles = "" Pastaj strRoles &= dr(0) Tjetër strRoles &= ", " & dr(0) End If End while " Krijo një biletë vërtetimi = Forms të rejaAuthenticationTicket(1, txtName.Text, DateTime.Now, _ DateTime.Now.AddMinutes(20), False, strRoles) " Enkripto biletën strEncrypted = FormsAuthentication.Encrypt(biletë) " Ruani cookie Response.Cookies.Add(New HttpCookie("UrlAuthz", strEncrypted)) " Kthehuni në faqen origjinale FormsAuthentication.RedirectFromLoginPage(txt"FalëName") user wasT. nuk u gjet, pastaj lëshoni një mesazh për gabimin lbl.Visible = True Fund If End Sub End Class

Në këtë shembull, ne kemi vendosur dy operacione verifikimi në një procedurë: një për vërtetim, tjetri për autorizim. Së pari, ne kalojmë përmes vërtetimit duke kërkuar të dhëna për një përdorues me një emër dhe fjalëkalim të tillë nga baza e të dhënave. Nëse përdoruesi nuk u gjet, ne shfaqim mesazhin e duhur të gabimit (shih rreshtin 4 më poshtë). Nëse përdoruesi gjendet, atëherë ne përcaktojmë rolet e tij duke kërkuar përsëri informacion nga baza e të dhënave. Bazuar në informacionin e marrë për rolet, krijohet një biletë vërtetimi, e cila më pas kodohet dhe ruhet në një skedar cookie. Më në fund, përdoruesi kthehet në mënyrë të sigurt në faqen default.aspx.

Meqenëse skedari ynë i konfigurimit kishte kufizime aksesi për disa skedarë, le të analizojmë përmbajtjen e tyre (Lista 7).

Listimi 7. default.aspx

<%@ Page Language="vb" AutoEventWireup="false" Inherits="AuthzByUrl.WebForm1"%> AuthzByUrl
Ju nuk jeni regjistruar, ju lutemi identifikohuni
ShkoTo:
  • zona admin
  • zona e përdoruesit

admin.aspx

<%@ Page Language="vb" AutoEventWireup="false" Inherits="AuthzByUrl.admin"%> admin
<% Response.Write("
") Response.Write("Ti"je admin
Kthehu prapa") %>

përdorues.aspx

<%@ Page Language="vb" AutoEventWireup="false" Inherits="AuthzByUrl.user"%> përdorues
<% Response.Write("Përshëndetje " & HttpContext.Current.User.Identity.Name & "!
") Response.Write("Ju" jeni përdorues
Kthehu prapa") %>

Pas krijimit të kësaj faqeje interneti të thjeshtë, do të mund të shihni frytet e punës suaj me sytë tuaj. Kodi i mësipërm përmban të gjitha udhëzimet e nevojshme për të krijuar një sistem të vlefshëm sigurie për sajtin bazuar në vërtetimin e formularit dhe autorizimin e URL-së.

Autoriteti Huamarrës

Autoriteti i huamarrjes është një mënyrë operimi në të cilën një aplikacion ASP.NET funksionon në emër të një përdoruesi specifik. Do të duket, cili është qëllimi i futjes së huazimit të fuqive, nëse gjatë vërtetimit të Windows përdoruesi tashmë regjistrohet nën një llogari specifike? Por puna është se ID-ja e përdoruesit për vërtetim dhe ID e përdoruesit për huazim janë gjëra të ndryshme, dhe ato përdoren përkatësisht për të marrë informacione të ndryshme.

Si parazgjedhje, modaliteti i imitimit në mjedisin ASP.NET është i çaktivizuar. Për ta aktivizuar, duhet të shtoni etiketën në skedarin Web.config dhe vendosi atributin e tij imitues në true. Fragmenti i mëposhtëm i skedarit të konfigurimit të projektit tregon se si duhet të duket:

Web.config

Për të demonstruar se si funksionon kjo mënyrë, përdorni kodin e mëposhtëm (Lista 8) në faqen default.aspx:

default.aspx

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="default.aspx.vb" Inherits="Impersonation.WebForm1"%> Imitimi
përdorues:
Është vërtetuar
Lloji i vërtetimit
Emri
WindowsIdentity:
Është vërtetuar
Lloji i vërtetimit
Emri

default.aspx.vb

Importet System.Security.Principal Public class WebForm1 Trashëgon System.Web.UI.Page #Region " Kodi i krijuar nga Dizajnuesi i Formave të Uebit " "Kjo thirrje kërkohet nga Projektuesi i Formave të Uebit. Private Sub InitializeComponent() Fund Sub "SHËNIM: Deklarata e mëposhtme e mbajtësit të vendndodhjes kërkohet nga Projektuesi i Formave të Uebit. "Mos e fshini ose zhvendosni atë. Dizajner privatPlaceholderDeklarata si System.Object Nën-Private Page_Init(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Init "CODEGEN: Kjo thirrje metodë kërkohet nga Projektuesi i Formave të Uebit "Mos e modifikoni duke përdorur redaktuesin e kodit . InitializeComponent() Fund Sub #End Region Protected WithEvents. Si System.Web.UI.HtmlControls.HtmlTableCell Protected WithEvents clmAuthTypeW As System.Web.UI.HtmlControls.HtmlTableCell Protected WithEvents clmNameW System.EventArgs) Trajton MyBase.Load Dim DenityWith "WindowsIclinity.Icl. Innertext = .isauthenticated.tostring clmauthtypeu.innertext = .authenticationtype.innertext = Autentifikimi nType.ToString clmNameW.InnerText = .Name Fund Me End Klasa e Nënfundit

Trajtuesi i ngjarjeve të ngarkimit të formularit përdor metodën GetCurrent për të marrë ID-në e përdoruesit të objektit WindowsIdentity, i cili kthen ID-në e llogarisë nën të cilën po ekzekutohet procesi ASP.NET.

Kur ekzekutoni këtë aplikacion me huamarrjen e lejes të çaktivizuar ( ) do të shihni ekranin e paraqitur në Figurën 3. Siç mund ta shihni, me imitimin e çaktivizuar, objekti WindowsIdentity përmban ID-në e përdoruesit të sistemit ASPNET.

Tani, nëse aktivizoni lejet e huazimit, do të shihni rezultatin e treguar në Tabelën 1.

Tabela 1. Përvetësimi i aktivizuar dhe aksesi anonim i çaktivizuar

Është vërtetuar E vërtetë
Lloji i vërtetimit Negocioni
Emri BIGDRAGON\ [email i mbrojtur]$

WindowsIdentity:

Është vërtetuar E vërtetë
Lloji i vërtetimit NTLM
Emri BIGDRAGON\ [email i mbrojtur]$

Siç mund ta shihni, rezultatet janë të njëjta sepse të dy objektet marrin informacion për përdoruesin aktual. Por dy shembujt e mëparshëm u përqendruan në kushte me akses anonim të ndaluar për vërtetimin e Windows. Nëse lejoni akses anonim në aplikacion, atëherë objekti User.Identity nuk do të kthejë asnjë emër përdoruesi dhe vetia e tij IsAuthenticated do të vendoset në False. Kjo nuk është për t'u habitur, sepse nëse lejohet qasja anonime në sistemin e vërtetimit të Windows, atëherë përdoruesi punon në mënyrë anonime, domethënë ai nuk e kalon vërtetimin.

Në të njëjtën kohë, objekti WindowsIdentity do të ketë pronësinë e tij IsAuthenticated të vendosur në True dhe emri i përdoruesit do të ketë formatin e mëposhtëm: IUSR_<ИмяМашины>siç tregohet në tabelën 2.

Tabela 2. Lejohen privilegjet e huamarrjes dhe aksesi anonim

Është vërtetuar I rremë
Lloji i vërtetimit
Emri

WindowsIdentity:

Është vërtetuar E vërtetë
Lloji i vërtetimit NTLM
Emri BIGDRAGON\IUSR_BIGDRAGON

Vetia e emrit të objektit WindowsIdentity ka këtë vlerë sepse kthen identitetin e përdoruesit nën të cilin po ekzekutohet procesi ASP.NET, jo përdoruesin e faqes në internet. Dhe meqenëse një proces nuk mund të ekzekutohet në mënyrë anonime, ai e merr emrin nga IIS nëse nuk mund të merret nga përdoruesi aktual.

Nëse keni qenë të kujdesshëm gjatë kryerjes së operacioneve për të lejuar/ndaluar aksesin anonim, mund të keni vënë re se një varg i formatit të mësipërm është zëvendësuar në fushën Emri i përdoruesit: IUSR_<ИмяМашины>(Fig. 4).

Figura 4. Fusha Emri i përdoruesit përmban një varg që specifikon emrin e procesit ASP.NET për akses anonim

Përveç kësaj, ASP.NET ofron mundësinë për të specifikuar se nga kush saktësisht të huazohet autoriteti. Për këtë qëllim, në etiketën jepet atributi username, i cili tregon emrin e përdoruesit nga i cili është e nevojshme të huazohet autoriteti.

Fragmenti i mëposhtëm nga skedari Web.config tregon se si duhet të duket në praktikë:

Web.config:

Pas ekzekutimit të aplikacionit të provës me një konfigurim të tillë për ekzekutim, gjendja e objektit User.Identity do të mbetet e pandryshuar, por në vetinë e emrit të objektit WindowsIdentity, në vend të vargut të formatit IUSR_<ИмяМашины>do të shfaqet emri i specifikuar në atributin username të etiketës nga skedari i konfigurimit të projektit siç tregohet në tabelën 3.

Tabela 3. Procesi ASP.NET që funksionon si një përdorues specifik

Është vërtetuar I rremë
Lloji i vërtetimit
Emri

WindowsIdentity:

Është vërtetuar E vërtetë
Lloji i vërtetimit NTLM
Emri BIGDRAGON\AlBa

Nëse revokoni aksesin anonim, objekti User.Identity do të përmbajë identitetin e përdoruesit të regjistruar, ndërsa objekti WindowsIdentity do të përmbajë ende emrin e përdoruesit të kaluar përmes atributit username.

Kështu përfundon studimi i autorizimit si mjet sigurie në mjedisin ASP.NET. Studimi i mëtejshëm i mekanizmit të autorizimit kërkon një ekzaminim të mjeteve të autorizimit të Windows. Midis tyre janë listat e kontrollit të aksesit të nivelit të ulët dhe të nivelit të lartë, kontrolli i aksesit të arkitekturës së klientit/serverit, siguria e bazuar në role të Windows, etj.

Nëse kjo temë ju intereson vërtet, atëherë mund të gjeni shumë materiale në bibliotekën MSDN:

  • Temat e sigurisë brenda ASP.NET janë të disponueshme në degën e mëposhtme të Bibliotekës MSDN: .NET Development/.NET Security;
  • Për çështjet e sigurisë për të gjithë sistemin, ju lutemi referojuni seksionit Siguria/Siguria (Përgjithshme)/Dokumentacioni SDK.

Nëse nuk e keni bibliotekën MSDN, mund të përdorni botimin më të fundit të saj në internet në: http://msdn.microsoft.com/library/ .

Në pjesën e tretë dhe të fundit të këtij artikulli, ne do të shqyrtojmë një temë shumë të rëndësishme dhe interesante - kriptografinë. Përveç teorisë dhe algoritmeve të kriptografisë, ne do të shikojmë mjetet e enkriptimit të ofruara nga .NET Framework nga këndvështrime të ndryshme dhe do të krijojmë një metodë të thjeshtë enkriptimi.

Le të kalojmë tani në përshkrimin e procesit të vërtetimit direkt brenda kornizës ASP.NET, ku ofrohen 3 lloje të vërtetimit për zgjedhjen tuaj:

* Autentifikimi i Windows
* formë
* Pasaportë

Autentifikimi i Windows:

Siç sugjeron emri, kjo metodë mbështetet në përdorimin e llogarive të Windows. Kjo metodë është e përshtatshme nëse po krijoni një aplikacion për një rrjet lokal dhe të gjitha llogaritë dhe grupet e vlefshme ruhen në një domen të paracaktuar. Kur e bëni këtë, duhet të jeni shumë të kujdesshëm kur caktoni të drejtat e aksesit për përdoruesit, pasi po vendosni edhe të drejta për të punuar në Windows. Për të konfiguruar ASP.NET që të funksionojë në modalitetin e vërtetimit të Windows, duhet të ndryshoni skedarin e konfigurimit të projektit Web Web.config ose, nëse është e nevojshme, skedarin e konfigurimit të të gjithë serverit të vendosur në WINDOWS_FOLDERMicrosoft.NET

Versioni Framework.NETCONFIGMachine.config. Në shembullin tonë, ne do të punojmë ekskluzivisht me skedarin e projektit - Web.config, në të cilin duhet të gjeni seksionin e vërtetimit dhe të vendosni atributin e tij të modalitetit në Windows:

Tani mund të vazhdoni drejtpërdrejt me programimin dhe zbatimin e vërtetimit të bazuar në Windows. Për t'ju ndihmuar, klasa WindowsIdentity, e cila shërben posaçërisht për të punuar me vërtetimin e Windows. Në përgjithësi, për vërtetimin e bazuar në Windows, ekzistojnë dy klasa kryesore të ofruara nga .NET Framework:

* GenericIdentity - zbaton vetëm ndërfaqen IIdentity dhe nuk i referohet ndonjë lloji të veçantë të vërtetimit
* WindowsIdentity - gjithashtu një zbatim i ndërfaqes IIdentity, por plus përfshin metoda që janë specifike për vërtetimin e bazuar në Windows

Emri i përdoruesit dhe emri i grupit ruhen në objektin WindowsIdentity në formatin e mëposhtëm: DOMAINUserName dhe DOMAINGroup, përkatësisht. Përjashtimet e vetme janë grupet e integruara, si p.sh. grupi i Administratorëve, për të hyrë në të, mund të përdorni vargun e lidhjes përmes WindowsIdentity: BUILTINAadministrators. Përndryshe, mund të vendosni grupin e integruar nga numërimi System.Security.Principal.WindowsBuiltInRole.

Nga fig. 1 tregon se objekti WindowsIdentity ju lejon të merrni emrin e përdoruesit; përcaktoni llojin e vërtetimit; të përcaktojë nëse vërtetimi është kryer në mënyrë anonime; ju gjithashtu mund të zbuloni nëse përdoruesi është vërtetuar apo jo, nëse ai është mysafir apo përdorues i sistemit.


Oriz. 1 - Objekti i WindowsIdentity

Sepse në aplikacionet ASP.NET, për të hyrë në objektin WindowsIdentity, do t'ju duhet të ndërtoni zinxhirin e mëposhtëm:

HttpContext.Current.User.Identity atëherë mund të përcaktoni gjithashtu se cilit rol i përket përdoruesi aktual. Kjo mund të arrihet sepse vetia User në këtë zinxhir zbaton ndërfaqen Iprincipal, e cila ju lejon të përcaktoni nëse një përdorues i përket një roli të veçantë duke thirrur funksionin IsInRole, i cili ka sintaksën e mëposhtme:

Funksioni publik i kapërcyer IsInRole (Roli ByVal As String) Si Anëtar Boolean i: System.Security.Principal.Iprincipal

Por le të largohemi nga teoria e zhveshur për një kohë dhe të përpiqemi të zbatojmë një shembull praktik. Për ta bërë këtë, krijoni një projekt të ri ASP.NET Web Application dhe futni kodin e mëposhtëm:
Default.aspx:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="default.aspx.vb" Inherits="AuthSample.WebForm1"%> Mostra e vërtetimit

Default.aspx.vb:

Klasa Publike WebForm1 trashëgon System.Web.UI.Page #Region “ Kodi i krijuar nga Dizajnuesi i Formave të Uebit “ 'Kjo thirrje kërkohet nga Projektuesi i Formave të Uebit. Nën Private InitializeComponent() Fund Sub 'SHËNIM: Deklarata e mëposhtme e mbajtësit të vendndodhjes kërkohet nga Dizajnuesi i Formave të Uebit. ‘Mos e fshini ose mos e zhvendosni. Dizajner privatPlaceholderDeklarata As System.Object Nën-Private Page_Init(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Init 'CODEGEN: Kjo thirrje metodë kërkohet nga Projektuesi i Formave të Uebit 'Mos e modifikoni duke përdorur redaktuesin e kodit . InitializeComponent() Fund Sub #End Region Private Subpage_Load(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Load Dim s si varg s = "

Emri:" & HttpContext.Current.User.Identity.Name & "

” & _ “

Lloji i vërtetimit:" & HttpContext.Current.User.Identity.AuthenticationType.ToString &"

” & _ “

Iautentifikuar:" & HttpContext.Current.User.Identity.IsAuthenticated.ToString &"

” & _ “

Është admin:" & HttpContext.Current.User.IsInRole("Administrator").ToString & "

” Përgjigje. Shkruani(t) Fundi i Nën-Klasës së Fundit

Nëse është zgjedhur modaliteti i vërtetimit të Windows dhe cilësimet e IIS nuk kanë shkaktuar ndonjë konflikt, atëherë do të merrni informacionin përkatës në lidhje me përdoruesin tuaj aktual. Nëse fushat e emrit të përdoruesit dhe të tipit të vërtetimit janë bosh, atëherë thjesht duhet të konfiguroni IIS, për këtë ndiqni këto hapa:

1. Hapni IIS dhe gjeni direktorinë virtuale me këtë aplikacion
2. Hapni dritaren e vetive për këtë drejtori dhe shkoni te skeda Siguria e Drejtorisë. Në kornizën "Aksesi dhe vërtetimi anonim", kliko "Modifiko"…
3. Në dritaren që shfaqet (Fig. 2), zgjidhni hyrjen Anonymous


Oriz. 2 - Vendosja e IIS

Kjo përfundon diskutimin tonë për vërtetimin e bazuar në Windows dhe vazhdon drejt vërtetimit të formave.

Vërtetimi i formularit:

Autentifikimi i formularit, i njohur gjithashtu si vërtetimi i bazuar në cookie, ka një sërë përparësish mbi vërtetimin e Windows.

* Së pari, ju keni mundësinë të përcaktoni shijen dhe ngjyrën tuaj ose shijen dhe ngjyrën e përdoruesit pamjen formularët e regjistrimit në vend të të njëjtit lloj të dritares së regjistrimit të Windows.
* Së dyti, ju keni kontroll të plotë mbi informacionin që futni.
* Informacioni rreth përdoruesve tani mund të ruhet jo vetëm në SAM ose Active Directory, por edhe në çdo ruajtje tjetër, veçanërisht: një bazë të dhënash, një drejtori LDAP, skedarë XML ose skedarë teksti të thjeshtë.
* Nuk ka nevojë të lidhni politikën e sigurisë së serverit me politikën e aplikacionit në ueb, pasi, siç u përmend më herët, të gjitha informacionet e përdoruesit mund të zhvendosen në një dyqan të veçantë të dhënash pa asnjë ndërprerje me llogaritë e OS.

Por pavarësisht nga ky bollëk i opsioneve të vërtetimit të bazuara në forma, ekziston një kufizim domethënës - përdoruesi duhet të lejojë përdorimin e cookies. Nëse nuk është aty, atëherë vërtetimi i formularit duke përdorur mjetet ASP.NET nuk do të funksionojë. Kushtojini vëmendje fjalëve "... duke përdorur mjetet ASP.NET ...". Kjo do të thotë që mekanizmi që çliron zhvilluesin nga operacionet rutinë të kontrolleve të pafundme nuk do të funksionojë, me fjalë të tjera, të gjitha kërkesat e marra nga një përdorues që nuk e ka kaluar ende vërtetimin ridrejtohen në faqen e regjistrimit, ku ai fut informacionin e nevojshëm ( më shpesh një emër përdoruesi dhe fjalëkalim). Informacioni i marrë kalon në mjedisin ASP.NET, ku verifikohet. Nëse është i suksesshëm, përdoruesit i jepet një cookie që përmban një certifikatë autorizimi (Biletë autorizimi), një emër përdoruesi dhe një çelës për të marrë më vonë një identifikues. Si rezultat, të gjitha kërkesat e mëvonshme të shfletuesit do të përmbajnë informacion autorizimi në kokat e tyre, të cilat dërgohen në mjedisin ASP.NET për verifikim. Prandaj, nëse përdoruesi nuk mbështet cookies, atëherë të gjitha kontrollet nëse ai ishte vërtetuar do të duhet të bëhen manualisht, për shembull, në versionet e mëparshme të ASP, objekti Session është përdorur për këtë, afërsisht në formën e mëposhtme:

Nëse nuk është sesioni ("Regjistruar") = "1" Pastaj Response.Redirect("login.asp") Përfundoni nëse

Për të përdorur vërtetimin e formularit, së pari duhet të konfiguroni projektin në ueb. Për ta bërë këtë, ndryshoni përmbajtjen e etiketës skedari web.config si më poshtë:

Le të hedhim një vështrim më të afërt në kodin e mësipërm. Atributi mode i etiketës përcakton metodën e vërtetimit. Në shembujt e mëparshëm, ne përdorëm vlerën e Windows, e cila vendosi vërtetimin në modalitetin e vërtetimit të Windows, tani për punën e bazuar në forma, përdorim modalitetin Forms. Përveç këtyre dy konstantave, ka edhe 2 të tjera: Pasaporta dhe Asnjë - e para prej tyre përcakton vërtetimin e bazuar në pasaportë, e cila do të diskutohet më vonë, e dyta e çaktivizon atë krejtësisht. etiketa tjetër ( ) është unik për vërtetimin e bazuar në forma dhe përfshin informacionin e mëposhtëm:

* emri - emri i cookie-t, i cili do të përmbajë të dhëna për vërtetimin e suksesshëm
* loginUrl - përcakton adresën e faqes në të cilën përdoruesi do të ridrejtohet për të përfunduar regjistrimin
* mbrojtje - merr vlerat All|Asnjë|Enkriptim|Vleresim dhe përcakton se si mbrohen të dhënat në cookies. Nga vlerat e lejuara mund të shihet se nuk mund të bëni asgjë me të dhënat e marra dhe t'i pranoni ashtu siç janë; ju mund t'i krahasoni ato; mund të kodohet; dhe është gjithashtu e mundur të kombinohet verifikimi me kriptografinë - kjo është vlera e paracaktuar.
* timeout - përcakton sasinë e kohës në sekonda gjatë së cilës cookie-t do të jenë të disponueshme
*rruga - Ky atribut specifikon shtegun e plotë drejt cookie-t. Si parazgjedhje, ai përmban një prerje përpara (/), e cila zgjeron të gjitha shtigjet. Ndryshimi i këtij cilësimi nuk rekomandohet sepse disa shfletues janë të ndjeshëm ndaj shkronjave të vogla në shteg, kështu që ndryshimi i këtij cilësimi mund të ndërpresë mundësinë e vërtetimit të disa përdoruesve.
* requireSSL - ky atribut merr True ose False (parazgjedhje) dhe vendos nevojën për të përdorur protokollin e prizave të sigurta (SSL - Secured Sockets Layer)
*slidingExpiration Tregon nëse cookie-ja dhe kredencialet e autorizimit duhet të rikrijohen nëse skadon afati. Pranon vërtetë (parazgjedhje) ose false.

Të gjitha atributet e mundshme të seksionit të formularëve janë përshkruar më sipër, por që aplikacioni të funksionojë siç duhet, mjafton të përdorni vetëm 3 prej tyre, siç tregohet në listën e mëposhtme:

Formoni vërtetimin e formularit duke përdorur skedarë të veçantë XML:

Le të krijojmë tani një faqe të thjeshtë regjistrimi të përdoruesit që vërteton emrin e përdoruesit dhe fjalëkalimin e futur kundrejt të dhënave në skedarin XML. Për ta bërë këtë, së pari krijoni një skedar XML të quajtur users.xml me modelin e mëposhtëm:
users.xml:

Gjoni një Majk dy Fature tre

Baza e përdoruesve është gati - tani mund të filloni të krijoni një projekt pilot të regjistrimit të përdoruesve. I gjithë kodi i kërkuar tregohet më poshtë:
Default.aspx:

<%@ Page Language=”vb” AutoEventWireup=”false” Codebehind=”default.aspx.vb” Inherits=”FormAuth._default”%> default

Default.aspx.vb:

Imports System.Web.Security Public Class _default Trashëgon System.Web.UI.Page #Region “ Web Form Designer Generated Code “ ‘Kjo thirrje kërkohet nga Designer Form Web. Nën Private InitializeComponent() Fund Sub 'SHËNIM: Deklarata e mëposhtme e mbajtësit të vendndodhjes kërkohet nga Dizajnuesi i Formave të Uebit. ‘Mos e fshini ose mos e zhvendosni. Dizajner privatPlaceholderDeklarata As System.Object Nën-Private Page_Init(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Init 'CODEGEN: Kjo thirrje metodë kërkohet nga Projektuesi i Formave të Uebit 'Mos e modifikoni duke përdorur redaktuesin e kodit . InitializeComponent() Fund Sub #End Region Private Sub Page_Load(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Load 'Vendos kodin e përdoruesit për të inicializuar faqen këtu Nëse kontekst.Current.User.Identity.Name = "" Pastaj Response.Redirect("login.aspx") Else Response.Write("

”) End If End Nën-Fund Class

<%@ Page Language=”vb” AutoEventWireup=”false” Codebehind=”login.aspx.vb” Inherits=”FormAuth.WebForm1”%> Regjistrimi

Emri
Fjalëkalimi

Autentifikimi dështoi

Sistemi i importeve. Si System.Web.UI.WebControls.Label Protected WithEvents btnHyrja Si System.Web.UI.WebControls.Button #Region “ Kodi i gjeneruar i Dizajnuesit të Formave të Uebit “ 'Kjo thirrje kërkohet nga Dizajnuesi i Formave të Uebit. Nën Private InitializeComponent() Fund Sub 'SHËNIM: Deklarata e mëposhtme e mbajtësit të vendndodhjes kërkohet nga Dizajnuesi i Formave të Uebit. ‘Mos e fshini ose mos e zhvendosni. Dizajner privatPlaceholderDeklarata As System.Object Nën-Private Page_Init(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Init 'CODEGEN: Kjo thirrje metodë kërkohet nga Projektuesi i Formave të Uebit 'Mos e modifikoni duke përdorur redaktuesin e kodit . InitializeComponent() Fund Sub #End Region Private Sub btnLogin_Click(Dërguesi ByVal si objekt, ByVal e si ngjarje Args) Trajton btnLogin. Klikoni Dim xd si XmlDocument i ri, xr Si XmlNodeReader Dim sEmri si varg, xPa hapet si skedari XML, rings "d. Load(Server.MapPath(“users.xml”)) ' Aktivizo XmlNodeReader xr = New XmlNodeReader(xd.Item(“perdorues”)) " Duke kerkuar perdoruesin e duhur ndersa xr.Read If xr.Name = "emri" Dhe xr .NodeType = XmlNodeType.Element Pastaj sName = xr.ReadString " Nëse jo emri i përdoruesit, atëherë shkoni te një If sName tjetër<>txtName.Text Pastaj xr.Skip() ElseIf xr.Name = “fjalëkalim” Dhe xr.NodeType = XmlNodeType.Element Pastaj Nëse xr.ReadString() = txtPassword.Text Pastaj "Nëse fjalëkalimet përputheshin, atëherë vërtetimi autentikrom LoginPredirectut ishte i suksesshëm. ( txtName.Text, True) Përndryshe "Nëse jo, atëherë kalo te një përdorues tjetër xr.Skip() End If End If End while " Nëse kjo linjë ekzekutohet, atëherë të dhënat e përdoruesit janë futur gabimisht lbl.Visible = True End Sub End Klasa

Le të bëjmë një përmbledhje tani: kodi i mësipërm përmban 2 faqe. Të gjitha veprimet fillojnë në faqen default.aspx, e cila kontrollon nëse përdoruesi aktual ka një emër:

Nëse konteksti.Current.User.Identity.Name = "" Pastaj Response.Redirect("login.aspx") Else Response.Write("

Përshëndetje " & context.Current.User.Identity.Name & "

”) Fundi Nëse

Nëse është, atëherë në ekran do të shfaqet një mesazh mirëseardhjeje, përndryshe përdoruesi do të ridrejtohet në faqen e regjistrimit login.aspx, ku do t'i kërkohet të fusë emrin dhe fjalëkalimin e tij. Informacioni i futur kontrollohet kundrejt të dhënave nga skedari XML. Nëse përdoruesi nuk gjendet, do të shfaqet një mesazh gabimi (Figura 3), përndryshe përdoruesi do të ridrejtohet në mënyrë të sigurt në faqen origjinale default.aspx, e cila do ta përshëndesë përdoruesin kur zbulon se përdoruesi aktual ka një emër të përcaktuar.


Oriz. 3 - Të dhëna të pasakta gjatë regjistrimit

Nëse e keni vërtetuar me sukses dhe keni parë mesazhin e mirëseardhjes, mbyllni dritaren e shfletuesit dhe provoni të ekzekutoni sërish faqen default.aspx. Menjëherë do të shihni një përshëndetje përpara jush për përdoruesin, emrin e të cilit e keni futur herën e fundit. Fakti është se gjatë regjistrimit kemi ruajtur një skedar cookie në kompjuterin e klientit. Kjo ndodhi në momentin kur ne thirrëm funksionin RedirectFromLoginPage në kod, duke kaluar parametrin e tij CreatePersistentCookie në True:

FormsAuthentication.RedirectFromLoginPage(txtName.Text, True)

Thirrja e këtij funksioni me parametrin CreatePersistentCookie të vendosur në False është e mjaftueshme për të parandaluar kalimin e cookie-t. Ose ka një mënyrë tjetër - në faqen default.aspx, shtoni një mbajtës të ngjarjeve të shkarkimit të faqes me kodin e mëposhtëm:

Nën Faqe private_Shkarko(Dërguesi ByVal si objekt, ByVal e si System.EventArgs) Trajton MyBase.Shkarko FormsAuthentication.SignOut() Fund Sub

Si rezultat, pas shkarkimit të faqes kryesore, përdoruesi do të dalë nga llogaria.

Formoni vërtetimin e formularit duke përdorur skedarin e konfigurimit:

Në shembullin e mëparshëm, ne kemi ruajtur të gjitha të dhënat e përdoruesit në një skedar të veçantë XML, por rezulton se ASP.NET ofron mundësinë për të ruajtur informacionin e llogarisë direkt në skedarin e konfigurimit të projektit Web. Avantazhi i kësaj metode është se kërkon shumë më pak kod për t'u implementuar, sepse në këtë rast programuesi nuk duhet të shikojë manualisht përmes skedarit XML për përputhjen e tyre - ai thërret vetëm një funksion të vetëm që zgjidh të gjithë. Për të kuptuar se si funksionon ky mekanizëm, le të shohim edhe një herë skedarin e konfigurimit, ose më mirë, në etiketën e formave. Ky etiketë, përveç atributeve të përshkruara tashmë më parë, mund të përfshijë gjithashtu një seksion – certifikatat:
Web.config:

Siç mund ta shihni nga lista e mësipërme, etiketa e kredencialeve përmban një atribut të vetëm - passwordFormat. Ky parametër përcakton se si ruhet fjalëkalimi dhe merr vlerat e mëposhtme:

* Pastro - fjalëkalimi ruhet pa asnjë ndryshim
* SHA1 - fjalëkalimi hash duke përdorur metodën SHA1 (Secure Hash Algorithm version 1)
* MD5 - fjalëkalimi hash duke përdorur metodën MD5 (Message Digest version 5)

Nëse zgjidhni ndonjë nga algoritmet e hashimit, atëherë fjalëkalimi nuk mund të ruhet më në formën e tij origjinale në skedarin e konfigurimit - ai do të duhet së pari të hashohet dhe vetëm më pas t'i caktohet atributit të fjalëkalimit. Përndryshe, kur ASP.NET vërtetohet, fjalëkalimet thjesht nuk do të përputhen.

Tani që kemi një bazë të dhënash llogarie të sapokrijuar, le të kthehemi te aplikacioni i mëparshëm dhe të ndryshojmë kodin e mbajtësit të ngjarjeve të klikimeve të faqes login.aspx:
login.aspx.vb:

Nën Private btnLogin_Click(Dërguesi ByVal As Object, ByVal e As EventArgs) Trajton btnLogin. Klikoni Nëse FormsAuthentication.Authenticate(txtName.Text, txtPassword.Text) Pastaj " Nëse përdoruesi u gjet në seksionin e certifikatave, atëherë "Forms" .RedirectFromLoginPage(txtName.Text, False) Përndryshe, ne shfaqim një mesazh gabimi lbl.Visible = True Fund If End Sub

Tani krahasoni këtë kod me atë të përdorur në shembullin e mëparshëm. Siç mund ta shihni, ai është reduktuar nga shumë kushte dhe përsëritje në vetëm një pyetje që kthen E vërtetë ose e gabuar.

Në mënyrë specifike nuk do të shqyrtojmë tani një shembull të kodit që funksionon me fjalëkalime të hash, në mënyrë që të mos nxitojmë gjërat. Fakti është se në pjesën e tretë të këtij artikulli, e cila do t'i kushtohet kriptografisë, do të mësoni për të gjitha ndërlikimet e hashimit dhe kriptimit të të dhënave dhe do të jeni në gjendje t'i zbatoni vetë këto metoda.

Forma e vërtetimit duke përdorur bazën e të dhënave:

Le të shohim tani një shembull të punës me një dyqan tjetër të të dhënave të përdoruesit - me bazën e të dhënave MS SQL Server. Shumica e faqeve dinamike përdorin bazat e të dhënave për të ruajtur përmbajtjen e sajtit. Informacioni për përdoruesit gjithashtu nuk bën përjashtim dhe mund të zërë vendin e tij në grupin e përgjithshëm të të dhënave. Për të parë me sytë tanë se si ndodh e gjithë kjo, le të krijojmë një aplikacion testimi, i cili përsëri do të bazohet në faqen e regjistrimit që tashmë e njohim, të përdorur në shembujt e mëparshëm. Para së gjithash, duhet të përgatisni bazën e të dhënave. Për ta bërë këtë, hapni programin SQL Query Analyzer dhe ekzekutoni kodin e mëposhtëm në të, të shkruar në gjuhën tSQL:
FormAuthUsers.sql:

Krijoni bazën e të dhënave "FormAuthUsers" dhe shtoni tabelën "Përdoruesit" KRIJONI BAZA E TË DHËNAVE FormAuthUsers SHKO PËRDORIM FormAuthUsers SHKO KRIJO TABELA (IDENTITETI (1, 1) NOT NULL, (50), (50), KUFIZIM KRYESOR PRIMARER (CLUSIONGO) Plotësoni tabelën 'Përdoruesit' INSERT NË Përdoruesit (Emri i Përdoruesit, Fjalëkalimi) VLERA ('John', 'one') SHKO FITU NE përdoruesit (Emri i Përdoruesit, Fjalëkalimi) VLERA ('Mike', 'dy') SHKO INSERT NË Përdoruesit (Emri i Përdoruesit, ) VALUES('Bill', 'tre') SHKO --Krijo procedurë 'FindUser' KRIJO PROCEDURE FindUser @Name nvarchar(50), @Password nvarchar(50) AS SELECT COUNT(ID) FROM Users WHERE Emri i përdoruesit = @Name AND Fjalëkalimi = @Fjalëkalimi SHKO

Ky kod duhet të krijojë një bazë të dhënash në Serverin tuaj SQL të quajtur "FormAuthUsers" ku mund të gjeni një tabelë të Përdoruesve me tre regjistrime dhe një procedurë të ruajtur FindUser. Kjo procedurë kthen numrin e përdoruesve që plotësojnë kërkesën, i cili formohet nga parametrat e kaluar në këtë procedurë.

Tani që kemi gati bazën e të dhënave, mund të fillojmë të krijojmë një faqe që do të punojë me të. Për ta bërë këtë, ndërtoni përsëri shembujt e mëparshëm dhe zëvendësoni mbajtësin e ngjarjeve të klikimit të butonit në faqen login.aspx:
login.aspx.vb:

Importet System.Data.SqlClient Imports System.Web.Security Klasa Publike WebForm1 Trashëgon Sistemin.Web.UI.Faqja e mbrojtur me ngjarje txtEmri si System.Web.UI.WebControls.TextBox e mbrojtur me ngjarje txtPassword.Web. WithEvents lbl As System.Web.UI.WebControls.Label Protected WithEvents btnIdentifikohu si System.Web.UI.WebControls.Button #Region " Kodi i gjeneruar i Dizajnuesit të Formave të Uebit " 'Kjo thirrje kërkohet nga Projektuesi i Formave të Uebit. Nën Private InitializeComponent() Fund Sub 'SHËNIM: Deklarata e mëposhtme e mbajtësit të vendndodhjes kërkohet nga Dizajnuesi i Formave të Uebit. ‘Mos e fshini ose mos e zhvendosni. Dizajner privatPlaceholderDeklarata As System.Object Nën-Private Page_Init(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Init 'CODEGEN: Kjo thirrje metodë kërkohet nga Projektuesi i Formave të Uebit 'Mos e modifikoni duke përdorur redaktuesin e kodit . InitializeComponent() Fund Sub #End Region Private Sub btnLogin_Click(Dërguesi ByVal si objekt, ByVal e si ngjarje Args) Trajton btnLogin. Klikoni Dim cn si lidhje e re Sql(“server=localhost;baza e të dhënave=FormAuthUssers;)w; Dim cm si SqlCommand i ri (“FindUser”, cn) Dim n si numër i plotë " Hap lidhjen Provo cn.Open() Catch ex As SqlException Response.Write(psh.Message) Dil Sub End Try " Cakto llojin e komandës cm.CommandType = CommandType .StoredProcedure " Shto parametrat e emrit Dim prmName = New SqlParameter(“@Name”, SqlDbType.NvarChar, 50) prmName.Value = txtName.Text cm.Parameters.Add(prmName) "Shto parametrat e riPaql“Diaram Password”, SqlDbType.NvarChar, 50) prmPass.Value = txtPassword.Text cm.Parameters.Add(prmPass) " Ekzekutoni pyetjen n = cm.ExecuteScalar Nëse n > 0 Pastaj " Nëse dikush u gjet, atëherë regjistrimi ishte i suksesshëm Forms .RedirectFromLoginPage(txtName.Text, False) Përndryshe " nëse nuk ka njeri, atëherë një gabim lbl.Visible = True Fund If cn.Close() End Sub End Class

Që kjo faqe të funksionojë siç duhet, sigurohuni që vargu i lidhjes përputhet me konfigurimin tuaj. Le të hedhim një vështrim se çfarë po ndodh këtu. Së pari, krijohet një objekt i lidhjes SqlConnection, duke kaluar vargun e lidhjes së bazës së të dhënave si parametër:

Dim cn si SqlConnection i ri ("server=localhost;database=FormAuthUsers;uid=sa;pwd=;")

Pas kësaj, krijohet një shembull i objektit SqlCommand, i cili përdoret për të ekzekutuar komanda për të punuar me të dhëna. Linjat e mëposhtme të kodit hapin lidhjen, por merrni parasysh mundësinë e kapjes së përjashtimeve nga mbajtësi i përjashtimit të provoni:

" Hap lidhjen Provoni cn.Open() Catch ex As SqlException Response.Write(ex.Message) Dil Sub End Provo

Nëse ndodh ndonjë dështim gjatë hapjes së lidhjes, përdoruesi njoftohet në përputhje me rrethanat dhe operacioni ndërpritet.

Pas kësaj, objekti SqlCommand konfigurohet për të ekzekutuar procedurën e ruajtur dhe përgatiten parametrat për nisjen e tij. Për këto 7 rreshta kodi, natyrisht, ekziston një alternativë, e përbërë nga 1 rresht kodi:

cm.CommandText = "exec FindUser "" & txtName.Text & "", "" & txtPassword.Text & """

Por, pavarësisht se ky kod është më i shkurtër, koha e ekzekutimit do të jetë më e gjatë. Pse? Fakti është se me këtë linjë ju po kryeni një pyetje operacionale, d.m.th. po shkruani drejtpërdrejt komandën SQL që thërret procedurën e ruajtur. Si rezultat, ju transferoni të dhëna shtesë në rrjet në formën e komandës "exec", e cila nga ana tjetër zë hapësirë ​​në trafikun e rrjetit; Sapo kjo kërkesë të arrijë në server, komanda "exec" do të ekzekutohet së pari dhe vetëm atëherë do të nisë procedura e ruajtur FindUser që na nevojitet. Për më tepër, ekziston një mënyrë edhe më e vështirë, e cila është të braktisësh procedurat e ruajtura dhe të futësh të gjithë kodin e nevojshëm të pyetjes direkt në objektin SqlCommand, si rezultat i të cilit dërgohen edhe më shumë informacione shtesë përmes trafikut të rrjetit. Duket se ky është një plus ose minus nja dy dhjetëra bajt, por çka nëse duhet të punoni me pyetje të mëdha, kodi i të cilave është shumë më i madh se ai i procedurës sonë? Prandaj, mënyra më e mirë është përdorimi i procedurave të ruajtura, sepse në këtë rast ju merrni një ndarje të qartë të detyrave, në të cilën faqja e klientit është përgjegjëse vetëm për hyrjen / daljen e të dhënave në një formë të aksesueshme nga përdoruesi; SQL Server kryen të gjitha operacionet e të dhënave; dhe IIS vepron si një ndërmjetës midis klientit dhe serverit - kjo është një arkitekturë me tre nivele për ju. Mos i mbingarkoni makineritë e klientëve "të butë" me punë të panevojshme - është më mirë t'ia besoni atë artilerisë së rëndë, d.m.th., serverit.

Por le të kthehemi te kodi ynë dhe të vazhdojmë analizën e tij: pas përcaktimit të llojit të komandës dhe përgatitjes së të gjithë parametrave, ne e ekzekutojmë në mënyrë të sigurt këtë komandë dhe vërejmë se funksioni ExecuteScalar përdoret për ekzekutim. Duhet të përdoret kur si rezultat merrni një vlerë skalare, d.m.th një numër, i cili në fakt ndodh në procedurën tonë FindUser - ai kthen numrin e rekordeve që plotësojnë kushtin e dhënë:

Në fund të kodit, pasi kemi marrë numrin e rekordeve të gjetura, ne thjesht e analizojmë këtë vlerë dhe kryejmë veprimet e duhura.
Vërtetimi i formularit duke përdorur shërbimet e uebit:

Le të themi se punoni për organizatën XYZ. Ju keni marrë detyrën të krijoni një aplikacion që menaxhon informacionin e personelit të organizatës suaj. Ju keni qenë duke punuar në këtë projekt për 7 muaj tani, dhe krejt papritur, për arsye sigurie, ju jeni udhëzuar të strehoni informacionin e përdoruesit në një server krejtësisht të ndryshëm me të cilin një departament tjetër në organizatën XYZ po punon në mënyrë aktive. Nuk ju është dhënë akses i drejtpërdrejtë në server, kështu që projekti juaj nuk mund të hyjë drejtpërdrejt në bazën e të dhënave të përdoruesve të vendosur në këtë server. Për të zgjidhur këtë problem, u vendos që t'ju jepet mundësia të zhvilloni një shërbim në internet përmes të cilit mund të ushtronit kontroll mbi vërtetimin e përdoruesit.

Kjo histori fiktive zbulon një mënyrë tjetër se si mund të bëhet vërtetimi - përdorimi i shërbimeve të Uebit. Shërbimet e uebit bëhen veçanërisht të rëndësishme kur ju ose klientët tuaj nuk keni akses të plotë në server. Për më tepër, shërbimet e ueb-it janë të zbatueshme jo vetëm për aplikacionet në ueb, por ato mund të përdoren gjithashtu nga produkte softuerësh që funksionojnë në një shumëllojshmëri të gjerë platformash. Kjo mundësohet nga përdorimi i teknologjisë SOAP (Simple Object Access Protocol), e cila përdor portet standarde TCP/IP dhe protokollin HTTP.

Për të punuar me një shërbim ueb, së pari duhet ta krijoni atë. Për ta bërë këtë, filloni një projekt të ri të tipit ASP.NET Web Service (Figura 4).


Oriz. 4 - Krijoni një shërbim në internet

Tani, duke përdorur butonin e regjistrimit, klikoni kodin e mbajtësit të ngjarjeve nga shembulli i mëparshëm, ngjisni atë në kodin burimor të shërbimit në ueb, duke e modifikuar pak në formën e mëposhtme:
AuthSrvc.asmx:

Importet System.Web.Services Imports System.Data.SqlClient _ Shërbimi i Klasës Publike1 trashëgon System.Web.Services.WebService #Region " Kodi i krijuar nga projektuesi i shërbimeve të uebit " Publik Sub New() MyBase.New() "Kjo thirrje kërkohet nga Projektuesi i Shërbimeve të Uebit. InitializeComponent() "Shto inicializimin tënd kodi pas thirrjes së InitializeComponent() End Sub "Kërkohet nga Projektuesi i Shërbimeve të Uebit Komponentët privatë As System.ComponentModel.IContainer "SHËNIM: Procedura e mëposhtme kërkohet nga Projektuesi i Shërbimeve të Uebit "Ajo mund të modifikohet duke përdorur Projektuesin e Shërbimeve të Uebit. mos e modifikoni duke përdorur redaktuesin e kodit. Komponentët Private Sub InitializeComponent(). Nëse hidhet, atëherë nëse jo (përbërësit nuk janë asgjë) Atëherë komponentët. Dispose() End If End If MyBase. Dispose(disposing) End Sub #End Region " Një funksion që kontrollon nëse ka një përdorues me emrin dhe fjalëkalimin e dhënë Funksioni publik Vërtetimi (Emri i përdoruesit ByVal si varg, fjalëkalimi ByVal si varg, ByRef ErrMessage si varg) Si zbehje boolean cn si lidhje e re Sql("server=localhost;baza e të dhënave=FormAuthUsers;uid=sa;pwdComlmAsqdq") ("FindUser", cn) Dim n As Integer " Hap lidhjen Provoni cn.Open() Catch ex As SqlException " Nëse ka një përjashtim, atëherë kaloni përshkrimin e tij te parametri ErrMessage ErrMessage = ex.Message Exit Funksioni Fund Provoni " Set lloji i komandës cm. CommandType = CommandType.StoredProcedure "Shto parametrat e emrit Dim prmName = New SqlParameter("@Name", SqlDbType.NVarChar, 50) prmName.Value = Emri i përdoruesit cm.Parameters.Prm. = New SqlParameter(" @Password", SqlDbType.NVarChar, 50) prmPass.Value = Fjalëkalimi cm.Parameters.Add(prmPass) " Ekzekutoni pyetjen n = cm.ExecuteScalar " Mbyllni lidhjen cn. Analizoni rezultatin ( ") Nëse n > 0 Pastaj " Nëse gjendet dikush, kështu që regjistrimi kalon sukses Kthehu i vërtetë tjetër " nëse askush nuk është atje, atëherë gabimi Kthehu i gabuar Fundi nëse fundi Funksioni fundi i klasës

Mund të kontrolloni shëndetin e shërbimit pa dalë nga arka, thjesht ekzekutoni atë për ekzekutim në mjedisin Visual Studio .NET. Nëse nuk ka pasur gabime në shërbim, do të shihni një ekran para jush, në të cilin do të ketë 2 hiperlidhje. Njëra prej tyre çon në përshkrimin e shërbimit në ueb duke përdorur gjuhën WSDL (Gjuha e përshkrimit të shërbimit të uebit), dhe tjetra (Authenticate) ju lejon të testoni shërbimin. Klikoni mbi lidhjen e dytë dhe plotësoni tabelën e parametrave në faqen që shfaqet (Fig. 5). Nëse futni vargun "John" në fushën Emri i përdoruesit dhe zëvendësoni "one" si fjalëkalim, funksioni do të kthehet i vërtetë:

http://localhost/AuthSrvc/AuthSrvc.asmx/Authenticate: e vërtetë

Nëse e ndryshoni vlerën e ndonjërës prej këtyre fushave në të pavlefshme, domethënë në një që nuk është në bazën e të dhënave, atëherë rezultati do të jetë i kundërt, përkatësisht - False.

Unë mendoj se nuk ka kuptim të analizohet kodi i këtij funksioni në detaje, sepse në shumë mënyra është i ngjashëm me paraardhësin e tij nga shembulli i mëparshëm. Por, megjithatë, duhet t'i kushtoni vëmendje të veçantë mbajtësit të përjashtimeve. Nëse në listën me bazën e të dhënave thjesht shfaqi mesazhin përkatës në ekran kur ndodhi ndonjë përjashtim, atëherë në shërbimin Ueb ne kalojmë mesazhin e gabimit në parametrin ErrMessage të funksionit Authenticate, i cili u deklarua me referencë:.

" Hap lidhjen Provoni cn.Open() Catch ex As SqlException " Nëse ka një përjashtim, atëherë kaloni përshkrimin e tij te parametri ErrMessage ErrMessage = ex.Message Dil Funksioni Fund Provoni

Në aplikacionet që do të përdorin këtë shërbim, ne do të ndërtojmë një kontroll për praninë e ndonjë përjashtimi dhe nëse ato gjenden, do të shfaqim mesazhin e duhur.


Oriz. 5 - Verifikoni që shërbimi në internet po funksionon

Tani le të krijojmë një aplikacion që do të përdorë këtë shërbim Web, vetëm këtë herë do të devijojmë pak nga tema dhe do të krijojmë një aplikacion Windows për një ndryshim:

1. Krijoni një projekt të ri të tipit Windows Application
2. Ndryshoni formën në mënyrë që të duket si ajo e paraqitur në fig. 6, ose thjesht mund të zëvendësoni kodin në konstruktor nga lista e mëposhtme.
3. Në dritaren SolutionExplorer, kliko me të djathtën në dosjen Referencat dhe përzgjidh Add Web Reference… nga menyja e kontekstit që shfaqet.
4. Do të shihni një dialog për vendosjen e lidhjeve me shërbimet e Uebit. Fusni adresën e plotë të skedarit .asmx në fushën URL dhe kërkoni. Si rezultat, duhet të shihni diçka të ngjashme me Figurën 7.
5. Klikoni butonin Add Reference dhe një referencë për shërbimin e specifikuar të Uebit do të shfaqet në projektin tuaj.
6.


Oriz. 6 - Pamje e përafërt e aplikacionit të testimit
Oriz. 7 - Rezultatet e kërkimit të shërbimit në ueb

Tani mund të filloni të shkruani kodin që zbaton këtë shërbim Web. I gjithë kodi i kërkuar tregohet më poshtë:
AuthSrvcRelease.vb:

Klasa publike Form1 trashëgon System.Windows.Forms.Form #Region " Windows Form Designer krijuar kodin " Public Sub New() MyBase.New() "Kjo thirrje kërkohet nga Dizajnuesi i Formave të Windows. InitializeComponent() "Shto çdo inicializim pas InitializeComponent() thërret End Sub "Shfuqizimet e formularit shpërndahen për të pastruar listën e komponentëve. Mbingarkesat e mbrojtura anashkalojnë Sub Dispose(ByVal disposing Si Boolean) Nëse hidhet, atëherë nëse jo (komponentët nuk janë asgjë) Atëherë komponentët.Dispose() Fundi If End If MyBase. Dispose(disponing) End Sub "Kërkohet nga Windows Form Designer Komponentët privatë si System.ComponentModel.IContainer "SHËNIM: Procedura e mëposhtme kërkohet nga Dizajnuesi i Formave të Windows "Ajo mund të modifikohet duke përdorur Windows Form Designer. "Mos e modifikoni duke përdorur redaktuesin e kodit. Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents Label2 As System.Windows.Forms.Label Friend WithEvents txtEmri As System.Windows.Forms.TextBox Friend WithEvents txtWinPasdowss .Forms.TextBox Friend WithEvents cmdDal si System.Windows.Forms.Button Shoku WithEvents cmdIdentifikohu si System.Windows.Forms.Button Private Sub InitializeComponent() Me.Label1 = New System.Windows.Forms.Label Me.Label2 = New System.Windows.Forms.Label Me.txtName = New System.Windows.Forms.TextBox Me.txtPassword = Sistemi i ri.Windows. Forms.TextBox Me.cmdExit = New System.Windows.Forms.Button Me.cmdLogin = New System.Windows.Forms.Button Me.SuspendLayout() " "Label1 " Me.Label1.Location = New System.Drawing.Point(8 , 8) Me.Label1.Name = "Label1" Me.Label1.Size = Sistemi i ri.Vizatimi.Size(40, 16) Me.Label1.TabIndex = 0 Me.Label1.Text = "Emri:" " "Etiketa2 " Me.Label2.Location = New System.Drawing.Point(8, 40) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(64, 16) Me.Label2.TabIndex = 1 Me.Label2.Text = "Fjalëkalimi:" " "txtName " Me.txtName.Location = New System.Drawing.Point(80, 5) Me.txtName.Name = "txtName" Me.txtName.Size = Sistemi i ri.Vizatim .Size(216, 20) Me.txtName.TabIndex = 2 Me.txtName.Text = "" " "txtPassword " Me.txtPassword.Location = System.Drawing.Point(8 0, 37) Me.txtPassword.Emri = "txtPassword" Me.txtPassword.PasswordChar = Microsoft.VisualBasic.ChrW(42) Me.txtPassword.Size = Sistemi i ri.Vizatimi.Madhësia(216, 20Paabts.TxTxt. 3 Me.txtPassword.Text = "" ""cmdExit " Me.cmdExit.DialogResult = System.Windows.Forms.DialogResult.Cancel Me.cmdExit.Location = System.Drawing.Point(216, 72) Me.cmdExit = "cmdExit" Me.cmdExit.Size = New System.Drawing.Size(80, 24) Me.cmdExit.TabIndex = 4 Me.cmdExit.Text = "Dalje" " "cmdLogin " Me.cmdLogin.Location = Sistemi i ri. Drawing.Point(128, 72) Me.cmdLogin.Name = "cmdLogin" Me.cmdLogin.Size = New System.Drawing.Size(80, 24) Me.cmdLogin.TabIndex = 5 Me.cmdLogin.Text = "Identifikohu" " "Form1 " Me.AcceptButton = Me.cmdLogin Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.CancelButton = Me.cmdExit Me.ClientSize = System New.Drawing.Size(304, 103) Me. Controls.Add(Me.cmdLogin) Me.Controls.Add(Me.cmdExit) Me.Controls.Add(Me.txtPassword) Me.Controls.Add(Me.txtNam e) Me.Controls.Add(Me.Label2) Me.Controls.Add(Me.Label1) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog Me.MaximizeBox = False Me.MinimizeBox = False Me.Name = " Form1" Me.Text = "AuthSrvc Test application" Me.ResumeLayout(False) Fund Sub #End Region Private Sub cmdLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Trajton cmdLogin.Click " Cakto referencën te objekti dim au Si localhost.Service i ri1 Dim sErr Si varg, bln Si Boolean " Test Kursorin = Kursorët. WaitCursor bln = au.Authenticate(txtName.Text, txtPassword.Text, sErr) Cursor = Cursors.Default " - Por së pari, merrni parasysh përjashtimet e mundshme nëse sErr<>"" Pastaj MsgBox(sErr) Dilni Sub End If " - Dhe tani shkoni te kontrolli kryesor Nëse bln = True Pastaj MsgBox("Përshëndetje " & txtName.Text, MsgBoxStyle.Information) Tjetër MsgBox("Të dhëna të gabuara!", MsgBoxStyle. Pasthirrma ) Fund If End Sub Private Sub cmdExit_Click(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton cmdExit.Kliko Fund End End Sub End Class

Në këtë shembull, mund të shihni një kod shumë të thjeshtë, i cili është një thirrje e thjeshtë funksioni që kryen të gjitha operacionet e nevojshme.

Siç u përmend më herët, shërbimet e uebit bazohen në teknologjinë SOAP dhe për këtë arsye mund të përdoren nga aplikacionet që funksionojnë në një platformë krejtësisht të ndryshme. Ne nuk do të largohemi shumë nga Windows, por do të përpiqemi të thërrasim të njëjtin shërbim Web pa përdorur teknologjitë .NET, domethënë drejtpërdrejt përmes SOAP. Për ta bërë këtë, krijoni skedarin e mëposhtëm të skriptit në Visual Basic Script Edition (VBScript) dhe ekzekutoni atë:
SOAP.vbs:

" Krijo një shembull të objektit SoapClient Set sc = CreateObject("MSSOAP.SoapClient") " Lidhu me shërbimin në internet dhe telefono metodën Authenticate sc.mssoapinit "http://localhost/AuthSrvc/AuthSrvc.asmx?WSDL" Nëse sc .Autentifiko (" John", "one", s) = E vërtetë Pastaj MsgBox "Përshëndetje John", 64 Tjetër MsgBox "Të dhëna të gabuara!", 48 Fund Nëse " Fshi referencën e objektit Set sc = Asgjë

Siç mund ta shihni, me modelin e objektit SOAP, ju mund të përdorni shërbimet e Uebit duke përdorur një gamë të gjerë gjuhësh programimi (madje edhe skriptet!) dhe platforma.

Por jo gjithçka është aq perfekte sa duket. Nën mbështjellësin e bukur të shërbimeve të Uebit, grackat fshihen, para së gjithash, kjo është siguria e tyre. Shërbimet e uebit kanë një strukturë të pambrojtur XML që mund të përgjohet lehtësisht për të kuptuar dhe marrë të dhënat e transmetuara. Për të eliminuar, ose më mirë për të zvogëluar gjasat e rrjedhjes së një informacioni të tillë, është e nevojshme të sigurohen shërbimet e internetit. Ekzistojnë një sërë teknologjish për këto qëllime, por vetëm tre prej tyre janë më të zakonshmet: rregullat e murit të zjarrit, shtresa e prizave të sigurta (SSL) dhe rrjeti privat virtual (VPN).

Nëse e dini saktësisht se cilët kompjuterë do të kenë akses në shërbimin tuaj të internetit, atëherë në këtë rast, opsioni i rregullave të murit të zjarrit është i përshtatshëm për ju, ku mund të vendosni kufizime dhe të drejta për adresa IP specifike, kështu që kjo metodë është më e përshtatshme për rrjetet lokale, ku ju nuk duhet të shqetësoheni shumë për konfidencialitetin e informacionit të transmetuar. Një mjet shumë i përshtatshëm për këtë është serveri i Microsoft Security and Acceleration (ISA). Ai ofron rregulla të avancuara politikash që ju lejojnë të kufizoni ose, anasjelltas, të hapni aksesin në informacion për klientë të veçantë.

SSL është më i përshtatshmi për rrjetet e internetit. Kur e përdorni, të dhënat kodohen dhe transmetohen midis serverit dhe klientit; të dhënat e marra më pas vërtetohen, duke kontrolluar nëse të dhënat kanë ardhur nga i njëjti burim. Kjo ndodh me përdorimin e certifikatave, të cilat duhet të mbahen nga serveri dhe klienti, kështu që nga njëra anë, përdorimi i certifikatave ju lejon të siguroheni që të dhënat të hyjnë në duart e duhura, por nga ana tjetër, duhet të siguroheni që marrësi ka certifikatën e duhur. Kështu, për të përdorur SSL, ju duhet:

1. Merrni certifikata: ka certifikata komerciale dhe provuese. Dallimi midis tyre është se ai komercial do t'i lëshohet zyrtarisht blerësit dhe, në përputhje me rrethanat, do të kushtojë para, ndërsa ai i provës mund të merret falas, por pa regjistrim zyrtar. Certifikata mund të merret në adresën e mëposhtme: http://www.verisign.com/. Por pavarësisht se çfarë lloj certifikate porosisni, do t'ju duhet të shkarkoni 2: një për serverin dhe tjetrin për klientët (quhet gjithashtu Autoriteti i Certifikatës (CA)).
2. Vendosni serverin dhe instaloni certifikatat në shfletuesit e klientëve: më tej, për vërtetimin e suksesshëm të kërkesave SSL, duhet të shtoni certifikata si në server ashtu edhe në makinat e klientit. Për më tepër, certifikatat e klientit nuk janë për kompjuterin, por për shfletuesin, d.m.th., nëse përdoruesi përdor Internet Explorer dhe Netscape, është e dëshirueshme t'i lëshoni atij certifikata për të dy shfletuesit. Sidoqoftë, certifikatat e serverit janë krijuar gjithashtu për lloje të ndryshme serverësh (Në Verisign mund të gjeni certifikata për më shumë se 50 lloje serverësh), por ndryshimi i vetëm është se ato, si rregull, nuk ndryshojnë, përveç nëse instalohet një version i ri .

SHËNIM

Por, pavarësisht mungesës së regjistrimit zyrtar, certifikata e gjykimit është e ligjshme.

VPN është një shtrirje e rrjetit lokal bazuar në përdorimin e globalit, në veçanti të internetit. Për shembull, një përdorues që punon në një makinë në distancë mund të lidhet me një rrjet lokal nëpërmjet VPN duke përdorur internetin. Me këtë teknologji, ju mund të dërgoni të dhëna midis kompjuterëve përmes një lidhjeje të sigurt, pasi një VPN ka të njëjtat veçori sigurie si një rrjet lokal. Një nga disavantazhet e një VPN është nevoja për një lidhje afatgjatë për të funksionuar në mënyrë efektive. VPN funksionon me protokollet e mëposhtme për komunikim: Microsoft Point-to-Point Tunneling Protocol (PPTP) i përfshirë me Windows NT 4.0 dhe Windows 2000, ose Protokolli i Tunnelimit të Shtresës Dy (L2TP) i disponueshëm me Windows 2000.
SHËNIM

Lista e sistemeve operative përkatëse përmban vetëm ato që fillojnë nga versionet e të cilave këto protokolle u bënë të disponueshme, d.m.th. versionet e mëvonshme duhet të përfshihen gjithashtu në këto sisteme operative, për shembull, Windows XP, Windows 2003 Server.

Shërbimet e uebit dhe siguria e tyre janë tema shumë interesante dhe relevante, duke pasur parasysh se rritja e popullaritetit të shërbimeve të Uebit është rritur në qiell me ardhjen e .NET Framework dhe VS.NET. Por ne nuk do të thellohemi më tej në detaje, por do të kthehemi në rrjedhën kryesore të këtij artikulli. Ju lehtë mund t'i zotëroni vetë të gjitha këto teknologji. Për ta bërë këtë, ju duhet vetëm pak dëshirë, durim dhe kohë e lirë. Unë mund t'ju jap vetëm shenja udhëzuese që mund t'ju udhëheqin në kursin e duhur:

* http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/default.asp
*http://www.microsoft.com/isaserver
* http://support.microsoft.com/default.aspx?scid=kb;EN-US;q307267
* http://www.w3.org/TR/wsdl.html
* http://www.w3.org/TR/SOAP/

Vërtetimi i pasaportës:

Pasaporta është një sistem i vetëm regjistrimi i krijuar nga Microsoft dhe mund të përdoret në çdo faqe interneti që është anëtare e këtij promovimi. Një avantazh i rëndësishëm i kësaj teknologjie është se përdoruesi nuk ka nevojë të mbajë mend të dhënat e regjistrimit për çdo sajt veç e veç, gjë që ndodh shpesh kur llogaria me të cilën jeni mësuar tashmë është marrë në një ueb sajt të caktuar. Passport e zgjidh këtë problem për faktin se përdor një bazë të dhënash të përbashkët të përdoruesve, kështu që në faqet që mbështesin .NET Passport ju gjithmonë do të vendosni të njëjtat të dhëna regjistrimi: e-mail dhe fjalëkalimin tuaj.

Metoda e vërtetimit të bazuar në pasaportë përdor teknologji standarde të Uebit për lehtësinë e përdorimit dhe privatësinë:

* protokoll i sigurt SSL
* biskota
*JavaScript 1.2
* Kriptimi 3DES

Për të realizuar fuqinë e plotë të pasaportës, duhet të ndiqni këto hapa:

1. Shkarkoni SDK-në e pasaportës .NET nga URL-ja e mëposhtme: http://msdn.microsoft.com/library/default.asp?url=/downloads/list/websrvpass.asp

2. Pas kësaj, duhet të regjistroni faqen tuaj në shërbimin .NET Passport: http://go.microsoft.com/fwlink/?LinkID=9732. Nëse nuk regjistroheni, atëherë opsionet tuaja do të jenë jashtëzakonisht të kufizuara dhe nuk do të jeni në gjendje të merrni plotësisht rezultatin e pritshëm, për shembull, për t'u log out (d.m.th. dalje) do t'ju duhet të mbyllni të gjitha dritaret e shfletuesit dhe më pas të fshini të gjitha cookies - skedarët e të dhënave të pasaportës

Ashtu si me llojet e tjera të vërtetimit, së pari duhet të konfiguroni një skedar konfigurimi të projektit. Lista e mëposhtme tregon përmbajtjen bazë të seksionit të vërtetimit të skedarit të konfigurimit:

Në këtë kod, ne vendosim llojin e vërtetimit me pasaportë, pas së cilës vendosim një parametër të vetëm që konfiguron vërtetimin me pasaportë - adresën e faqes në të cilën përdoruesi do të ridrejtohet nëse lind nevoja për t'u regjistruar:

Një veçori tjetër që bashkon të gjitha llojet e vërtetimit është ndërfaqja IIdendity, në bazë të së cilës u krijuan të gjitha klasat e informacionit të përdoruesit për lloje të ndryshme të vërtetimit. Autentifikimi i pasaportës nuk bën përjashtim nga kjo listë dhe objekti System.Web.Security.PassportIdentity i .NET Framework është bërë mjeti që zbaton të gjitha vetitë kryesore.

Për të caktuar një lidhje në faqen e regjistrimit, është zakon të përdorni një logo të specializuar që ngarkohet përmes Internetit. Për shkak se kjo logo zakonisht përdoret mjaft shpesh, është më mirë të krijoni një kontroll të veçantë që zbaton komponentin e vërtetimit. Për ta bërë këtë, ndiqni këto hapa:

1. Krijoni një projekt të ri në VS.NET të tipit ASP.NET Web Application
2. Shtoni në të një Ueb User Control dhe emërtojeni passport.ascx
3. Zëvendësoni kodin e tij burimor me sa vijon:

pasport.ascx.vb:

Importet System.Web.Security Pasaporta e Klasës Publike Trashëgon System.Web.UI.UserControl #Region " Kodi i krijuar nga Dizajnuesi i Formave të Uebit " "Kjo thirrje kërkohet nga Projektuesi i Formave të Uebit. Private Sub InitializeComponent() Fund Sub "SHËNIM: Deklarata e mëposhtme e mbajtësit të vendndodhjes kërkohet nga Projektuesi i Formave të Uebit. "Mos e fshini ose zhvendosni atë. Dizajner privatPlaceholderDeklarata si System.Object Nën-Private Page_Init(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Init "CODEGEN: Kjo thirrje metodë kërkohet nga Projektuesi i Formave të Uebit "Mos e modifikoni duke përdorur redaktuesin e kodit . InitializeComponent() Fund Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Load Dim id As PassportIdentity " Merr ID-në aktuale të përdoruesit = CType(context.User.Identity, Pass ) " Shfaqni butonin e hyrjes Response.Write(id.LogoTag()) Fundi i klasës së nën-fundit 1. Më pas ndryshoni emrin e faqes së projektit në ueb në login.aspx dhe futni kodin e strukturës së faqes vijuese: login.aspx:<%@ Page Language="vb" AutoEventWireup="false" Codebehind="login.aspx.vb" Inherits="PassAuth.WebForm1"%> <%@ Register TagName="passport" TagPrefix="ctl" src="passport.ascx"%> Identifikohu

Objekti i PassportIdentity, ose më mirë shërbimi Microsoft Passport, të cilit .NET Framework i qaset përmes objektit PassportIdentity, kujdeset për të gjithë vërtetimin bazë të përdoruesit. Kjo është arsyeja pse, ju duhet vetëm të korrni shpërblimet, por për të ditur se çfarë saktësisht mund dhe çfarë duhet të korrni, referojuni Tabelës 1, e cila shpjegon të gjitha atributet e mundshme që përshkruajnë një përdorues të regjistruar.

Emri i atributitPërshkrim
aksesueshmërinëPërcakton nëse opsionet e aksesueshmërisë duhet të lejohen për të dhënën
përdorues në të gjitha sajtet që janë anëtarë të Microsoft Passport
BDay_precisionPërcakton saktësinë e atributit Birthdate
Data e lindjesPërmban datën ose vitin e lindjes së përdoruesit, në varësi të vlerës
Atributi BDay_precision
qytetGeoID që ruan informacionin e vendndodhjes
përdorues
VendiKodi i vendit të përdoruesit ISO 3166
DrejtoriaNuk është përdorur ende
EmriEmri i përdoruesit
FlamujtPërmban opsionet e profilit të përdoruesit
GjiniaPërcakton gjininë e përdoruesit
Lang_PreferenceLCID e gjuhës kombëtare të përdoruesit
mbiemriMbiemri i përdoruesit
AnëtarIDLartëIdentifikuesi unik i përdoruesit të nivelit të lartë PUID
Anëtar IDLowPUID ID unike e përdoruesit të nivelit të ulët
Emri i AnëtaritPërmban emrin e përdoruesit dhe emrin e domenit të ndarë me shenjën "@".
PseudonimiTrajtim miqësor ndaj përdoruesit
ProfesioniPërmban disa informacione shtesë rreth përdoruesit, në
në veçanti llojin e veprimtarisë
Kodi PostarKodi postar i përdoruesit në Shtetet e Bashkuara ose në një vend tjetër
Email i preferuarAdresa e emailit të përdoruesit
Versioni i profilitVersioni i profilit të përdoruesit
RajonIdentifikuesi GeoID që tregon vendbanimin e përdoruesit në
vendi
zonë kohorePërcakton zonën kohore në të cilën jeton përdoruesi
portofolinPërcakton nëse përdoruesi e mban pasaportën brenda
portofolin

Tab. 1 - Opsionet e profilit të përdoruesit

Ka dy mënyra për të hyrë në të gjitha këto atribute: me metodën GetProfileObject të objektit PassportIdentity dhe përmes vetive Item të të njëjtit objekt. Lista e mëposhtme, e shkruar në C#, tregon të dyja këto metoda në veprim:
default.aspx.cs:

duke përdorur System.Web.Security; … Page_Load private void(dërguesi i objektit, System.EventArgs e) ( ID e PassportIdentity; id = (PassportIdentity)User.Identity; Response.Write(id["FirstEmri"] + "
"); Response.Write(id.GetProfileObject("Mbiemri") + "
"); }

Tani le të kthehemi te projekti ynë me kontrollin pasport.ascx dhe të përfundojmë faqen e regjistrimit. Për ta bërë këtë, modifikoni skedarët login.aspx dhe login.aspx.vb si më poshtë:
login.aspx:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="login.aspx.vb" Inherits="PassAuth.WebForm1"%> <%@ Register TagName="passport" TagPrefix="ctl" src="passport.ascx"%> Identifikohu

Ju lutemi identifikohuni...

PUID:
Emri:
mbiemri:
Email:

Siç e dini, shumica e faqeve kanë të njëjtin lloj paraqitjeje të faqeve të pranuara përgjithësisht, një pjesë integrale e së cilës është kreu dhe fundi dhe, ndoshta, ...

Vërtetimi i formularëve

Autentifikimi i formularëve është një sistem vërtetimi me qëllim të përgjithshëm i bazuar në dy koncepte. E para prej tyre - faqja e hyrjes, i cili mund të vërtetojë përdoruesit (zakonisht duke kontrolluar kombinimin e emrit të përdoruesit/fjalëkalimit kundrejt një baze të dhënash ose një ruajtjeje tjetër të të dhënave). E dyta është një mekanizëm për të ruajtur dhe rivendosur kontekstin e sigurisë në çdo kërkesë (zakonisht duke përdorur një cookie). Kështu, përdoruesi do të duhet të identifikohet vetëm një herë.

Siç do të tregohet më vonë, ASP.NET përfshin të gjithë infrastrukturën e nevojshme. Nëpërmjet vërtetimit të formularëve, ASP.NET krijon një cookie sigurie për përdoruesit e regjistruar, u shërben atyre dhe ruan automatikisht një kontekst sigurie për kërkesat pasuese. Më e mira nga të gjitha, ajo e menaxhon këtë proces në mënyrë efikase dhe i reziston falsifikimit në shkallën më të lartë.

Autentifikimi i formularëve bazohet në bileta (të quajtura gjithashtu argumente). Kjo do të thotë që kur një përdorues regjistrohet, ai merr një të ashtuquajtur biletë me informacion bazë për veten e tij. Informacioni ruhet në një cookie të koduar që i bashkëngjitet përgjigjes në mënyrë që të dërgohet automatikisht në çdo kërkesë të mëpasshme.

Kur një përdorues kërkon një faqe ASP.NET që nuk është e disponueshme për përdoruesit anonimë, koha e ekzekutimit të ASP.NET kontrollon për të parë nëse ka një biletë vërtetimi të formularëve. Nëse jo, do t'ju ridrejtojë automatikisht në faqen e hyrjes. Nga ky moment fillojnë shqetësimet tuaja. Ju duhet të krijoni këtë faqe identifikimi dhe brenda saj të kontrolloni identitetin e përdoruesit. Nëse përdoruesi është vërtetuar me sukses, ju thjesht i tregoni kornizës ASP.NET se operacioni ishte i suksesshëm (duke thirrur metodën e klasës FormsAuthentication), dhe koha e ekzekutimit vendos automatikisht cookie-n e vërtetimit (që në fakt përmban biletën) dhe e ridrejton përdoruesin në faqe që ata kërkuan. Me këtë kërkesë, koha e ekzekutimit përcakton që skedari i vërtetimit me biletë është i pranishëm dhe e bën faqen të disponueshme.

Ky proces është paraqitur në figurën më poshtë. E tëra çfarë ju duhet të bëni është të vendosni vërtetimin e formularëve në skedarin web.config, të krijoni një faqe identifikimi dhe të vërtetoni identitetin e përdoruesit brenda saj.

Pse të përdorni vërtetimin e formularëve?

Autentifikimi i formularëve është një zgjedhje tërheqëse për zhvilluesit për disa arsye, të cilat janë renditur më poshtë:

    Ju keni kontroll të plotë mbi kodin e vërtetimit.

    Ju merrni kontroll të plotë mbi pamjen e formularit të hyrjes.

    Punon me çdo shfletues.

    Kjo ju lejon të zgjidhni se si ruhen informacionet e përdoruesit.

Të gjitha këto arsye diskutohen më në detaje në seksionet e mëposhtme.

Kontrolli i Kodit të Autentifikimit

Meqenëse vërtetimi i formularëve zbatohet tërësisht brenda ASP.NET, ju keni kontroll të plotë mbi mënyrën se si kryhet vërtetimi. Ju nuk duhet të mbështeteni në ndonjë sistem të jashtëm, siç është rasti me vërtetimin e Windows. Ju mund të personalizoni sjelljen e vërtetimit të formularëve për t'iu përshtatur nevojave tuaja.

Kontrollimi i pamjes së formularit të hyrjes

Ju keni të njëjtën shkallë kontrolli mbi pamjen e vërtetimit të formularëve siç keni mbi funksionalitetin e tij. Me fjalë të tjera, faqja e hyrjes mund të stilohet si të doni. Megjithatë, nëse nuk dëshironi ta bëni këtë, mund të përdorni API-në e anëtarësimit të nivelit të lartë dhe kontrollet e sigurisë ASP.NET. Këto kontrolle përfshijnë një kontroll të identifikimit të gatshëm për përdorim dhe shumë të personalizueshëm.

Fleksibiliteti në personalizimin e pamjes nuk është i disponueshëm me metodat e tjera të vërtetimit. Autentifikimi i Windows kërkon që shfletuesi të kërkojë identitetin e përdoruesit.

Punoni me çdo shfletues

Autentifikimi i formularëve përdor HTML standarde si ndërfaqen e përdoruesit në mënyrë që të gjithë shfletuesit ta përpunojnë atë.

Autentifikimi i formularëve përdor formularët standardë HTML për të futur dhe dorëzuar identitetin e një përdoruesi. Kjo do të thotë që SSL duhet të përdoret për të enkriptuar dhe transferuar në mënyrë të sigurt këtë identitet. Përndryshe, kur të dhënat dërgohen përsëri në server, informacioni dërgohet si tekst i thjeshtë.

Ruajtja e informacionit për përdoruesit

Autentifikimi i formularëve ruan përdoruesit në skedarin web.config si parazgjedhje, por ky informacion mund të ruhet kudo. Për ta bërë këtë, ju duhet vetëm të shkruani kodin që hyn në dyqanin e të dhënave dhe merr informacione rreth përdoruesve. (Nëse përdorni API-në e Anëtarësimit, nuk keni pse ta bëni këtë.) Një shembull i zakonshëm do të ishte ruajtja e informacionit rreth përdoruesve në një bazë të dhënash.

Fleksibiliteti në ruajtjen e informacionit të përdoruesit do të thotë gjithashtu të jesh në gjendje të kontrollosh krijimin dhe administrimin e llogarive të përdoruesve, si dhe t'i bashkëngjitësh informacione shtesë këtyre llogarive, si p.sh. preferencat personale për të personalizuar pamjen dhe ndjesinë e faqes në internet. Ju gjithashtu mund të përfshini detaje specifike të biznesit, të tilla si informacioni i koduar i kartës së kreditit nëse faqja është një dyqan online.

Kur nuk duhet të përdorni vërtetimin e formularëve?

Deri më tani, ne kemi parë pse vërtetimi i formularëve është një zgjedhje tërheqëse për regjistrimin e përdoruesit. Sidoqoftë, vërtetimi i bazuar në forma ka edhe anët e veta negative:

    Ju duhet të krijoni vetë ndërfaqen e përdoruesit për regjistrimin e përdoruesit. Mund të krijoni tërësisht faqen tuaj të hyrjes ose të përdorni kontrollet e sigurisë ASP.NET.

    Ju duhet të mbani një drejtori të identiteteve të përdoruesve.

    Duhet të merrni masa paraprake shtesë kundër ndërhyrjes në trafikun e rrjetit.

Kjo do të diskutohet më në detaje në seksionet vijuese. Dy të metat e para mund të adresohen duke përdorur API-në e Anëtarësimit, e cila ofron kontrolle të para-projektuara dhe skemë të ruajtjes së identitetit me një zgjidhje me çelësa në dorë të bazuar në SQL Server.

Krijimi i ndërfaqes suaj të regjistrimit

Siç u përmend më herët, vërtetimi i formularëve ju jep kontroll të plotë mbi ndërfaqen përmes së cilës përdoruesit hyjnë në aplikacionin tuaj në internet. Së bashku me përfitimet, kjo qasje kërkon punë shtesë pasi ju duhet të ndërtoni vetë faqen e hyrjes. Opsionet e tjera të vërtetimit ofrojnë forma të gatshme. Për shembull, nëse përdoret vërtetimi i Windows, shfletuesi do të ofrojë një kuti dialogu standard. Autentifikimi i pasaportës përdor gjithmonë ndërfaqen e përdoruesit të faqes së Pasaportës për regjistrimin e përdoruesit.

Krijimi i një faqe identifikimi për vërtetimin e formularëve nuk kërkon shumë punë. Duhet të theksohet vetëm se vërtetimi i formularëve është vetëm një platformë për ndërtimin e një sistemi vërtetimi, dhe jo një sistem i gatshëm për përdorim.

Nga ana tjetër, API-ja e re e Anëtarësimit përfshin një kontroll të para-ndërtuar të hyrjes që mund të përdoret ose në një faqe të pavarur hyrjeje ose si pjesë e çdo faqeje aplikacioni në internet. Ndërfaqja e përdoruesit është e personalizueshme dhe ndërvepron automatikisht me API-në e Anëtarësimit kur përdoruesi identifikohet. Kontrolli kryen pjesën më të madhe të punës për krijimin e faqeve të personalizuara të hyrjes.

Në shumicën e rasteve, krijimi i faqes tuaj të hyrjes nuk kërkon asgjë më shumë se shtimi i një faqe .aspx që përmban këtë kontroll në zgjidhjen tuaj. Nëse sjellja e paracaktuar e këtij kontrolli është e mirë (që është në shumicën e rasteve), atëherë nuk keni nevojë të përgjoni ndonjë ngjarje ose të shkruani kodin tuaj.

Mirëmbajtja e informacionit të përdoruesit

Duke përdorur vërtetimin e formularëve, ju jeni përgjegjës për ruajtjen e informacionit të detajuar në lidhje me përdoruesit që kanë akses në sistemin tuaj. Detajet më të rëndësishme janë kredencialet që përdoruesit duhet të paraqesin për t'u identifikuar. Ju do të duhet jo vetëm të zgjidhni se si t'i ruani ato, por edhe të siguroni sigurinë e ruajtjes. Përveç kësaj, do t'ju duhet të siguroni një lloj mjeti administrativ për të menaxhuar të dhënat e përdoruesit në depo.

Anëtarësimi API vjen me një skemë të para-ndërtuar për ruajtjen e identiteteve në një bazë të dhënash SQL Server. Duke përdorur këtë skemë të gatshme, mund të kurseni shumë kohë. Për më tepër, skema është e zgjerueshme. Megjithatë, ju jeni përgjegjës për rezervimin e sigurt të dyqanit të identitetit në mënyrë që të mund të restaurohet në rast të një dështimi të sistemit.

Të gjitha sa më sipër nuk zbatohen për shumicën e llojeve të tjera të vërtetimit. Me vërtetimin e Windows, sistemi operativ themelor është përgjegjës për ruajtjen e kredencialeve të përdoruesit. Windows ka shumë truke për t'i ruajtur ato automatikisht në mënyrë të sigurt, kështu që nuk keni nevojë të bëni ndonjë punë shtesë. Me vërtetimin e pasaportës, identitetet ruhen në mënyrë të sigurt në serverët e dedikuar të Pasaportës.

Përgjimi i trafikut të rrjetit

Kur një përdorues fut informacionin e identitetit kur vërteton me formularë, ai dërgohet nga shfletuesi te serveri në format teksti të thjeshtë. Kjo do të thotë se kushdo që e përgjon do të jetë në gjendje ta lexojë. Natyrisht, kjo situatë është e pasigurt.

Zgjidhja e zakonshme për këtë problem është përdorimi i SSL (siç përshkruhet në artikullin e mëparshëm). Në këtë pikë, ju mund të dëshironi të përdorni SSL për të siguruar vetëm faqen e regjistrimit, në vend të të gjithë aplikacionit. Autentifikimi i formularëve mund të konfigurohet për të enkriptuar dhe nënshkruar skedarët e skedarëve, duke e bërë shumë të vështirë për një sulmues të nxjerrë informacion prej tij. Përveç kësaj, cookies nuk duhet të përmbajnë ndonjë informacion të ndjeshëm dhe për këtë arsye nuk përfshijnë fjalëkalime të futura gjatë vërtetimit.

Por, çka nëse një sulmues kap trafikun e pakriptuar, nxjerr një cookie prej tij (i cili tashmë është i koduar) dhe e përdor atë për qëllimet e tij? Ai nuk ka nevojë ta deshifrojë atë - thjesht furnizojeni me kërkesat e tij të dërguara. Mënyra e vetme për të kundërshtuar këtë sulm përsëritës është përdorimi i SSL për të gjithë sitin.

Mekanizmat e tjerë të vërtetimit nuk kërkojnë punë shtesë. Autentifikimi i Windows mund të përdorë një protokoll që siguron automatikisht një proces të sigurt hyrjeje (megjithatë, me një paralajmërim - nuk mbështetet nga të gjithë shfletuesit dhe jo nga të gjitha mjediset e rrjetit). Me vërtetimin e pasaportës, procesi i regjistrimit trajtohet në mënyrë transparente nga serverët e Pasaportës, të cilët përdorin gjithmonë SSL.

Pse të mos e zbatoni vetë vërtetimin e cookie-ve?

Në varësi të konfigurimeve që do të mësoni në artikujt e mëvonshëm, vërtetimi i formularëve përdor kuki për të lëshuar bileta vërtetimi për klientët dhe përdoruesit. Një term më i përgjithshëm për këtë qasje quhet vërtetimi i cookie-ve. Autentifikimi duke përdorur cookie në shikim të parë duket si një sistem shumë i thjeshtë. Mund të lindë pyetja: pse të mos e zbatoni vetë duke përdorur kuki dhe variabla të sesionit?

Arsyeja është e njëjta arsye pse zhvilluesit nuk zbatojnë veçori të tjera ASP.NET, nga gjendja e sesionit deri te Korniza e Kontrollit të Uebit. Nuk është vetëm se ASP.NET nuk është aspak i vështirë, por ofron gjithashtu një zbatim të sigurt, të testuar mirë dhe të shtrirë. Më poshtë janë disa nga përfitimet e zbatimit të vërtetimit me ASP.NET Forms:

    Kukit e vërtetimit janë të sigurta.

    Autentifikimi i formularëve është një sistem i testuar mirë.

    Autentifikimi i formularëve është i integruar me klasat e sigurisë .NET.

Sigurimi i skedarëve të autentifikimit

Autentifikimi i cookie-ve duket i thjeshtë, por nëse nuk zbatohet siç duhet, është një sistem i pasigurt. Vetë cookie-t nuk janë një vend i sigurt për të ruajtur informacionin, sepse një sulmues mund t'i shikojë dhe modifikojë lehtësisht të dhënat e cookie-ve. Nëse vërtetimi bazohet në cookie të pasigurta, një haker mund të komprometojë lehtësisht sistemin.

Si parazgjedhje, moduli i vërtetimit të formularëve kodon informacionin e vërtetimit përpara se ta vendosë atë në cookie. Ai gjithashtu siguron një kod hash për të dhe kontrollon cookie-n kur kthehet në server për t'u siguruar që nuk është modifikuar. Kombinimi i këtyre dy proceseve i mban cookies të sigurta dhe eliminon nevojën për të shkruar kodin tuaj të sigurisë. Shumica e shembujve të vërtetimit të cookie-ve homebrew janë shumë më pak të sigurta.

Autentifikimi i formularëve është testuar gjerësisht

Autentifikimi i formularëve është një pjesë integrale e ASP.NET, dhe si i tillë përdoret në shumë aplikacione në internet dhe faqe interneti. Kur kaq shumë njerëz përdorin të njëjtin sistem, të gjitha mangësitë identifikohen, publikohen dhe zgjidhen shumë shpejt. Për sa kohë që i instaloni të gjitha arnimet në kohë, mund ta konsideroni veten të sigurt. Nga ana tjetër, nëse krijoni sistemin tuaj të vërtetimit të bazuar në cookie, ju humbni përfitimet e një testimi të tillë masiv. Dhe rasti i parë i zbulimit të një cenueshmërie do të përfshijë hakimin në sistemin tuaj të drejtpërdrejtë.

Integrimi me platformën e sigurisë ASP.NET

Të gjitha llojet e vërtetimit të ASP.NET janë pjesë e një kornize të përbashkët konsensusi. Autentifikimi i formularëve është plotësisht i integruar me këtë platformë sigurie. Për shembull, ai plotëson objektin e kontekstit të sigurisë (IPrincipal) siç duhet. Kjo e bën të lehtë personalizimin e sjelljes së vërtetimit të formularëve sipas dëshirës tuaj.

Format e Klasave të Autentifikimit

Pjesa më e rëndësishme e kornizës së vërtetimit të formularëve është FormsAuthenticationModule. Kjo është klasa HttpModule që zbulon biletat e vërtetimit të formularëve të pranishëm në kërkesë. Nëse nuk disponohet një biletë e tillë dhe përdoruesi ka kërkuar një burim të mbrojtur, atëherë kërkesa ridrejtohet automatikisht në faqen e identifikimit të specifikuar në skedarin web.config përpara se koha e ekzekutimit të prekë burimin e mbrojtur.

Nëse bileta është e pranishme, moduli krijon automatikisht një kontekst sigurie duke inicializuar vetinë HttpContext.Current.User me një shembull të parazgjedhur GenericPrincipal që përfshin një shembull FormsIdentity me emrin e përdoruesit të regjistruar aktualisht. Në përgjithësi, nuk do t'ju duhet të punoni drejtpërdrejt me këtë modul. Ndërfaqja për ndërveprim me modulin përbëhet nga klasat e renditura në tabelën më poshtë, të cilat janë të përcaktuara në hapësirën e emrave System.Web.Security:

Formon klasat e kornizës së vërtetimit
emri i klasës Përshkrim
FormsAuthentication

Klasa bazë për ndërveprim me kornizën e vërtetimit të formularëve. Ai ofron informacion bazë të konfigurimit dhe ju lejon të krijoni një biletë, të vendosni skedarë skedarësh dhe të ridrejtoni nga faqja e hyrjes në faqen e kërkuar origjinale nëse identiteti i përdoruesit verifikohet me sukses

FormsAuthenticationEventArgs

FormsAuthenticationEventArgs ngre një ngjarje Authenticate që mund të kapet. Konventat e argumentit të ngjarjeve janë të përmbledhura në një shembull të kësaj klase. Përmban informacion bazë për përdoruesin e vërtetuar

FormsAuthenticationTicket

Kjo klasë ofron informacione rreth përdoruesit që do të kodohen dhe vendosen në skedarin e verifikimit.

FormIdentiteti

Kjo klasë zbaton ndërfaqen IIdentity dhe është specifike për vërtetimin e formave. Shtesa kryesore në klasën FormsIdentity, përveç anëtarëve që kërkohen për të zbatuar ndërfaqen IIdentity, është vetia Ticket, e cila përfaqëson biletën e vërtetimit. Kjo lejon që informacione shtesë të ruhen dhe të merren nga bileta, të tilla si informacioni i roleve të ruajtura në memorie për skenarë të thjeshtë.

FormsAuthenticationModule

Bërthama e kornizës së vërtetimit të formularëve që krijon një kontekst sigurie dhe ridrejton automatikisht në faqen e identifikimit kur është e nevojshme

Në pjesën më të madhe, ju do të përdorni klasat FormsAuthentication dhe FormsIdentity, të cilat përfaqësojnë një përdorues aplikacioni të autentifikuar me sukses. Më pas, ne do t'ju tregojmë se si të përdorni vërtetimin e formularëve në aplikacionet tuaja.

Artikujt kryesorë të lidhur