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

Kontrolli i hyrjes.

Mund ta kem gabim, por pas orëve të tëra kërkimi në internet dhe kërkimi, më duhet të pyes përsëri njerëzit e mirë këtu në StackOverflow. Po përpiqem të shtoj një kontrollues identifikimi në një sajt aspx WebForms. Unë bëra sa vijon:

  • U shtuan vlerat përkatëse në WebConfig.
  • Konfigurimi i bazës time të të dhënave me aspnet_regsql (Përdorimi i kornizës v4.0/Site po funksionon 4.5 (A është ky një problem?)
  • U shtua CreateUserWizard dhe kontrollon nëse përdoruesit janë shtuar në bazën e të dhënave. (Punëtor)
  • Kontrolluar nëse ID/Emri i aplikacionit është i njëjtë me përdoruesit që caktohen në bazën e të dhënave.

Unë isha i pari që provova formular regjistrimi në faqen time duke përdorur default.aspx në kombinim me & . Nëse e furnizoj formularin me kredencialet që përputhen me përdoruesin e regjistruar në Creat eUserWizard, nuk marr një gabim dhe më ridrejton. Por unë ende nuk jam regjistruar. Nëse jap kredenciale të rreme, ai më jep "gabim i pavlefshëm me emrin e përdoruesit/fjalëkalimin", kështu që duhet të jetë në gjendje të lidh dhe të vërtetojë kredencialet.

Unë jam pak i humbur në këtë pikë sepse nuk ka gabime të paraqitura dhe nuk jam i sigurt se si duhet të vazhdoj të kërkoj për gabime. Provova gjithashtu të shtoja një faqe të dytë të quajtur "login.aspx" me të njëjtat rezultate.

My WebConfig

Formulari i hyrjes

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ProperLogin.ascx.cs" Inherits="BlacjJack.ProperLogin" %>

*
*

CreateUserWizard

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ProperRegister.ascx.cs" Inherits="BlacjJack.ProperRegister" %>

Çfarë provoni pasi mora disa këshilla nga ju djema:

  • Shtuar një shkurtore te AnonymouseTemplate, ai kalon testin për User.Identity.isAuthenticated dhe kthen false. Edhe një gabim i rëndë nuk ndodh.
  • Unë kam instaluar fiddler në pamjen e mëposhtme të ekranit, ai merr një cookie kur dorëzoj formularin e hyrjes.

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

* Autentifikimi i Windows
* Forma
* Pasaportë

Autentifikimi i Windows:

Siç sugjeron emri, kjo metodë bazohet 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. Sidoqoftë, duhet të jeni shumë të kujdesshëm kur caktoni të drejtat e aksesit për përdoruesit, pasi po caktoni 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, që ndodhet 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 është krijuar 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 specifik vërtetimi
* WindowsIdentity – është gjithashtu një zbatim i ndërfaqes IIdentity, por gjithashtu përfshin metoda specifike vetëm 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, për shembull grupi Administratorët; për të hyrë në të, mund të përdorni vargun e lidhjes përmes WindowsIdentity: BUILTINAadministrators. Ose mund të specifikoni një grup të 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 ka kaluar vërtetimin apo jo, nëse ai është mysafir apo përdorues i sistemit.


Oriz. 1 – Objekti 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 për shkak të faktit se 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 specifik duke thirrur funksionin IsInRole, i cili ka sintaksën e mëposhtme:

Funksioni publik i tejkalueshëm 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ë moment 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 Projektuesi i 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 Faqe Private_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 Dim s si varg s = "

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

” & _ “

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

” & _ “

Është vërtetuar:" & HttpContext.Current.User.Identity.IsAuthenticated.ToString &"

” & _ “

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

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

Nëse u zgjodh mënyra e vërtetimit të Windows dhe cilësimet e IIS nuk shkaktuan ndonjë konflikt, atëherë do të merrni informacionin e duhur për 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 ta bë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 anonim dhe vërtetimi", kliko "Modifiko...
3. Në dritaren që shfaqet (Fig. 2), zgjidhni kutinë e hyrjes 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, ose vërtetimi i bazuar në cookie, siç quhet edhe ai, ka një sërë përparësish mbi vërtetimin e Windows.

* Së pari, ju keni mundësinë të përcaktoni pamjen e formularit të regjistrimit sipas shijes dhe ngjyrës tuaj ose sipas shijes dhe ngjyrës së përdoruesit në vend të të njëjtit lloj të dritares së regjistrimit në Windows.
* Së dyti, ju keni kontroll të plotë mbi informacionin që futni
* Informacioni i përdoruesit tani mund të ruhet jo vetëm në SAM ose Active Directory, por edhe në çdo ruajtje tjetër, në veçanti: një bazë të dhënash, 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ë parë, të gjitha informacionet e përdoruesit mund të vendosen në një dyqan të veçantë të dhënash pa asnjë mbivendosje 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ë ende nuk është vërtetuar ridrejtohen në faqen e regjistrimit, ku ai fut informacionin e nevojshëm ( zakonisht një emër përdoruesi dhe fjalëkalim). Informacioni i marrë transferohet në mjedisin ASP.NET, ku verifikohet. Nëse është i suksesshëm, përdoruesit i dërgohet një cookie që përmban një biletë Autorizimi, emrin e përdoruesit dhe çelësin për të marrë më vonë një identifikues. Si rezultat, të gjitha kërkesat e mëvonshme të shfletuesit do të përmbajnë informacione autorizimi në titujt, të cilët 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 ka kaluar vërtetimin do të duhet të bëhen manualisht, për shembull, në versionet e mëparshme të ASP, kjo është bërë duke përdorur një objekt Sesioni, 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 konfigurimin e projektit 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 i modalitetit të etiketimit përcakton metodën e vërtetimit. Në shembujt e mëparshëm kemi përdorur vlerën e Windows, e cila konfiguroi autentifikimin 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 skedarit të cookie-t në të cilin do të futen të dhënat 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'u regjistruar
* mbrojtje – pranon vlerat Të gjitha|Asnjë|Enkriptimi|Vleresimi dhe përcakton se si mbrohen të dhënat në cookies. Nga vlerat e pranueshme është e qartë se nuk mund të bëni asgjë me të dhënat e marra dhe t'i pranoni ato ashtu siç janë; ju mund t'i krahasoni ato; mund të kodohet; dhe është gjithashtu e mundur të kombinohet verifikimi me kriptografinë - kjo vlerë përdoret si parazgjedhje.
* timeout – përcakton periudhën kohore në sekonda gjatë së cilës cookie-t do të jenë të disponueshme
* shteg – 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ë rrugë, kështu që ndryshimi i këtij cilësimi mund të parandalojë që disa përdorues të jenë në gjendje të vërtetojnë.
* requireSSL – ky atribut merr vlerën True ose False (sipas parazgjedhjes) dhe vendos nevojën për të përdorur protokollin e prizave të sigurta (SSL – Secured Sockets Layer)
* SlidingExpiration - Tregon nëse cookie-t dhe kredencialet duhet të rigjenerohen nëse skadon afati. Pranon vlerat e vërtetë (e parazgjedhur) ose false.

Të gjitha atributet e mundshme të seksionit të formularëve u përshkruan më lart, 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ë kontrollon emrin e përdoruesit dhe fjalëkalimin e futur në skedarin XML. Për ta bërë këtë, së pari krijoni një skedar XML me emrin users.xml, i ngjashëm me sa vijon:
users.xml:

Gjoni një Majk dy Fature tre

Baza e përdoruesve është gati - tani mund të filloni të krijoni një projekt regjistrimi të përdoruesit provë. I gjithë kodi i nevojshëm jepet më poshtë:
Default.aspx:

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

Default.aspx.vb:

Importet 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 Faqe Private_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 '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. As System.Web.UI.WebControls.Label Protected WithEvents btnHyrja Si System.Web.UI.WebControls.Button #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 Faqe Private_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, xPa. Load(Server.MapPath(“users.xml”)) ' Aktivizoni XmlNodeReader xr = New XmlNodeReader(xd.Item(“perdoruesit”)) " Kërkoni përdoruesin e dëshiruar Ndërsa xr.Read If xr.Name = “emri” Dhe xr .NodeType = XmlNodeType.Element Pastaj sName = xr.ReadString " Nëse emri i përdoruesit është i gabuar, atëherë shkoni te një tjetër If sName<>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ërputhen, atëherë vërtetimi ishte i suksesshëm FormsAuthentication. ( txtName.Text, True) Përndryshe " Nëse jo, atëherë shkoni te një përdorues tjetër xr.Skip() End If End If End Ndërsa "Nëse kjo rresht është ekzekutuar, atëherë informacioni i përdoruesit është futur gabimisht lbl.Visible = True End Sub End Klasa

Le të bëjmë tani një "debriefing": 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 ka një të tillë, në ekran do të shfaqet një përshëndetje, 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 ai do të ridrejtohet në mënyrë të sigurt në faqen origjinale default.aspx, e cila, duke zbuluar se përdoruesi aktual ka një emër të përcaktuar, do ta mirëpresë atë.


Oriz. 3 – Të dhëna të pasakta të regjistrimit

Nëse e keni vërtetuar me sukses dhe shihni përshëndetjen, mbyllni dritaren e shfletuesit dhe provoni të hapni sërish faqen default.aspx. Do të shihni menjëherë një përshëndetje për përdoruesin, emrin e të cilit keni futur herën e fundit. Fakti është se gjatë regjistrimit kemi ruajtur një cookie në makinën e klientit. Kjo ndodhi në momentin kur ne thirrëm funksionin RedirectFromLoginPage në kod, duke i kaluar parametrit të tij CreatePersistentCookie vlerën True:

FormsAuthentication.RedirectFromLoginPage(txtName.Text, True)

Për të parandaluar dërgimin e cookie-t, thjesht telefononi këtë funksion me parametrin CreatePersistentCookie të vendosur në False. 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ë regjistrohet për të dalë.

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 zbatuar, pasi në këtë rast programuesi nuk ka nevojë të skanojë manualisht skedarin XML për ndeshjet e përputhshme - ai thjesht thërret një funksion të vetëm që zgjidh të gjithë problemin. Për të kuptuar parimin e funksionimit të këtij mekanizmi, le të kthehemi edhe një herë te skedari i konfigurimit, ose më mirë te etiketa e formave. Përveç atributeve të përshkruara më parë, kjo etiketë mund të përfshijë gjithashtu një seksion — certifikatat:
Web.config:

Siç mund të shihet 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 një nga algoritmet e hashimit, fjalëkalimi nuk mund të ruhet më në formën e tij origjinale në skedarin e konfigurimit - fillimisht duhet të hash dhe vetëm më pas t'i caktohet rezultati që rezulton në atributin e 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 të re të llogarive, le të kthehemi te aplikacioni i mëparshëm dhe të ndryshojmë kodin për mbajtësin e ngjarjeve të klikimit të butonit të regjistrimit në faqen 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 është gjetur në seksionin e certifikatave, atëherë "Forms" .RedirectFromLoginPage(txtName.Text, False) Përndryshe "Përndryshe, shfaq një mesazh gabimi lbl.Visible = Fundi i vërtetë Nëse Fundi Nën

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 kërkime në vetëm një pyetje që kthen E vërtetë ose e gabuar.

Ne nuk do të shqyrtojmë në mënyrë specifike një shembull të kodit që funksionon me fjalëkalime të hashuara tani, 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ë ruajtje tjetër të të dhënave të përdoruesit - 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 do të bazohet përsëri 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 mjetin SQL Query Analyzer dhe ekzekutoni kodin e mëposhtëm në të, të shkruar 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 ( IDENTITET (1, 1) NOT NULL, (50), (50), KUFIZIM KYÇI PRIMARER (CLUSION) Plotësoni tabelën 'Përdoruesit' INSERT NË Përdoruesit (Emri i Përdoruesit, Fjalëkalimi) VLERAT ('John', 'one') SHKO INSERT NË 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

Ekzekutimi i këtij kodi duhet të krijojë një bazë të dhënash në SQL Serverin tuaj të quajtur "FormAuthUsers" në të cilën 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ë faqen që do të punojë me të. Për ta bërë këtë, merrni 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 System.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 Faqe Private_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 EventArgs) Trajton btnLogin. Klikoni Dim cn si SqlConnection i ri(“server=localhost;database=FormAuthUssers;)w; Dim cm As New SqlCommand(“FindUser”, cn) Dim n As Integer " Hapni lidhjen Provoni cn.Open() Catch ex As SqlException Response.Write(ex.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.Tekst cm.Parameters.Add(prmFjalëkalimet e reja PrmName) "@ Fjalëkalimi" .RedirectFromLoginPage(txtName.Text, False) Përndryshe " nëse nuk ka njeri, atëherë ka një gabim lbl.Visible = Fundi i vërtetë Nëse cn.Close() Fundi Nën-Klasa e Fundit

Që kjo faqe të funksionojë siç duhet, ju lutemi sigurohuni që vargu i lidhjes përputhet me konfigurimin tuaj. Le të kuptojmë 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 lidhje e re Sql("server=localhost;baza e të dhënave=FormAuthUsers;uid=sa;pwd=;")

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

" Hapni 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 merr një mesazh përkatës dhe operacioni ndërpritet.

Më pas, objekti SqlCommand konfigurohet për të ekzekutuar procedurën e ruajtur dhe përgatiten parametrat për ta ekzekutuar atë. Për këto 7 rreshta kodi, sigurisht që ekziston një alternativë 1 rreshti 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 një komandë SQL që thërret një procedurë të ruajtur. Si rezultat, ju transferoni të dhëna shtesë përmes rrjetit në formën e një komande “exec”, e cila nga ana tjetër zë hapësirë ​​në trafikun e rrjetit; Sapo kjo kërkesë të arrijë në server, komanda "exec" së pari do të ekzekutohet dhe vetëm atëherë do të nisë procedura e ruajtur FindUser që na nevojitet. Përveç kësaj, 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, gjë që rezulton në dërgimin e më shumë informacioneve shtesë në trafikun e rrjetit. Duket se ky është një plus ose minus disa duzina bajt, por çfarë nëse duhet të punoni me kërkesa 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, pasi 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 hyrje-daljen e të dhënave në një formë të aksesueshme për përdoruesin; SQL Server kryen të gjitha operacionet e të dhënave; dhe IIS vepron si një ndërmjetës midis klientit dhe serverit - këtu keni një arkitekturë me tre nivele. Mos i ngarkoni makinat "delikate" të klientëve 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ë ta analizojmë atë: 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 merrni një vlerë skalare si rezultat, d.m.th një numër, i cili është pikërisht ajo që ndodh në procedurën tonë FindUser - ai kthen numrin e rekordeve që plotësojnë një kusht të caktuar:

Në fund të kodit, pasi kemi marrë numrin e regjistrimeve të gjetura, ne thjesht e analizojmë këtë vlerë dhe kryejmë operacionet e duhura.
Autentifikimin e formularit duke përdorur shërbimet e uebit:

Le të themi se punoni për organizatën XYZ. Ju keni ngarkuar të krijoni një aplikacion që menaxhon informacionin e personelit të organizatës suaj. Ju keni punuar në këtë projekt për 7 muaj dhe papritmas, për arsye sigurie, ju është ngarkuar të strehoni informacionin e përdoruesit në një server krejtësisht të ndryshëm me të cilin një departament tjetër në organizatën e 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, vendosëm t'ju lejojmë të zhvilloni një shërbim ueb përmes të cilit mund të kontrolloni vërtetimin e përdoruesit.

Kjo histori fiktive zbulon një mënyrë tjetër për të kryer vërtetimin - përdorimin e 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 uebit nuk janë të zbatueshme vetëm për aplikacionet në ueb, por ato mund të përdoren gjithashtu nga produkte softuerike që funksionojnë në një shumëllojshmëri të gjerë platformash. Kjo u bë e mundur falë përdorimit të 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 (Fig. 4).


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

Tani, duke përdorur kodin e mbajtësit të ngjarjeve të klikimit të butonit Regjistrohu nga shembulli i mëparshëm, ngjiteni 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 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 "Mund të modifikohet duke përdorur Dizajnuesin e Shërbimeve të Uebit." mos e modifikoni duke përdorur redaktuesin e kodit. Komponentët Private Sub InitializeComponent() = New System.ComponentModel.Container() Fundi i Mbingarkimeve të Mbrojtura nën Mbrojtje Anulon Sub Dispose(ByVal disposing As Boolean) "CODEGEN: Kjo procedurë kërkohet nga Projektuesi i Shërbimeve të Uebit "Mos e modifikoni duke përdorur redaktuesin e kodit. Nëse hidhet, atëherë nëse nuk (komponentët nuk janë asgjë) atëherë komponentët. Dispose() End If End If MyBase. Dispose(disposing) End Sub #End Region " Një funksion që kontrollon praninë e një përdoruesi me emrin e përdoruesit dhe fjalëkalimin e specifikuar Vërtetimi i funksionit publik (Emri i përdoruesit ByVal si varg, fjalëkalimi ByVal si varg, ByRef ErrMessage si varg) Si Dim Boolean cn Si SqlConnection i ri ("server=localhost;baza e të dhënave=FormAuthUsers;uid=sa;pwdComlmAsqdq") ("FindUser", cn) Dim n si numër i plotë " Hape 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 " Cakto llojin e 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.Parametrat "Prametrat.Named". prmPass = New SqlParameter(" @Password", SqlDbType.NVarChar, 50) prmPass.Value = Fjalëkalimi cm.Parameters.Add(prmPass) " Ekzekutoni kërkesën n = cm.ExecuteScalar " Mbyll lidhjen() "Analoszee rezultat Nëse n > 0 Pastaj " Nëse dikush u gjet, do të thotë se regjistrimi ishte i suksesshëm Kthehu True Tjetër " nëse askush nuk është aty, atëherë ka një gabim Kthehu False Fund Nëse Funksioni Fund Klasa e Fundit

Mund të kontrolloni funksionalitetin e shërbimit pa dalë nga arka; për ta bërë këtë, thjesht ekzekutoni atë në mjedisin Visual Studio .NET. Nëse nuk ka pasur gabime në shërbim, do të shihni një ekran para jush me 2 hiperlidhje. Njëra prej tyre çon në një përshkrim të një shërbimi ueb duke përdorur 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" për fjalëkalimin, funksioni do të kthehet i vërtetë:

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

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

Unë mendoj se nuk ka kuptim të analizojmë kodin e 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 një mesazh 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ë:.

" Hapni 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 një mesazh të përshtatshëm.


Oriz. 5 – Kontrollimi i funksionalitetit të shërbimit në ueb

Tani le të krijojmë një aplikacion që do të përdorë këtë shërbim Web, por këtë herë do të dalim 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 forma e treguar 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 References dhe zgjidhni 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 bëni një kërkim. Si rezultat, duhet të shihni diçka të ngjashme me Figurën 7.
5. Klikoni butonin Add Reference dhe në projektin tuaj do të shfaqet një lidhje me shërbimin e specifikuar në ueb.
6.


Oriz. 6 – Shembull i një aplikacioni testimi
Oriz. 7 – Rezultatet e kërkimit të shërbimit në ueb

Tani mund të filloni të shkruani kodin e programit që zbaton këtë shërbim Web. I gjithë kodi i nevojshëm jepet 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 është 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 Windows Form Designer "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.Madhësia(40, 16) Me.Label1.TabIndex = 0 Me.Label1.Text = "Emri:" ""Label2" 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 = Sistemi i ri.Vizatimi.Point(80, 37) Me.txtFjalëkalimi.N. txtPassword" Me.txtPassword.PasswordChar = Microsoft.VisualBasic.ChrW(42) Me.txtPassword.Size = New System.Drawing.Size(216, 20) Me.txtPassword.TabIndex = 3 Me.txt "Text" cmdExit " Me.cmdExit.DialogResult = System.Windows.Forms.DialogResult.Cancel Me.cmdExit.Location = New System.Drawing.Point(216, 72) Me.cmdExit.Name = "cmdExit" Me.cmdExit. System.Drawing.Size(80, 24) Me.cmdExit.TabIndex = 4 Me.cmdExit.Text = "Dalje" "cmdLogin " Me.cmdLogin.Location = System.Drawing.Point(128, 72) Me.cmdLogin .Name = "cmdLogin" Me.cmdLogin.Size = New System.Drawing.Size(80, 24) Me.cmdLogin.TabIndex = 5 Me.cmdLogin.Text = "Login" " "Form1" Me.AcceptButton = Me.cmdLogin Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.CancelButton = Me.cmdExit Me.ClientSize = New System.Drawing.Size(304, 103) Me.Controls.Add(Me.cmdLogin) Me.Controls .Add(Me.cmdExit) Me.Controls.Add(Me.txtPassword) Me.Controls.Add(Me.txtName) 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_C (Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton cmdLogin. Kliko " Vendos një referencë për objektin Dim au Si localhost i ri.Service1 Dim sErr As String, bln Si Boolean " Kontrollo Kursorin = Kursorët. WaitCursor bln = au.Authenticate(txtName.Text, txtPassword.Text, sErr) Cursor = Cursors.Default " - Por së pari, le të marrim parasysh përjashtimet e mundshme Nëse sErr<>"" Pastaj MsgBox(sErr) Dilni Sub End If " - Tani le të kalojmë te kontrolli kryesor If bln = True Pastaj MsgBox("Përshëndetje " & txtName.Text, MsgBoxStyle.Information) Tjetër MsgBox("Të dhëna të gabuara!", MsgBoxStyle .Thirrje ) Fund If End Sub Private Sub cmdExit_Click(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton cmdExit.Kliko End End Sub End Class

Në këtë shembull mund të shihni një kod shumë të thjeshtë, i cili përbëhet nga 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ë shkojmë shumë larg në braktisjen e 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 për objektin Set sc = Asgjë

Siç mund ta shihni, duke përdorur modelin e objektit SOAP, ju mund të hyni në shërbimet e Uebit duke përdorur një shumëllojshmëri të gjerë të gjuhëve programuese (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 ka kurthe të fshehura, para së gjithash, siguria e tyre. Shërbimet e uebit kanë një strukturë XML pa siguri, e cila mund të përgjohet për të kuptuar dhe marrë lehtësisht të dhënat e transmetuara. Për të eliminuar, ose më saktë për të zvogëluar gjasat e rrjedhjes së një informacioni të tillë, është e nevojshme të sigurohen shërbimet në internet. 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ë hyjnë në shërbimin tuaj të internetit, atëherë në këtë rast opsioni i përdorimit të rregullave të Firewall-it ë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 zbatueshme për rrjetet lokale, ku 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 Sigurisë dhe Përshpejtimit të Microsoft (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 transferohen midis serverit dhe klientit; të dhënat e marra më pas vërtetohen, duke kontrolluar nëse të dhënat kanë ardhur nga burimi i duhur. 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ë bien në duart e duhura, por nga ana tjetër, duhet të siguroheni që marrësi ka certifikatën e duhur. Pra, për të përdorur SSL ju duhet:

1. Merrni certifikatat: certifikatat janë komerciale dhe testuese. Dallimi midis tyre është se një tregtar do të regjistrohet zyrtarisht në emër të blerësit dhe, në përputhje me rrethanat, do të kushtojë para, ndërsa një provë 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. Konfiguroni serverin dhe instaloni certifikatat në shfletuesit e klientëve: më pas, për të vërtetuar me sukses kërkesat SSL, duhet të shtoni certifikata si në server ashtu edhe në makinat e klientit. Për më tepër, certifikatat e klientit nuk janë të destinuara për kompjuterin, por për shfletuesin, d.m.th., nëse përdoruesi përdor Internet Explorer dhe Netscape, këshillohet t'i lëshoni atij certifikata për të dy shfletuesit. Sidoqoftë, certifikatat e serverit janë të destinuara gjithashtu për lloje të ndryshme serverësh (Në Verisign mund të gjeni certifikata për më shumë se 50 lloje të serverëve), por i vetmi ndryshim është se, si rregull, ato nuk ndryshohen, 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ë zgjerim i një rrjeti lokal i bazuar në përdorimin e një rrjeti global, 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 ndërsa përdor internetin. Me këtë teknologji, ju mund të dërgoni të dhëna midis kompjuterëve përmes një lidhjeje të sigurt, sepse 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. Për komunikim, VPN funksionon me protokollet e mëposhtme: Microsoft Point-to-Point Tunneling Protocol (PPTP), i përfshirë me Windows NT 4.0 dhe Windows 2000, ose Layer Two Tunneling Protocol (L2TP), i disponueshëm në Windows 2000.
SHËNIM

Lista e sistemeve operative përkatëse tregon vetëm ato nga versionet e të cilëve këto protokolle u bënë të disponueshme, d.m.th., këto sisteme operative duhet të përfshijnë edhe versione të mëvonshme, 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 popullariteti i shërbimeve të ueb-it është rritur në qiell me ardhjen e .NET Framework dhe VS.NET. Por ne nuk do të shkojmë më në detaje, por do të kthehemi në rrjedhën kryesore të këtij artikulli. Ju mund t'i zotëroni lehtësisht të gjitha këto teknologji vetë. 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 përgjatë kursit të 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 identifikimi 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 secilën faqe veç e veç, gjë që shpesh ndodh kur llogaria me të cilën jeni mësuar tashmë është e zënë në një uebsajt të caktuar. Passport ju lejon të zgjidhni 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 suaj, duhet të ndiqni këto hapa:

1. Shkarkoni SDK-në e pasaportës .NET nga adresa 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, opsionet tuaja do të jenë jashtëzakonisht të kufizuara dhe nuk do të jeni në gjendje të merrni plotësisht rezultatin e pritur, për shembull, për t'u logout (d.m.th. të dilni) do t'ju duhet të mbyllni të gjitha dritaret e shfletuesit dhe më pas të fshini të gjitha skedarët e skedarëve cookie. me të dhënat e pasaportës

Ashtu si kur përdorni lloje të 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 të pasaportës, pas së cilës vendosim një parametër të vetëm që konfiguron vërtetimin e pasaportës - 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. Vërtetimi i pasaportës gjithashtu nuk bën përjashtim nga kjo listë, dhe mjeti që zbaton të gjitha vetitë kryesore është objekti System.Web.Security.PassportIdentity i .NET Framework.

Për të treguar një lidhje në faqen e regjistrimit, është zakon të përdorni një logo të specializuar që shkarkohet 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. Krijo një projekt të ri të tipit ASP.NET Web Application në VS.NET
2. Shtoni në të një Ueb User Control dhe emërtojeni passport.ascx
3. Zëvendësoni kodin e tij burimor me sa vijon:

passport.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() End Sub "SHËNIM: Deklarata e mëposhtme e mbajtësit të vendndodhjes kërkohet nga Designer Form Web. "Mos e fshini ose zhvendosni atë. Dizajner privatPlaceholderDeklarata As System.Object Nën Faqe Private_Init(Dërguesi ByVal As System.Object, ByVal e As System.EventArgs) Trajton MyBase.Init "CODEGEN: Kjo thirrje metodë kërkohet nga Dizajnuesi i Formave të Uebit "Mos e modifikoni duke përdorur redaktuesin e kodit . InitializeComponent() End 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 të dhëna për ID-në aktuale të përdoruesit = CType(context.User.Identity , PassportIdentity) " Shfaq butonin e regjistrimit Response.Write(id.LogoTag()) Fund Sub End Class 1. Pas kësaj, ndryshoni emrin e faqes së projektit Web 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

Të gjitha veprimet bazë për vërtetimin e përdoruesit merren nga objekti PassportIdentity, ose më mirë shërbimi i Microsoft Passport, të cilit .NET Framework i qaset duke përdorur objektin PassportIdentity. Kjo është arsyeja pse gjithçka që duhet të bëni është të korrni përfitimet, 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ë përdoruesin e regjistruar.

Emri i atributitPërshkrim
AksesueshmëriaPërcakton nëse opsionet e aksesueshmërisë duhet të lejohen për një të dhënë
përdorues në të gjitha sajtet e anëtarëve të Microsoft Passport
BDay_precisionPërcakton saktësinë e atributit Birthday
Data e lindjesPërmban datën ose vitin e lindjes së përdoruesit, në varësi të vlerës
Atributi BDay_precision
QytetiGeoID që ruan informacionin e vendndodhjes
përdorues
VendiKodi i vendit të përdoruesit ISO 3166
DrejtoriaNuk është ende në përdorim
EmriEmri i përdoruesit
FlamujtPërmban opsionet e profilit të përdoruesit
GjiniaPërcakton gjininë e përdoruesit
Lang_PreferenceGjuha kombëtare e përdoruesit LCID
MbiemriMbiemri i përdoruesit
AnëtarIDLartëIdentifikues unik i përdoruesit të nivelit të lartë PUID
Anëtar ID i ulëtIdentifikues unik i përdoruesit të nivelit të ulët PUID
Emri i AnëtaritPërmban emrin e përdoruesit dhe emrin e domenit të ndarë nga një shenjë "@".
PseudonimiPërdorues miqësor
ProfesioniPërmban disa informacione shtesë rreth përdoruesit, në
në veçanti lloji i veprimtarisë
Kodi PostarKodi postar i përdoruesit në SHBA ose në një vend tjetër
Email i preferuarAdresa e emailit të përdoruesit
Versioni i profilitVersioni i profilit të përdoruesit
RajonGeoID që tregon vendbanimin e përdoruesit në
vendi
Zona kohorePërcakton zonën kohore në të cilën banon përdoruesi
PortofoliPërcakton nëse përdoruesi e ruan pasaportën në
portofolin

Tabela 1 – Opsionet e profilit të përdoruesit

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

duke përdorur System.Web.Security; ... private void Page_Load(objekt dërgues, System.EventArgs e) ( PassportIdentity id; 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 sajteve kanë të njëjtin lloj paraqitjeje të faqeve të pranuara përgjithësisht, një pjesë integrale e së cilës është koka dhe fundi dhe, ndoshta...

Kontrolli i hyrjes

Kontrolli Login e bën të lehtë krijimin e një faqe identifikimi për vërtetimin e formularëve në lidhje me API-në e Anëtarësimit. Ai siguron një ndërfaqe përdoruesi të gatshme për përdorim që kërkon emrin dhe fjalëkalimin e përdoruesit dhe ofron një buton që përdoruesi të identifikohet. Prapa skenës, ai përmbledh funksionalitetin që u përshkrua në artikullin e mëparshëm: verifikimi i identiteteve të përdoruesve përmes API-së së Anëtarësimit dhe kapsulimi i funksioneve të vërtetimit të formave bazë, të tilla si ridrejtimi në faqen e kërkuar fillimisht në një zonë të sigurt të aplikacionit pas një suksesi. identifikimi.

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ë atë kod. Imazhi më poshtë tregon kontrollin e hyrjes në veprim:

Sa herë që përdoruesi klikon butonin Identifikohu, kontrolli verifikon automatikisht emrin e përdoruesit dhe fjalëkalimin duke përdorur funksionin Membership.ValidateUser() dhe më pas thërret FormsAuthenication.RedirectFromLoginPage() nëse verifikimi ë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 kontrollit Më mbaj mend herën tjetër, ajo do të kalojë vlerën e vërtetë në parametrin createPersistentCookie të metodës RedirectFromLoginPage(). Prandaj, FormsAuthenticationModule krijon një cookie të qëndrueshme.

Prapa skenave, Login është një kontroll i përbërë ASP.NET. Ai është plotësisht i shtrirë - në kuptimin që ju lejon të anashkaloni çdo stil dhe veçori të paraqitjes, si dhe të përgjoni ngjarjet e emetuara për të anashkaluar sjelljen e tij të paracaktuar. Nëse e lini kontrollin siç është dhe nuk përgjoni 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:

Ekzistojnë disa veçori të disponueshme 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 Login. Çdo veti e stilit 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ë është shtuar më parë në faqen e internetit. Le të supozojmë se skeda e mëposhtme e stilit CSS është shtuar në projekt, 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 Login
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, të tilla si në faqen fillestare të regjistrimit. Ky stil specifikon pamjen e lidhjeve të tilla

InstructionTextStyle

Kontrolli Login ju lejon të specifikoni tekstin e ndihmës që shfaqet direkt brenda kontrollit të hyrjes. Ky stil specifikon pamjen e këtij teksti

LabelStyle

Përcakton stilin për etiketat Emri i përdoruesit dhe 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 dhe fjalëkalimin e një përdoruesi

Ndërfaqja e përdoruesit të elementit Login nuk personalizohet vetëm përmes këtyre stileve; Vetitë e tjera shtesë synojnë pjesë specifike të përmbajtjes së kontrollit, siç është 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, pasi ndihma duhet t'u ofrohet edhe përdoruesve anonimë (mos harroni se nëse dikush sheh kontrollin e hyrjes, atëherë 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 shfaq dy lidhje shtesë, një në faqen e ndihmës dhe një në faqen fillestare të regjistrimit, dhe gjithashtu shton 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 më poshtë përshkruan vetitë e rëndësishme për konfigurimin e kontrollit Login:

Karakteristikat e rëndësishme për personalizimin e kontrollit të hyrjes
Prona Përshkrim
Teksti i mesazhit
TitulliText

Teksti për t'u 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 që shfaqet poshtë titullit të kontrollit

FailureText

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 për të mbushur 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 fut 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 imazhi

Faqja e hyrjes
DestinationPageUrl

Nëse përpjekja për hyrje është e suksesshme, kontrolli Login 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 opsione të vlefshme janë Refresh dhe RedirectToLoginPage. Vlera e parë bën që vetëm faqja aktuale të rifreskohet, ndërsa e dyta shkakton një ridrejtim në faqen e konfiguruar të hyrjes. Opsioni i dytë është i dobishëm nëse kontrolli Login përdoret diku tjetër nga faqja e hyrjes

VisibleWhenLoggedIn

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

Vendosja e një etikete "Më mbaj mend".
DisplayRememberMe

Ju lejon të shfaqni ose fshehni kutinë e zgjedhjes Më mbaj mend herën tjetër. Si parazgjedhje kjo veti është caktuar në true

RememberMeSet

Përcakton vlerën e paracaktuar të kutisë së zgjedhjes Më mbaj mend herën tjetër. Si parazgjedhje, kjo veti është vendosur 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. Pra, kjo zakonisht përdoret për të lejuar hyrjen e përdoruesit në faqen fillestare të regjistrimit. Zakonisht kjo do të shfaqë kontrollin CreateUserWizard

CreateUserText
CreateUserIconUrl

URL-ja e grafikës që shfaqet së bashku 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 që shfaqet 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 ai shfaq kontrollin PasswordRecovery

PasswordRecoveryText
PasswordRecoveryIconUrl

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

Modelet dhe kontrolli i hyrjes

Siç mund ta shihni, të gjitha këto veti e bëjnë kontrollin Login shumë të personalizueshëm. Por siç e keni vënë re me shumë mundësi, është e pamundur të përcaktohet ndonjë shprehje për të kontrolluar vlefshmërinë e hyrjes. Sigurisht, është e mundur të zbatohet vlefshmëria 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ë paraqitura më sipër. 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 një fjalëkalim të personalizuar, siç bëjnë disa sajte qeveritare?

Për fat të mirë, si kontrollet e tjera si GridView, elementi Login mbështet shabllonet. Modelet ju lejojnë të personalizoni përmbajtjen e kontrollit të hyrjes pa asnjë kufizim. Mund të shtoni çdo kontroll të ri në të. Zbaton një shabllon të veçantë në kontrollin e hyrjes 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 personalizimi i një shablloni përfshin shkrimin e kaq shumë kodeve të UI (ose dizajnimin e tij në një projektues vizual), pse të mos shkruani faqen tuaj të hyrjes pa përdorur një kontroll të hyrjes?

Kjo është një pyetje e vlefshme. Megjithatë, siç u shpjegua më herët, pjesa e përparme është vetëm një pjesë e elementit Login. Për shembull, kur një përdorues klikon një buton identifikimi, 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 e ridrejton përdoruesin në faqen origjinale që ai ka kërkuar përmes infrastrukturës së vërtetimit të formularëve. Kështu që ju jeni të kursyer patjetër nga mundimi për të shkruar këtë kod.

Me kontrollet e duhura dhe vlerat e sakta të ID-së për ato kontrolle, nuk do t'ju duhet të shkruani kodin e trajtimit të ngjarjeve. Kodi funksionon si zakonisht, përveç se ju përcaktoni një grup kontrollesh dhe paraqitjen e tyre. Në realitet, kontrolli Login kërkon të paktën dy fusha teksti me identifikuesit 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 jepni 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 sikur të ishte aplikuar 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 kërkesës:

Kontrolli 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ë përpunimit të ngjarjeve. Nëse nuk shtoni një kontroll me veçorinë CommandName të vendosur te Identifikohu, 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 identifikues të tjerë që nuk kanë të bëjnë fare me Login. Kodi i paraqitur më sipër përdori elementet RequiredFieldValidator dhe RegularExpressionValidator për të vërtetuar fushat e emrit të përdoruesit dhe fjalëkalimit.

Kur përdorni një LayoutTemplate, shumë nga vetitë origjinale të kontrollit nuk janë më të disponueshme. 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 veçori të cilësimeve të përmbajtjes së tekstit të elementit të paracaktuar nuk janë më të disponueshme në Redaktuesin e Vetive të Visual Studio sepse ato mund të shtohen manualisht si kontrolle individuale ose si tekst statik në shabllonin e elementit Login. Nëse i shtoni ato në elementin Login në modalitetin e shabllonit, ato thjesht do të injorohen sepse shablloni anashkalon ndërfaqen e paracaktuar të elementit Login, i cili 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 sigurojnë kontroll të plotë mbi rregullimin e saktë të kontrollit të hyrjes (së bashku me mjete të tjera personalizimi si shabllonet dhe vetitë e stilimit). Kontrolli Login mbështet ngjarjet e renditura në tabelën e mëposhtme:

Ngjarjet e kontrollit të hyrjes
Ngjarje Përshkrim
Hyrja

Aktivizohet pak përpara se kontrolli të vërtetojë përdoruesin

I identifikuar

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

Gabim identifikimi

Aktivizohet kur përpjekja për t'u identifikuar nga një përdorues dështon për ndonjë arsye (si p.sh. një fjalëkalim ose emër përdoruesi i pasaktë)

Autentifiko

Aktivizohet 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 se përdoruesi të vërtetohet, pasi përdoruesi të vërtetohet 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ë një faqe të 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 përpjekjeve të dështuara për hyrje int ErrorCount = (int)ViewState["Gabimet e hyrjes"] + 1; ViewState["Gabimet e hyrjes "] = Numri i gabimeve; // Kontrolloni numrin e përpjekjeve të dështuara nëse ((ErrorCount > 3) && (Login1.PasswordRecoveryUrl != string.Empty)) Response.Redirect(Login1.PasswordRecoveryUrl); )

Kontrolli Login gjeneron ngjarje sipas rendit të treguar në figurën më poshtë:

Siç u përmend më herët, nëse përgjoni ngjarjen Authenticate, duhet të shtoni emrin tuaj të përdoruesit dhe kodin e verifikimit të fjalëkalimit. Prona Autentifiko mbështet 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 ndez ngjarjen LoggedIn. Nëse e vendosni këtë veti në false, do të shfaqet 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 = true; ) 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 po përdorni kontrollet e shabllonit dhe dëshironi të merrni një vlerë nga një element tjetër përveç elementeve Emri i Përdoruesit dhe Fjalëkalimi, 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 kërkuar nga metoda e personalizuar e verifikimit të identitetit të përdoruesit.

  • Tutorial

Qëllimi i mësimit: Studioni metodën e autorizimit përmes Cookie, përdorimin e atributeve standarde të aksesit në metodën e kontrolluesit dhe kontrolluesit. Duke përdorur IPprincipal. Krijimi i modulit tuaj (IHttpModule) dhe IActionFilter-it tuaj.

Një digresion i vogël: Në fakt, në asp.net mvc, të gjithë tekstet rekomandojnë përdorimin e një sistemi autorizimi të shpikur tashmë të quajtur AspNetMembershipProvider, u përshkrua në artikullin http://habrahabr.ru/post/142711/ (qasja tani është e mbyllur), por shpjegoi se kjo është nga këndvështrimi i "shtypni dhe mos e kuptoni se çfarë ka brenda". Kur u njoha për herë të parë me asp.net mvc, kjo më ngatërroi. Më tej, në këtë artikull http://habrahabr.ru/post/143024/ thuhet se nuk mund ta përdorni këtë ofrues. Dhe unë jam dakord me këtë. Këtu, ne studiojmë mjaft thellë të gjitha llojet e teknikave të ndërlikuara standarde asp.net mvc, kështu që ky është një nga mësimet kryesore.

Biskota
Cookies janë një pjesë e informacionit të dërguar nga serveri në shfletues, të cilin shfletuesi i kthen përsëri në server së bashku me çdo (pothuajse çdo) kërkesë.

Serveri shkruan në kokën e përgjigjes:
Set-Cookie: vlera[; skadon=data][; domain=domain][; shteg=rrugë][; i sigurt]
Për shembull:

HTTP/1.1 200 OK Lloji i përmbajtjes: tekst/html Set-Cookie: emri=vlera Set-Cookie: emri2=vlera2; Skadon=e mërkurë, 09-qershor-2021 10:18:14 GMT
Shfletuesi (nëse cookie nuk ka skaduar) për çdo kërkesë:
GET /spec.html HTTP/1.1 Host: www.example.org Cookie: name=value; name2=value2 Prano: */*

Cakto cookie (/Areas/Default/Controllers/HomeController.cs):
public ActionResult Index() ( var cookie = new HttpCookie() ( Emri ="test_cookie", Vlera = DateTime.Now.ToString("dd.MM.vvvv"), Expires = DateTime.Now.AddMinutes(10), ); Response.SetCookie(cookie); kthimi View(); )

Në Chrome ne kontrollojmë instalimin:

Për të marrë cookie:
var cookie = Kërkesë.Cookies["test_cookie"];

Le të bëjmë një pikë ndërprerjeje dhe të kontrollojmë:

Shënim: Mund të mësoni më shumë rreth cookies në lidhjen e mëposhtme:
http://www.nczonline.net/blog/2009/05/05/http-cookies-explained/

Autorizimi
Në rastin tonë, autorizimi do të bazohet në përdorimin e cookies. Për ta bërë këtë, le të studiojmë dispozitat e mëposhtme:
  • FormsAuthenticationTicket– ne do ta përdorim këtë klasë për të ruajtur të dhënat e autorizimit në formë të koduar
  • Duhet të implementojmë një ndërfaqe Kryesorja dhe vendoseni në HttpContext.User për të kontrolluar rolet dhe ndërfaqen IIdentity.
  • Për ndërfaqen Identiteti të bëjë një zbatim
  • Prodhimi në BaseController ndaj pronës Përdoruesi aktual vlera e përdoruesit që është aktualisht i identifikuar.

Le të fillojmë.
Le të krijojmë ndërfaqen e IAuthentication dhe zbatimin e saj CustomAuthentication (/Global/Auth/IAuthentication.cs):

Autentifikimi i ndërfaqes publike ( ///

/// Konteksti (këtu kemi akses në kërkesën dhe cookies) /// HttpContext HttpContext ( get; set; ) Hyrja e përdoruesit (hyrja e vargut, fjalëkalimi i vargut, bool është e vazhdueshme); Hyrja e përdoruesit (hyrja në varg); void LogOut(); Përdoruesi kryesor aktual (merr;))

Implementimi (/Global/Auth/CustomAuthentication.cs):
klasë publike CustomAuthentication: IAuthentication ( privat statik NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); emri i cookie-it të vargut privat = "__AUTH_COOKIE"; publik HttpContext HttpContext (merr; vendos; Identifikimi i anëtarëve të IA-s Identifikimi publik i përdoruesit (emri i përdoruesit të vargut, fjalëkalimi i vargut, bool është i vazhdueshëm) ( Përdoruesi retUser = Repository.Login (Emri i përdoruesit, Fjalëkalimi); nëse (retUser != null) ( CreateCookie (username, is Persistent); ) ktheni përdoruesin publik; Identifikohu (emri i përdoruesit të vargut) ( Përdoruesi retUser = Repository.Users.FirstOrDefault (p => string. Krahasimi (p.Email, emri i përdoruesit, i vërtetë) == 0); nëse (retUser != null) ( CreateCookie (username); ) kthe retUser; ) zbrazëti private CreateCookie(string Emri i përdoruesit, bool është Persistent = false) ( var biletë = new FormsAuthenticationTicket(1, emri i përdoruesit, DateTime. Tani, DateTime.Now.Add(FormsAuthentication.Timeout), isPersistentAuthentication.Timeout), isPersistentAmphentice. ); // Enkriptoni biletën. var encTicket = FormsAuthentication.Encrypt(ticket); // Krijo cookie. var AuthCookie = i ri HttpCookie(Emri i kukit) (Vlera = encTicket, Skadon = DateTime.Now.Add(FormsAuthentication.Timeout) ); HttpContext.Response.Cookies.Set(AuthCookie); ) publik void LogOut() ( var httpCookie = HttpContext.Response.Cookies; nëse (httpCookie != null) ( httpCookie.Value = string.Empty; ) ) Principal IP privat _currentUser; IPPrincipal CurrentUser publik ( merrni ( nëse (_currentUser == null) ( provoni ( HttpCookie authCookie = HttpContext.Request.Cookies.Get(cookieName); nëse (authCookie != null && !string.IsNullOrEmpty)(Vuealth)(Vuealth) = FormsAuthentication.Decrypt(authCookie.Value); _currentUser = Ofruesi i ri i Përdoruesit (Bileta. Emri, Depoja); ) tjetër ( _currentUser = Ofruesi i ri i Përdoruesit (null, null); ) ) kapja (Exception ex) (logger.Gabim ("Vërtetimi dështoi : " + ex.Message); _currentUser = Përdoruesi i ri (null, null); ) ) kthen _currentUser; ) ) #endregion )

Në fund të fundit është kjo: kur inicializojmë kërkesën, ne hyjmë në HttpContext.Request.Cookies dhe inicializojmë UserProvider:

Var bileta = FormsAuthentication.Decrypt(authCookie.Value); _currentUser = Ofruesi i ri i Përdoruesit (Bileta. Emri, Depoja);

Për autorizimin në IRepository, është shtuar një metodë e re IRepository.Login. Zbatimi në SqlRepository:
Identifikimi publik i përdoruesit (email vargu, fjalëkalimi i vargut) ( ktheni Db.Users.FirstOrDefault(p => string. Krahasoni (p.Email, email, i vërtetë) == 0 && p. Fjalëkalimi == fjalëkalimi); )

UserProvider në të vërtetë zbaton ndërfaqen IPrincipal (e cila ka kontrollimin e roleve dhe aksesin në IIdentity).
Merrni parasysh klasën UserProvider (/Global/Auth/UserProvider.cs):

Klasa publike UserProvider: IPrincipal ( private UserIndentity userIdentity ( get; set; ) #region IPrincipal Members public IIdentity Identity ( get ( return userIdentity; ) ) bool publik IsInRole (roli i vargut) ( if (userIdentity.User == null) ( kthe false ; ) kthe userIdentity.User.InRoles(role); ) #endregion public UserProvider(emri i vargut, depoja IRepository) (UserIdentity = UserIndentity i ri(); userIdentity.Init(emri, depo); ) vargu publik i anashkalimit ToString() (kthimi userIdentity.Emri;)

Ofruesi ynë i Përdoruesit e di që klasa e tij IIdentity është UserIdentity, dhe për këtë arsye di për klasën User, brenda së cilës ne implementojmë metodën InRoles(role):

bool publik InRoles(rolet e vargut) ( if (string.IsNullOrWhiteSpace(rolet)) ( kthen false; ) var rolesArray = roles.Split(new ( "," ), StringSplitOptions.RemoveEmptyEntries); foreach (roli var në rolesArray) ( var hasRole = UserRoles.Any(p => string. Krahaso (p.Role.Code, role, true) == 0); if (hasRole) (ktheje true; ) ) kthe false; )

Në metodën InRoles, ne presim që të vijë një kërkesë në lidhje me rolet që lejohen në burim, të ndara me presje. Kjo është, për shembull, "admin, moderator, redaktues", nëse Përdoruesi ynë ka të paktën një nga rolet, atëherë ne kthejmë vlerën "e vërtetë" (ka qasje). Ne krahasojmë nga fusha Role.Code, jo Role.Name.
Merrni parasysh klasën UserIdentity (/Global/Auth/UserIdentity.cs):
klasë publike UserIndentity: IIdentity ( Përdoruesi publik i Përdoruesit ( merrni; vendos; ) varg publik AuthenticationType ( get ( return typeof(User).ToString(); ) ) bool publik IsAuthenticated (merr (ktheje Përdoruesin != null;)) vargu publik Emri ( get ( if (User != null) ( return User.Email; ) //tjetër kthim anonim "anonim"; ) ) public void Init(string email, IRepository depo) ( if (!string.IsNullOrEmpty(email)) ( Përdoruesi = depo. GetUser (email); ) ) )
Ne shtojmë një metodë të re GetUser(email) në IRepository. Implementimi për SqlRepository.GetUser() (LessonProject.Model:/SqlRepository/User.cs):

Përdoruesi publik GetUser (email vargu) ( ktheni Db.Users.FirstOrDefault(p => string. Krahasoni (p.Email, email, i vërtetë) == 0); )

Pothuajse gjithçka është gati. Le të shfaqim CurrentUser në BaseController:
Vërtetimi i IAutentifikimit publik (merr; vendos;) Përdoruesi publik aktualPërdoruesi (merr (kthimi ((UserIdentity)Auth.CurrentUser.Identity).Përdoruesi;) )

Po, kjo nuk është shumë e saktë, pasi ka një lidhje të fortë të përfshirë. Prandaj, le ta bëjmë këtë, të prezantojmë një ndërfaqe tjetër IUserProvider, nga i cili do të kërkojmë që Përdoruesi i autorizuar të na kthehet:
ndërfaqe publike IUserProvider ( Përdoruesi i përdoruesit ( merrni; vendos; ) ) ... klasë publike UserIndentity: IIdentity, IUserProvider ( ///

/// Përdoruesi aktual /// Përdoruesi publik i Përdoruesit ( merr; vendos; ) ... Vërtetimi i IA-së publike (merr; vendos; ) Përdoruesi publik aktualPërdoruesi (merr (kthimi ((IUserProvider)Auth.CurrentUser.Identity).Përdoruesi;) )
Tani le të përpiqemi t'i inicializojmë të gjitha.
Së pari, le të shtojmë IAuthentication + CustomAuthentication në regjistrimin e Ninject (/App_Start/NinjectWebCommon.cs):

Kernel.Lidh ().Të ().InRequestScope();

Pastaj ne do të krijojmë një modul që do të kryejë një veprim autorizimi në ngjarjen AuthenticateRequest:
klasa publike AuthHttpModule: IHttpModule ( public void Init(HttpApplication kontekst) (contekst.AuthenticateRequest += new EventHandler(this.Authenticate); app.Context;var auth = DependencyResolver.Current.GetService (); auth.HttpContext = kontekst; kontekst.Përdoruesi = auth.Përdoruesi aktual; ) boshllëk publik Dispon () ( ) )

E gjithë kripa është në rreshtat: auth.HttpContext = konteksti dhe konteksti. Përdoruesi = auth.Përdoruesi aktual . Sapo moduli ynë i autorizimit mëson rreth kontekstit dhe cookies që ai përmban, ai menjëherë fiton akses në emër, duke e përdorur atë, merr të dhënat e përdoruesit në depo dhe i kthen ato në BaseController. Por jo gjithçka menjëherë, por sipas kërkesës.
Ne e lidhim modulin në Web.config:

Plani është:

  • Në krye tregojmë nëse përdoruesi është i autorizuar apo jo. Nëse autorizohet, atëherë emaili i tij dhe një lidhje për të dalë, nëse jo, atëherë lidhjet për të hyrë dhe regjistruar
  • Krijimi i një formulari identifikimi
  • Nëse përdoruesi i ka futur saktë të dhënat, ne e autorizojmë atë dhe e dërgojmë në faqen kryesore
  • Nëse përdoruesi del jashtë, atëherë ne e vrasim autorizimin e tij

Shkoni. Shto Html.Action ("UserLogin", "Home") - kjo është një pamje e pjesshme (d.m.th. një pjesë e kodit që nuk ka një Layout) - d.m.th. shfaqet aty ku është regjistruar, dhe jo në RenderBody().
_Layout.cshtml (/Areas/Default/Views/Shared/_Layout.cshtml):

@RenderBody() HomeController.cs: Publike ActionResult UserLogin() (ktheje pamjen(Përdoruesi aktual); )

UserLogin.cshtml (/Areas/Default/Views/Home/UserLogin.cshtml):

@model LessonProject.Model.User @if (Model != null) (

  • @Model.Email
  • @Html.ActionLink ("Dalje", "Dalje", "Identifikohu")
  • ) tjeter (
  • @Html.ActionLink ("Hyrja", "Indeksi", "Hyrja")
  • @Html.ActionLink ("Regjistrim", "Regjistrohu", "Përdorues")
  • }

    LoginController Login/Output Controller (/Areas/Default/Controllers/LoginController.cs):

    Klasa publike LoginController: DefaultController ( publik ActionResult Index() ( kthimi Pamja (i ri LoginView()); ) publik ActionResult Index(LoginView loginView) ( if (ModelState.IsValid) ( var user = Auth.View(loginView.Email,. Fjalëkalimi, loginView.IsPersistent); nëse (përdoruesi != null) (kthehu RedirectToAction("Index", "Home"); ) ModelState["Fjalëkalimi"].Errors.Add("Fjalëkalimet nuk përputhen"); ) kthehu Pamja ( loginView); ) publik ActionResult Logout() ( Auth.LogOut(); kthimi RedirectToAction ("Index", "Home"); ) )

    LoginView.cs (/Models/ViewModels/LoginView.cs):
    klasë publike LoginView ( varg publik Email (merr; vendos; ) varg publik Fjalëkalimi (merr; vendos;) bool publik IsPersistent (merr; vendos;)

    Faqja e hyrjes Index.cshtml (/Areas/Default/Views/Index.cshtml):

    @model LessonProject.Models.ViewModels.LoginView @( ViewBag.Title = "Identifikohu"; Layout = "~/Areas/Default/Views/Shared/_Layout.cshtml"; } !}

    Hyrja

    @using (Html.BeginForm("Index", "Login", FormMethod.Post, new ( @class = "form-horizontal" ))) (
    Hyrja
    @Html.TextBox("Email", Model.Email, i ri ( @class = "input-xlarge" ))

    Futni Email

    @Html.ValidationMessage ("Email")
    @Html.Password("Fjalëkalimi", Model.Password, i ri ( @class = "input-xlarge" )) @Html.ValidationMessage("Fjalëkalimi")
    }

    Le të vrapojmë dhe të kontrollojmë:

    Të gjitha burimet gjenden në

    Përditësimi i fundit: 10/31/2015

    Lëshimi i ASP.NET MVC 5 u shënua nga lëshimi i një sistemi të ri autorizimi dhe vërtetimi në aplikacionet .NET të quajtur ASP.NET Identity. Ky sistem zëvendëson ofruesit e anëtarësimit të thjeshtë që u prezantuan në ASP.NET MVC 4.

    Duke klikuar në butonin Change Authentication, ne mund të ndryshojmë llojin e vërtetimit duke zgjedhur një nga sa vijon:

      Pa Autentifikim: Identiteti ASP.NET dhe nuk ka asnjë sistem vërtetimi të integruar

      Llogaritë individuale të përdoruesve: Projekti si parazgjedhje përfshin sistemin ASP.NET Identity, i cili ju lejon të autorizoni përdoruesit brenda aplikacionit dhe përdorimin e shërbimeve të jashtme si Google, Twitter, etj.

      Llogaritë Organizative: të përshtatshme për faqet e internetit dhe aplikacionet në internet të kompanive dhe organizatave individuale

      Autentifikimi i Windows: një sistem vërtetimi për rrjetet intranet që përdorin llogaritë e Windows

    Le të lëmë vlerën e paracaktuar, domethënë Llogaritë e Përdoruesve Individualë dhe të krijojmë një projekt.

    Projekti i krijuar tashmë si parazgjedhje ka të gjithë infrastrukturën e nevojshme për autorizim: modele, kontrollues, pamje. Nëse shikojmë nyjen Referenca, do të shohim një numër bibliotekash kryesore atje, të cilat përmbajnë klasat e nevojshme për autorizim dhe vërtetim:

    Këto janë një numër bibliotekash OWIN që shtojnë funksionalitetin OWIN në projekt, si dhe tre biblioteka të vetë ASP.NET Identity:

      Microsoft.AspNet.Identity.EntityFramework: përmban klasa Entity Framework që përdorin ASP.NET Identity dhe komunikojnë me SQL Server

      Microsoft.AspNet.Identity.Core: Përmban një numër ndërfaqesh kyçe të identitetit ASP.NET. Zbatimi i këtyre ndërfaqeve do t'ju lejojë të shkoni përtej MS SQL Server dhe të përdorni DBMS të tjera, duke përfshirë sistemet NoSQL, si ruajtje llogarie

      Microsoft.AspNet.Identity.OWIN: Sjell vërtetimin OWIN në një aplikacion ASP.NET MVC duke përdorur ASP.NET Identity

    Meqenëse e gjithë infrastruktura është tashmë në projekt, le të hapim projektin dhe të gjejmë një lidhje në faqen e shfaqur në shfletues Regjistrohu dhe klikoni mbi të. Në faqen e regjistrimit që hapet, vendosni disa të dhëna:

    Pas regjistrimit, identifikimi do të shfaqet në këndin e sipërm të djathtë të faqes së internetit të aplikacionit në internet. Pasi të kemi përfunduar regjistrimin, ne mund të dalim duke klikuar në LogOff dhe të identifikohemi përsëri. Kështu, tashmë mund të fillojmë të përdorim sistemin e integruar të vërtetimit në një aplikacion ASP.NET MVC 5. Tani le të shohim pikat kryesore të tij.

    Së pari, ku ruhet e gjithë kjo? Ku shkojnë të dhënat e përdoruesve të regjistruar?

    në këtë rast Përdoret qasja e Kodit të Parë. Skedari web.config tashmë ka një varg lidhjeje të paracaktuar që specifikon direktorinë e bazës së të dhënave. Nëse zgjerojmë dosjen App_Data, mund të shohim bazën e të dhënave të krijuar:

    Nëse papritmas baza e të dhënave nuk është e dukshme në dosje, klikoni në butonin Show All Files në krye të dritares së Solution Explorer.

    Ne mund ta hapim këtë bazë të dhënash në dritaren e Server Explorer dhe të shohim përmbajtjen e saj:

    Si parazgjedhje, kur përdoruesi i parë regjistrohet, krijohet grupi i mëposhtëm i tabelave:

      MigrationHistory: përdoret nga EntityFramework për migrimet e bazës së të dhënave

      AspNetRoles: përmban përkufizime të roleve

      AspNetUserClaims: tabelë që ruan një grup pretendimesh. Pretendimi paraqet një model të ndryshëm autorizimi në krahasim me rolet. Përafërsisht, një pretendim përmban disa informacione rreth përdoruesit, për shembull, adresën e emailit, hyrjen, moshën, etj. Dhe ky informacion ju lejon të identifikoni përdoruesin dhe t'i caktoni atij të drejtat e duhura të aksesit.

      AspNetUserLogins: tabela e hyrjeve të përdoruesve

      AspNetUserRoles: tabelë që përcakton role specifike për përdoruesit

      AspNetUsers: tabela aktuale e përdoruesve. Nëse e hapim, do të shohim të dhënat e përdoruesit të regjistruar

    Objektet kryesore në AspNet Identity janë përdoruesit dhe rolet. I gjithë funksionaliteti për krijimin, fshirjen e përdoruesve dhe ndërveprimin me dyqanin e përdoruesve ruhet në klasën UserManager. Për të punuar me rolet dhe menaxhimin e tyre, AspNet Identity përcakton klasën RoleManager. Klasat UserManager dhe RoleManager ndodhen në bibliotekën Microsoft.AspNet.Identity.Core.

    Çdo përdorues në një UserManager përfaqëson një objekt ndërfaqeje IUser. Dhe të gjitha operacionet e menaxhimit të përdoruesit kryhen përmes hapësirës ruajtëse të përfaqësuar nga objekti IUserStore.

    Çdo rol përfaqëson një implementim të ndërfaqes IRole dhe rolet menaxhohen nga klasa RoleManager përmes IRoleStore.

    Një zbatim i drejtpërdrejtë i ndërfaqeve IUser, IRole, IUserStore dhe IRoleStore ofrohet nga hapësira e emrave Microsoft.AspNet.Identity.EntityFramework:

    Klasa IdentityUser është një implementim i ndërfaqes IUser. Dhe klasa e dyqanit të përdoruesve - UserStore - zbaton ndërfaqen IUserStore.

    Në mënyrë të ngjashme, klasa IdentityRole zbaton ndërfaqen IRole dhe klasa e ruajtjes së roleve RoleStore zbaton ndërfaqen IRoleStore.

    Dhe për të bashkëvepruar me bazën e të dhënave, klasa e kontekstit IdentityDbContext përcaktohet në hapësirën e emrave të Microsoft.AspNet.Identity.EntityFramework

    Në një aplikacion ASP.NET MVC, ne nuk do të punojmë drejtpërdrejt me klasat IdentityUser dhe IdentityDbContext. Si parazgjedhje, një skedar i shtohet projektit në dosjen Models IdentityModels.cs, i cili përmban përkufizime të klasave të përdoruesve dhe kontekstit të të dhënave:

    Klasa publike ApplicationUser: IdentityUser (Detyrë publike asinkronike GenerateUserIdentityAsync(UserManager menaxher) ( var userIdentity = prit menaxher.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); kthe userIdentity; ) ) klasa publike ApplicationDbContext: IdentityDbContext ( publik ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) ( ) publik statik ApplicationDbContext Create() (ktheje ApplicationDbContext të ri(); ) )

    Në aplikacion, ne nuk punojmë drejtpërdrejt me klasat IdentityUser dhe IdentityDbContext, por më tepër merremi me klasa pasardhëse.

    Klasa ApplicationUser trashëgon të gjitha vetitë nga IdentityUser. Dhe gjithashtu shton një metodë GenerateUserIdentityAsync(), e cila krijon një objekt ClaimsIdentity duke thirrur UserManager.CreateIdentityAsync. Ky objekt përmban informacione për këtë përdorues.

    Kjo arkitekturë ju lejon të merrni funksione të gatshme dhe, nëse është e nevojshme, të shtoni një të re, për shembull, të shtoni një pronë të re për përdoruesin ose të shtoni një tabelë të re në bazën e të dhënave.

    Unë nuk do të përshkruaj në detaje të gjithë funksionalitetin e AspNet Identity, i cili i shtohet projektit si parazgjedhje; Unë do të përshkruaj shkurtimisht vetëm aftësitë kryesore.

    Së pari, për të aktivizuar AspNet Identity, dy skedarë i shtohen projektit në dosjen App_Start. Skedari Startup.Auth.cs përmban klasën e lëshuesit të aplikacionit OWIN. Meqenëse AspNet Identity përdor infrastrukturën OWIN, kjo klasë është një nga kryesoret dhe të nevojshme për punë.

    Skedari IdentityConfig.cs përmban një numër klasash ndihmëse shtesë: shërbime për vërtetimin me dy faktorë duke përdorur email dhe telefon EmailService dhe SmsService, klasën e menaxherit të përdoruesit ApplicationUserManager, e cila shton një numër funksionesh shtesë në UserManager dhe klasën ApplicationSignInManager, që përdoret për të hyrë dhe dalë. të faqes.

    Funksionaliteti kryesor i sistemit të vërtetimit dhe menaxhimit të llogarisë është i vendosur në dy kontrollues: AccountController dhe ManageController

    AccountController përcakton metodat për hyrjen, regjistrimin, verifikimin e një kodi të dërguar me email ose SMS, rivendosjen e fjalëkalimit, kujtesën e fjalëkalimit, hyrjen në sit duke përdorur shërbime të jashtme. Kontrolluesi ManageController përdoret për të menaxhuar llogarinë dhe ofron mundësinë për të ndryshuar fjalëkalimin dhe për të menaxhuar numrat e telefonit në sistem. Për të dy kontrollorët, të gjitha pamjet e nevojshme dhe modelet e veçanta të pamjes gjenerohen si parazgjedhje.

    Përkundër faktit se si parazgjedhje ne jemi tashmë të pajisur me funksionalitet të gatshëm, në disa raste, për shembull, për të dërguar SMS ose email, kërkohet konfigurim shtesë. Tani le të shohim pikat kryesore të sistemit AspNet Identity.

    Artikujt më të mirë mbi këtë temë