אינך במצב לא מקוון כעת, ממתין לחיבור לאינטרנט

כיצד ליישם באימות מבוסס טפסים ביישום ASP.NET באמצעות C #.NET

חשוב: מאמר זה תורגם באמצעות תוכנת תרגום מכונה של Microsoft וייתכן שנערך לאחר מכן על-ידי קהילת Microsoftבאמצעות טכנולוגייתCommunity Translation Framework (CTF) או באמצעות תרגום אנושי. Microsoft מציעה לך גם מאמרים בתרגום אנושי, מאמרים בתרגום מכונה ומאמרים שנערכו על ידי הקהילה כדי לאפשר גישה למאמרים הקיימים במאגר הידע (Knowledge Base) שלMicrosoft בשפות שונות. מאמרים מתורגמים יכולים להכיל שגיאות באוצר המילים, בתחביר או בדקדוק. Microsoft אינה אחראית לחוסר דיוק, שגיאות או נזקים שייגרמו כתוצאה מטעויות בתכנים או משימוש בתכנים על ידי לקוחותיה.

כותרת מאמר זה באנגלית: 301240
תקציר
מאמר זה מדגים כיצד ליישם מבוסס-טפסים אימות באמצעות מסד נתונים כדי לאחסן את המשתמשים.

back to the top

דרישות

ברשימה הבאה מתוארים מומלצים חומרה, תוכנה, תשתית רשת ו- service packs הדרוש לך:
  • Microsoft Visual Studio .NET
  • Microsoft Internet Information Services (IIS) גירסה 5.0 או גירסה מתקדמת יותר
  • שרת Microsoft SQL
back to the top

יצירת יישום ASP.NET משתמש C# .NET

  1. פתח את Visual Studio .NET.
  2. יצירת יישום אינטרנט של ASP.NET חדש ולאחר מכן ציין את שם ומיקום.
back to the top

קביעת תצורה של הגדרות האבטחה בקובץ web. config

סעיף זה מדגים כיצד להוסיף ולשנות <authentication></authentication> , <authorization></authorization> מקטעי תצורה כדי לקבוע את התצורה של ASP.NET היישום השתמש באימות מבוסס טפסים.
  1. בסייר פתרון, פתח את הקובץ web. config.
  2. שנה את מצב האימות טפסים.
  3. הוסף תג <Forms>, ומלא המתאים תכונות. (לקבלת מידע נוסף אודות תכונות אלה, עיין MSDN תיעוד או בתיעוד להתחלה מהירה הכלול </Forms>הפניות מקטע). העתק הקוד הבא ולאחר מכן לחץ הדבק כ- HTML ב-עריכה תפריט כדי להדביק את הקוד ב- <authentication></authentication> של הקובץ:
    <authentication mode="Forms">   <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx"    protection="All" path="/" timeout="30" /></authentication> 					
  4. מנע גישה לקובץ המשתמש האנונימי ב <authorization></authorization> מקטע כדלקמן:
    <authorization>   <deny users ="?" />   <allow users = "*" /></authorization>					
back to the top

יצירת טבלה של מסד נתונים לדוגמה כדי לאחסן את פרטי המשתמשים

