一、web.config設定
<machineKey validationKey="DD305F238C8F26103323F10B1A655ED9FA7DBB7A" decryptionKey="70DE128000E565A7F8441A4C091C11EC8C5BB9B4D4EDA7A1" validation="SHA1"/>
<authentication mode="Forms">
<forms name="SKAPP.ASPXAUTH" loginUrl="~/login.aspx" protection="All" timeout="10" path="/"/>
</authentication>
1、authentication 節
作用:配置 ASP.NET 身分識別驗證支援(為Windows、Forms、PassPort、None四種)。該元素只能在電腦、網站或應用程式層級聲明。<authentication> 元素必需與<authorization> 節配合使用。
樣本:
以下樣本為基於表單(Forms)的身分識別驗證配置網站,當沒有登陸的使用者訪問需要身分識別驗證的網頁,網頁自動跳轉到登陸網頁。
<authentication mode="Forms" >
<forms loginUrl="logon.aspx" name=".FormsAuthCookie"/>
</authentication>
其中元素loginUrl表示登陸網頁的名稱,name表示Cookie名稱。
2、machineKey
作用:元素對密鑰進行配置,以便將其用於對 Forms 身分識別驗證 Cookie 資料和檢視狀態資料進行加密和解密,並將其用於對進程外工作階段狀態標識進行驗證
屬性
| 屬性 |
說明 |
decryption |
可選的 String 屬性。 指定用於對資料進行解密的雜湊演算法的類型。 此屬性可以為下列可能值之一。
| 值 |
說明 |
Auto |
指定 ASP.NET 基於配置的預設設定來確定使用哪個解密演算法。這是預設值。 |
AES |
指定 ASP.NET 使用 AES (Rijndael) 演算法來對資料進行解密。AES 是用於對資料進行解密的預設演算法。 |
3DES |
指定 ASP.NET 使用 TripleDES 演算法來對資料進行解密。TripleDES (3DES) 演算法使用 DES 演算法的三次連續迭代。 |
此屬性是 .NET Framework 2.0 版中的新屬性。 預設值為 "Auto"。 |
decryptionKey |
必選的 String 屬性。 指定用於對資料進行加密和解密的密鑰或者產生該密鑰的進程。當 validation 設定為 TripleDES 欄位時,該屬性用於 Forms 身分識別驗證加密和解密以及檢視狀態加密。 如果向此屬性添加 IsolateApps 修飾符,ASP.NET 將使用每個應用程式的應用程式識別碼 為每個應用程式產生一個唯一的加密金鑰。IsolateApps 也是預設值的一部分。 如果您需要在 Web 服務器網路(網路場)中支援配置,請手動設定此屬性以確保配置保持一致。 此屬性可以為下列可能值之一。
| 值 |
說明 |
AutoGenerate |
指定 ASP.NET 產生隨機密鑰並將其儲存在 LSA 中。該值是預設值。如果向 decryptionKey 值添加 IsolateApps 修飾符,ASP.NET 將使用每個應用程式的應用程式識別碼 為每個應用程式產生一個唯一的加密金鑰。 |
value |
指定一個手動分配的密鑰。該值必須手動設定為十六進位字串,以確保配置在整個網路場中保持一致。使用 DES 加密時,密鑰長度應該為 16 個字元;而使用三重 DES (3 DES) 加密時,密鑰長度應該為 48 個字元。如果要使用長度小於最大長度的密鑰,則應通過真正的隨機方式(例如,通過使用 RNGCryptoServiceProvider 類)來建立這些密鑰。只有在電腦使用 128 位加密的情況下,ASP.NET 才能使用三重 DES。如果向 decryptionKey 值添加 IsolateApps 修飾符,ASP.NET 將使用每個應用程式的應用程式識別碼 為每個應用程式產生一個唯一的加密金鑰。 |
預設值為 "AutoGenerate,IsolateApps"。 |
validation |
必選的 MachineKeyValidation 屬性。 指定用來驗證資料的加密類型。 此屬性可以為下列可能值之一。
| 值 |
說明 |
AES |
指定 ASP.NET 使用 AES (Rijndael) 演算法來對資料進行解密。AES 是用於對資料進行解密的預設演算法。 |
MD5 |
指定 ASP.NET 使用 Message Digest 5 (MD5) 雜湊演算法。此演算法的效能比 SHA1 好。 |
SHA1 |
指定 ASP.NET 使用 SHA1 雜湊演算法。使用此演算法可增強安全性。 該值是預設值。 |
TripleDES |
指定 ASP.NET 使用 TripleDES 演算法來對資料進行解密。TripleDES 演算法使用 DES 演算法的三次連續迭代。 在 .NET Framework 1.0 和 1.1 版中,該值為 "3DES"。 |
預設值為 "SHA1"。 |
validationKey |
必選的 String 屬性。 指定用於驗證加密資料的密鑰。當 enableViewStateMAC 為 true 時,validationKey 用於建立訊息身分識別驗證代碼 (MAC),以確保檢視狀態未被篡改。validationKey 還可用於產生進程外、應用程式特定的會話 ID,以確保每個會話具有獨立的工作階段狀態變數。 如果向 ValidationKey 值添加 IsolateApps 修飾符,ASP.NET 將使用每個應用程式的應用程式識別碼 為每個應用程式產生一個唯一的加密金鑰。IsolateApps 也是預設值的一部分。 如果您需要在 Web 服務器網路(網路場)中支援配置,請手動設定 ValidationKey 屬性以確保配置保持一致。 validationKey 屬性可以為下列可能值之一。
| 值 |
說明 |
AutoGenerate |
指定 ASP.NET 產生隨機密鑰並將其儲存在 LSA 中。此選項是預設值。如果向 validationKey 值添加 IsolateApps 修飾符,ASP.NET 將使用每個應用程式的應用程式識別碼 為每個應用程式產生一個唯一的加密金鑰。 |
value |
指定一個手動分配的密鑰。該值必須手動設定為十六進位字串,以確保配置在整個網路場中保持一致。使用 DES 加密時,密鑰長度應該為 16 個字元;而使用三重 DES 加密時,密鑰長度應該為 48 個字元。如果要使用長度小於最大長度的密鑰,則應通過真正的隨機方式(例如,通過使用 CryptographyRNGCryptoServiceProvider 類)來建立這些密鑰。只有在電腦使用 128 位加密的情況下,ASP.NET 才能使用三重 DES。如果向 validationKey 值添加 IsolateApps 修飾符,ASP.NET 將使用每個應用程式的應用程式識別碼 為每個應用程式產生一個唯一的加密金鑰。 |
預設值為 "AutoGenerate,IsolateApps"。 |
二、記錄使用者資訊代碼
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, //票據版本號碼
MemberID + ";" + txtMemberNo.Text, //要記錄的使用者資訊,在這裡用多項資訊用“;”號分隔
DateTime.Now, //使用者資訊記錄時間
DateTime.Now.AddMinutes(30), //使用者資訊到期時間
true, //以Cookies的方式記錄使用者資訊
dr["Roles"].ToString(), //同時寫入記錄資訊的使用者其他資訊,這裡記錄了使用者權限
FormsAuthentication.FormsCookiePath //寫入Cookies的路徑
);
string hash = FormsAuthentication.Encrypt(ticket);//加密要寫入Cookies的使用者資訊
HttpCookie cookie = new HttpCookie(
FormsAuthentication.FormsCookieName, //要寫入的Cookies的名稱
hash //加密後的使用者資訊
);
if (ticket.IsPersistent) //如果使用者資訊儲存是持久性的
cookie.Expires = ticket.Expiration;//寫入Cookies的到期日期
Response.Cookies.Add(cookie);//寫入Cookies
三、讀取使用者資訊
代碼
if(HttpContext.Current.User.Identity.IsAuthenticated)//使用者是否通過驗證
{
string[] parts = HttpContext.Current.User.Identity.Name.Split(';');//返回記錄的使用者資訊
return Convert.ToInt32(parts[0]);
}
else
return null;