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

תרגומי מאמרים תרגומי מאמרים
Article ID: 301240 - View products that this article applies to.
הרחב הכל | כווץ הכל

On This Page

תקציר

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

דרישות

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

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

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

קביעת תצורה של הגדרות האבטחה בקובץ 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>
    					

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

סעיף זה מדגים כיצד ליצור מסד נתונים לדוגמה כדי לאחסן את שם המשתמש, הסיסמה ואת התפקיד עבור המשתמשים. עליך עמודה תפקיד אם ברצונך לאחסן את תפקידי משתמש במסד הנתונים וליישם מבוססות-תפקיד אבטחה.
  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]
    GO
    CREATE TABLE [dbo].[Users] (
       [uname] [varchar] (15) NOT NULL ,
       [Pwd] [varchar] (25) NOT NULL ,
       [userRole] [varchar] (25) NOT NULL ,
    ) ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[Users] WITH NOCHECK ADD 
       CONSTRAINT [PK_Users] PRIMARY KEY  NONCLUSTERED 
       (
          [uname]
       )  ON [PRIMARY] 
    GO
    
    INSERT 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 לשימוש עם היישום לדוגמה זה.

צור דף 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. עבור לתצוגת עיצוב ולאחר מכן לשמור את הדף.

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

סעיף זה מציג את הקוד שממוקם הקוד מאחור דף (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);
    					

צור דף 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. שמור והידור של הפרוייקט. באפשרותך להשתמש כעת היישום.

הערות נוספות

  • ייתכן שתרצה לאחסן סיסמאות באופן מאובטח במסד נתונים. אתה ניתן להשתמש בפונקציה כלי מחלקה FormsAuthentication בשם HashPasswordForStoringInConfigFile כדי להצפין את הסיסמאות לפני לאחסן במסד הנתונים או קובץ התצורה.
  • ייתכן שתרצה לאחסן את מידע החיבור SQL ב- תצורת קובץ (web. config) כך שיהיה באפשרותך לשנות אותה בקלות אם יש צורך בכך.
  • ייתכן שתשקול קוד כדי למנוע האקרים לנסות השתמש שילובים שונים של סיסמאות כניסה. לדוגמה, באפשרותך לבצע כוללים לוגיקה המקבלת נסיונות כניסה רק שתיים או שלוש. אם אין למשתמש כניסה ב מספר נסיונות, ייתכן שתרצה להגדיר דגל מסד הנתונים לא לאפשר לאותו המשתמש להיכנס עד שהמשתמש מפעיל מחדש לו החשבון על-ידי ביקור בדף אחר או על-ידי קריאה קו התמיכה שלך. ב- כמו כן, עליך להוסיף שגיאה המתאים לטיפול בכל מקום יש צורך בכך.
  • מאחר המשתמש מזוהה בהתבסס על אימות קובץ cookie, ייתכן שתרצה להשתמש ביישום זה Secure Sockets Layer (SSL) כך זה לאף אחד להטעות אימות ה-cookie ואת כל valuable מידע המועברת.
  • אימות מבוסס-טפסים מחייב את הלקוח לקבל או לאפשר קבצי cookie בדפדפן שלהם.
  • פרמטר הזמן הקצוב של <authentication></authentication> מקטע התצורה קובע את מרווח הזמן שבו אימות קובץ cookie נוצר מחדש. באפשרותך לבחור ערך המספק אבטחה וביצועים טובים יותר.
  • ייתכן מסוימים proxies מתווכים ומטמונים באינטרנט תגובות של שרת אינטרנט המכילים כותרות קבוצה-Cookie, הם מכן זיכרון מטמון החזיר למשתמש אחר. מאחר קובץ cookie משתמש באימות מבוסס טפסים כדי לאמת משתמשים, הדבר עלול לגרום למשתמשים בטעות (או במכוון) להתחזות למשתמש אחר על-ידי קבלת קובץ cookie מ proxy מתווך או מטמון זה אינו מיועד במקור עבור אותם.

מידע נוסף

לקבלת מידע נוסף אודות אופן יישום פשוט אימות מבוסס-טפסים המשתמשת <credentials></credentials> מקטע כדי לאחסן משתמשים וסיסמאות, התייחס לנושאים הבאים דוגמת להתחלה מהירה של ASP.NET GotDotNet:
אימות מבוסס-טפסים
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx
לקבלת מידע נוסף אודות אופן יישום מבוסס-טפסים אימות המשתמש קובץ 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 תיעוד הפניה:
השמות System.Web.Security
. aspx http://msdn2.microsoft.com/en-us/library/system.web.security (vs.71)
לקבלת מידע נוסף אודות קביעת התצורה של ASP.NET, להפנות המאמרים הבאים Microsoft .NET Framework מפתחים של מדריך:
קביעת התצורה של ASP.NET
. aspx http://msdn2.microsoft.com/en-us/library/aa719558 (VS.71)

מקטעי תצורה של ASP.NET
. aspx http://msdn2.microsoft.com/en-us/library/w7w4sb0w (vs.71)
לקבלת מידע אודות קווים מנחים של אבטחה ASP.NET, עיין נייר לבן הבא של MSDN:
אימות ב- ASP.NET: הנחיות אבטחה .NET
http://msdn2.microsoft.com/en-us/library/ms978378.aspx

מאפיינים

Article ID: 301240 - Last Review: יום שישי 07 יוני 2013 - Revision: 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
תרגום מכונה
חשוב: מאמר זה תורגם באמצעות תוכנת תרגום מכונה של Microsoft וייתכן שנערך לאחר מכן על-ידי קהילת Microsoftבאמצעות טכנולוגייתCommunity Translation Framework (CTF) או באמצעות תרגום אנושי. Microsoft מציעה לך גם מאמרים בתרגום אנושי, מאמרים בתרגום מכונה ומאמרים שנערכו על ידי הקהילה כדי לאפשר גישה למאמרים הקיימים במאגר הידע (Knowledge Base) שלMicrosoft בשפות שונות. מאמרים מתורגמים יכולים להכיל שגיאות באוצר המילים, בתחביר או בדקדוק. Microsoft אינה אחראית לחוסר דיוק, שגיאות או נזקים שייגרמו כתוצאה מטעויות בתכנים או משימוש בתכנים על ידי לקוחותיה.
כותרת מאמר זה באנגלית: 301240

ספק משוב

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com