סעיף זה מדגים כיצד ליצור מסד נתונים לדוגמה כדי לאחסן את שם המשתמש, הסיסמה ואת התפקיד עבור המשתמשים. עליך עמודה תפקיד אם ברצונך לאחסן את תפקידי משתמש במסד הנתונים וליישם מבוססות-תפקיד אבטחה.
  1. ב- התחלה תפריט, לחץ עלהפעלה, ולאחר מכן הקלד פנקס רשימות כדי לפתוח ' פנקס רשימות '.
  2. לסמן קוד script הבאים של SQL, לחץ לחיצה ימנית קוד ולאחר מכן לחץ העתק. בפנקס הרשימות, לחץהדבק ב- עריכה תפריט כדי להדביק את הטקסט הבא קוד:
    if exists (select * from sysobjects where id = object_id(N'[dbo].[Users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[Users]GOCREATE TABLE [dbo].[Users] (   [uname] [varchar] (15) NOT NULL ,   [Pwd] [varchar] (25) NOT NULL ,   [userRole] [varchar] (25) NOT NULL ,) ON [PRIMARY]GOALTER TABLE [dbo].[Users] WITH NOCHECK ADD    CONSTRAINT [PK_Users] PRIMARY KEY  NONCLUSTERED    (      [uname]   )  ON [PRIMARY] GOINSERT INTO Users values('user1','user1','Manager')INSERT INTO Users values('user2','user2','Admin')INSERT INTO Users values('user3','user3','User')GO					
  3. שמור את הקובץ בשם Users.sql.
  4. במחשב Microsoft SQL Server, פתח Users.sql ב מנתח שאילתות. מהרשימה של מסדי נתונים, לחץ pubs, ו- הפעלת קובץ ה-script. זה יוצר טבלת משתמשים דוגמה ומאכלס את הטבלה ב- מסד הנתונים Pubs לשימוש עם היישום לדוגמה זה.
back to the top

צור דף Logon.aspx

  1. הוסף טופס אינטרנט חדש לפרוייקט בשם Logon.aspx.
  2. פתח את הדף Logon.aspx בעורך ולעבור ל- HTML תצוגה.
  3. העתק את הקוד הבא, ולהשתמש הדבק כ HTML האפשרות על עריכה תפריט כדי להוסיף קוד בין<form>תגים: </form>
    <h3>   <font face="Verdana">Logon Page</font></h3><table>   <tr>      <td>Email:</td>      <td><input id="txtUserName" type="text" runat="server"></td>      <td><ASP:RequiredFieldValidator ControlToValidate="txtUserName"           Display="Static" ErrorMessage="*" runat="server"            ID="vUserName" /></td>   </tr>   <tr>      <td>Password:</td>      <td><input id="txtUserPass" type="password" runat="server"></td>      <td><ASP:RequiredFieldValidator ControlToValidate="txtUserPass"          Display="Static" ErrorMessage="*" runat="server"           ID="vUserPass" />      </td>   </tr>   <tr>      <td>Persistent Cookie:</td>      <td><ASP:CheckBox id="chkPersistCookie" runat="server" autopostback="false" /></td>      <td></td>   </tr></table><input type="submit" Value="Logon" runat="server" ID="cmdLogin"><p></p><asp:Label id="lblMsg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat="server" />						
    טופס אינטרנט זה משמש להצגת טופס כניסה למשתמשים כך שהם יכולים לספק את שם המשתמש והסיסמה שלהם כדי להיכנס ליישום.
  4. עבור לתצוגת עיצוב ולאחר מכן לשמור את הדף.
back to the top

קוד המטפל באירועים כך שהוא מאמת את אישורי המשתמש

סעיף זה מציג את הקוד שממוקם הקוד מאחור דף (Logon.aspx.cs).
  1. לחץ פעמיים כניסה כדי לפתוח קובץ Logon.aspx.cs.
  2. יבא את טווחי השמות הנדרשים בקובץ קוד מאחור:
    using System.Data.SqlClient;using System.Web.Security;					
  3. צור פונקציה ValidateUser כדי לאמת את האישורים של המשתמש על-ידי בחינת מסד הנתונים. (הקפד לשנות את מחרוזת החיבור כדי להצביע על שלך מסד נתונים).
    private bool ValidateUser( string userName, string passWord ){	SqlConnection conn;	SqlCommand cmd;	string lookupPassword = null;	// Check for invalid userName.	// userName must not be null and must be between 1 and 15 characters.	if ( (  null == userName ) || ( 0 == userName.Length ) || ( userName.Length > 15 ) )	{		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of userName failed." );		return false;	}	// Check for invalid passWord.	// passWord must not be null and must be between 1 and 25 characters.	if ( (  null == passWord ) || ( 0 == passWord.Length ) || ( passWord.Length > 25 ) )	{		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of passWord failed." );		return false;	}	try	{		// Consult with your SQL Server administrator for an appropriate connection		// string to use to connect to your local SQL Server.		conn = new SqlConnection( "server=localhost;Integrated Security=SSPI;database=pubs" );		conn.Open();		// Create SqlCommand to select pwd field from users table given supplied userName.		cmd = new SqlCommand( "Select pwd from users where uname=@userName", conn );		cmd.Parameters.Add( "@userName", SqlDbType.VarChar, 25 );		cmd.Parameters["@userName"].Value = userName;		// Execute command and fetch pwd field into lookupPassword string.		lookupPassword = (string) cmd.ExecuteScalar();		// Cleanup command and connection objects.		cmd.Dispose();		conn.Dispose();	}	catch ( Exception ex )	{		// Add error handling here for debugging.		// This error message should not be sent back to the caller.		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Exception " + ex.Message );	}	// If no password found, return false.	if ( null == lookupPassword ) 	{		// You could write failed login attempts here to event log for additional security.		return false;	}	// Compare lookupPassword and input passWord, using a case-sensitive comparison.	return ( 0 == string.Compare( lookupPassword, passWord, false ) );}					
  4. באפשרותך להשתמש באחת משתי שיטות ליצירת טפסים אימות קובץ cookie ונתב מחדש המשתמש לדף המתאים באירוע cmdLogin_ServerClick . קוד לדוגמה שסופק עבור שני תרחישים. השתמש באחד אותם לפי דרישה שלך.
    • קריאה לפעולת השירות RedirectFromLoginPage כדי ליצור באופן אוטומטי את קובץ ה-cookie של אימות טפסים וניתוב המשתמש לעמוד המתאים באירוע cmdLogin_ServerClick :
      private void cmdLogin_ServerClick(object sender, System.EventArgs e){if (ValidateUser(txtUserName.Value,txtUserPass.Value) )	FormsAuthentication.RedirectFromLoginPage(txtUserName.Value,		chkPersistCookie.Checked);	else		Response.Redirect("logon.aspx", true);}						
    • צור כרטיס אימות, להצפין אותו, ליצור קובץ cookie, להוסיף התגובה ולנתב את המשתמש. פעולה זו מעניקה לך יותר לשלוט בכיצד ליצור קובץ ה-cookie. באפשרותך גם לכלול נתונים מותאמים אישית לאורך עם FormsAuthenticationTicket במקרה זה.
      private void cmdLogin_ServerClick(object sender, System.EventArgs e){   if (ValidateUser(txtUserName.Value,txtUserPass.Value) )   {      FormsAuthenticationTicket tkt;      string cookiestr;      HttpCookie ck;      tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now, DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");      cookiestr = FormsAuthentication.Encrypt(tkt);      ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);      if (chkPersistCookie.Checked)      ck.Expires=tkt.Expiration;			    ck.Path = FormsAuthentication.FormsCookiePath;       Response.Cookies.Add(ck);      string strRedirect;      strRedirect = Request["ReturnUrl"];      if (strRedirect==null)            strRedirect = "default.aspx";         Response.Redirect(strRedirect, true);   }   else      Response.Redirect("logon.aspx", true);}						
  5. ודא שהוספת את הקוד הבא בשיטת InitializeComponent בקוד שיוצר על-ידי מעצב הטופס אינטרנט:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);					
back to the top

צור דף default. aspx

סעיף זה יוצר דף מחשב משתמשים מנותבים לאחר אימות. אם למשתמשים לגלוש לדף זה מבלי לבצע כניסה ראשונה ליישום, הם ינותבו מחדש אל דף הכניסה.
  1. שינוי שם הדף WebForm1.aspx קיימים כ- default. aspx, ו- לפתוח אותו בחלון העורך.
  2. עבור לתצוגת HTML ולאחר מכן העתק את הקוד הבא בין את<form>תגים: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">						
    לחצן זה משמש כדי להתנתק אימות טפסים הפעלה.
  3. עבור לתצוגת עיצוב ולאחר מכן לשמור את הדף.
  4. יבא את טווחי השמות הנדרשים בקובץ קוד מאחור:
    using System.Web.Security;					
  5. לחץ פעמיים על SignOut אל דף פתיחה מאחור הקוד (Default.aspx.cs) ולהעתיק הקוד הבא במטפל באירועים של cmdSignOut_ServerClick :
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e){   FormsAuthentication.SignOut();   Response.Redirect("logon.aspx", true);}					
  6. ודא שהוספת את הקוד הבא בשיטת InitializeComponent בקוד שיוצר על-ידי מעצב הטופס אינטרנט:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);					
  7. שמור והידור של הפרוייקט. באפשרותך להשתמש כעת היישום.
back to the top

הערות נוספות

  • ייתכן שתרצה לאחסן סיסמאות באופן מאובטח במסד נתונים. אתה ניתן להשתמש בפונקציה כלי מחלקה FormsAuthentication בשם HashPasswordForStoringInConfigFile כדי להצפין את הסיסמאות לפני לאחסן במסד הנתונים או קובץ התצורה.
  • ייתכן שתרצה לאחסן את מידע החיבור SQL ב- תצורת קובץ (web. config) כך שיהיה באפשרותך לשנות אותה בקלות אם יש צורך בכך.
  • ייתכן שתשקול קוד כדי למנוע האקרים לנסות השתמש שילובים שונים של סיסמאות כניסה. לדוגמה, באפשרותך לבצע כוללים לוגיקה המקבלת נסיונות כניסה רק שתיים או שלוש. אם אין למשתמש כניסה ב מספר נסיונות, ייתכן שתרצה להגדיר דגל מסד הנתונים לא לאפשר לאותו המשתמש להיכנס עד שהמשתמש מפעיל מחדש לו החשבון על-ידי ביקור בדף אחר או על-ידי קריאה קו התמיכה שלך. ב- כמו כן, עליך להוסיף שגיאה המתאים לטיפול בכל מקום יש צורך בכך.
  • מאחר המשתמש מזוהה בהתבסס על אימות קובץ cookie, ייתכן שתרצה להשתמש ביישום זה Secure Sockets Layer (SSL) כך זה לאף אחד להטעות אימות ה-cookie ואת כל valuable מידע המועברת.
  • אימות מבוסס-טפסים מחייב את הלקוח לקבל או לאפשר קבצי cookie בדפדפן שלהם.
  • פרמטר הזמן הקצוב של <authentication></authentication> מקטע התצורה קובע את מרווח הזמן שבו אימות קובץ cookie נוצר מחדש. באפשרותך לבחור ערך המספק אבטחה וביצועים טובים יותר.
  • ייתכן מסוימים proxies מתווכים ומטמונים באינטרנט תגובות של שרת אינטרנט המכילים כותרות קבוצה-Cookie, הם מכן זיכרון מטמון החזיר למשתמש אחר. מאחר קובץ cookie משתמש באימות מבוסס טפסים כדי לאמת משתמשים, הדבר עלול לגרום למשתמשים בטעות (או במכוון) להתחזות למשתמש אחר על-ידי קבלת קובץ cookie מ proxy מתווך או מטמון זה אינו מיועד במקור עבור אותם.
back to the top
מידע נוסף
לקבלת מידע נוסף אודות אופן יישום פשוט אימות מבוסס-טפסים המשתמשת <credentials></credentials> מקטע כדי לאחסן משתמשים וסיסמאות, התייחס לנושאים הבאים דוגמת להתחלה מהירה של ASP.NET GotDotNet: לקבלת מידע נוסף אודות אופן יישום מבוסס-טפסים אימות המשתמש קובץ XML כדי לאחסן סיסמאות, ומשתמשים להפנות הנושא הבא ב- .NET Framework ערכת פיתוח תוכנה (SDK) תיעוד:
אימות טפסים באמצעות קובץ XML משתמשים
. aspx http://msdn2.microsoft.com/en-us/library/1b1y85bh (vs.71)
לקבלת מידע נוסף אודות אבטחת יישום אינטרנט של ASP.NET, עיין במדריך הבא Microsoft .NET Framework המפתח תיעוד:
אבטחת יישום אינטרנט של ASP.NET
. aspx http://msdn2.microsoft.com/en-us/library/330a99hc (vs.71)
לקבלת מידע נוסף אודות השמות System.Web.Security , עיין הבאות של Microsoft .NET Framework תיעוד הפניה: לקבלת מידע נוסף אודות קביעת התצורה של ASP.NET, להפנות המאמרים הבאים Microsoft .NET Framework מפתחים של מדריך: לקבלת מידע אודות קווים מנחים של אבטחה ASP.NET, עיין נייר לבן הבא של MSDN:
אימות ב- ASP.NET: הנחיות אבטחה .NET
http://msdn2.microsoft.com/en-us/library/ms978378.aspx
back to the top

אזהרה: מאמר זה תורגם באופן אוטומטי.

מאפיינים:

מזהה פריט: 301240 - סקירה אחרונה: 06/07/2013 02:19:00 - תיקון: 1.0

Microsoft ASP.NET 1.1, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft ASP.NET 1.0, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 64-bit Edition

  • kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 KbMthe
משוב