<authentication mode="Forms">
<forms name=".ASPXCOOKIEDEMO" loginUrl="login.aspx" defaultUrl="default.aspx"
protection="All" timeout="30" path="/" requireSSL="false"
slidingExpiration="true" enableCrossAppRedirects="false"
cookieless="UseDeviceProfile" domain="">
<!-- protection="[All|None|Encryption|Validation]" -->
<!-- cookieless="[UseUri | UseCookies | AutoDetect | UseDeviceProfile]" -->
</forms>
</authentication>
cookieless |
ASP.NET 2.0 Forms 身份驗證可以將 Forms 身份驗證票存儲在 Cookie 中也可以以無 Cookie 的表示形式存儲在 URL 上。UseDeviceProfile 的默認值表示 ASP.NET 根據預先計算得到的瀏覽器配置文件來確定存儲票證的位置。AutoDetect 選項使 ASP.NET 動態確定瀏覽器是否支持 Cookie。UseUri 和 UseCookies 分別強制實施無 Cookie 票證和有 Cookie 票證。 |
defaultUrl |
指定在成功登錄後,請求將重定向到的默認 URL。在登錄後進行重定向時,如果重定向 URL 對於 Forms 身份驗證不可用,則使用此值。 |
domain |
指定包含 Forms 身份驗證票的 HttpCookie 的 Domain 屬性的值。顯式設置此屬性可使應用程序共享同一個 Cookie,前提是這些應用程序共享某個 DNS 命名空間的一個公共部分(例如,如果 domain 屬性設置爲“contoso.com”,則 appA.contoso.com 和 appB.contoso.com 可以共享一個 Cookie)。 |
enableCrossAppRedirects |
在 ASP.NET 2.0 中,Forms 身份驗證允許以查詢字符串變量或窗體 POST 變量的形式在應用程序之間傳遞 Forms 身份驗證票。將此屬性設置爲 true 可使 FormsAuthenticationModule 能夠從查詢字符串或窗體 POST 變量提取票證。 |
loginUrl |
指定未經身份驗證的用戶的請求將被重定向到的 URL。該 URL 可以在同一臺計算機上或在遠程計算機上。如果是在遠程計算機上,則兩臺計算機上 machineKey 配置元素中的 decryptionkey 和 validationKey 屬性都需要使用相同的值。 |
name |
用於身份驗證的 HTTP Cookie 的名稱。注意,如果多個應用程序需要在一臺計算機上使用基於窗體的身份驗證服務,並且每個應用程序都希望由應用程序隔離 Forms 身份驗證 Cookie,則每個應用程序都應配置一個唯一的 Cookie 值。爲避免在 URL 中產生依賴項,在設置身份驗證 Cookie 時,ASP.NET 還使用“/”作爲 Path 值,以便將這些 Cookie 發送回站點上的每個應用程序。 |
path |
用於發出的 Cookie 的路徑。默認值爲“/”,以避免路徑中大小寫不匹配的造成的困難,因爲在返回 Cookie 時,瀏覽器是嚴格區分大小寫的。共享服務器環境中的應用程序應使用此指令來維護專用 Cookie。(它們還可以使用 API 在運行時指定路徑來發出 Cookie。) |
protection |
用於保護 Cookie 數據的方法。有效值如下: All:同時使用數據驗證和加密來保護 Cookie。所配置的數據驗證算法是基於 <machinekey> 元素的。如果密鑰足夠長(48 個字符),默認情況下將使用 AES 進行加密。All 是默認(和建議)值。 None:用於僅將 Cookie 用於個性化設置並且安全性要求不高的站點。加密和驗證都可以被禁用。儘管以此方式使用 Cookie 需謹慎,但對於使用 .NET Framework 實現個性化設置的任何方法,此設置提供了最佳性能。 Encryption:使用 AES、TripleDES 或 DES 加密 Cookie,但不對 Cookie 進行數據驗證。這類 Cookie 容易受到精心選擇的純文本的攻擊。 Validation:不加密 Cookie 的內容,但驗證 Cookie 數據在傳輸過程中是否未被更改。若要創建 Cookie,驗證密鑰在緩衝區中與 Cookie 數據連接,並且計算出 MAC 並將其追加到輸出的 Cookie。 |
requireSSL |
如果設置爲 true,則 Forms 身份驗證會設置 Forms 身份驗證 Cookie 的安全位。兼容的瀏覽器只將 Cookie 通過 SSL 連接發送回 ASP.NET。注意,如果使用無 Cookie Forms 身份驗證,則此設置無效。 |
slidingExpiration |
如果設置爲 true,則 Forms 身份驗證將定期更新 Forms 身份驗證票的生存期。無論票證是包含在 Cookie 中,還是以無 Cookie 的格式包含在 URL 中,都會進行此操作。 |
timeout |
時間量(以整數分鐘爲單位),經過該時間量之後,Cookie 則會過期。默認值是 30。超時屬性是一個可調值,從收到上次請求的時間開始計算,它將在 n 分鐘後過期。爲了避免對性能產生負面影響,也爲了避免那些打開了 Cookie 警告的應用程序產生多個瀏覽器警告,Cookie 在超時時間過半時更新。(這意味着在某些情況下可能會出現精度損失。) |
例:定義兩個input#text 將其源碼中加入runat="server" 將text2 type更改爲password,再添加一個Button和一個checkBox, 雙擊button添加Click事件,並加入以下代碼:
if( (Text1.Value =="aaa")&&(Text2.Value=="bbb"))
{
FormsAuthentication.RedirectFromLoginPage(Text1.Value,CheckBox1.Checked);//FormsAuthentication,爲 Web 應用程序管理 Forms 身份驗證服務
}
在web.config中加入
<system.web>
<authentication mode="Forms">
<forms name=".ASPXUSERDEMO" loginUrl="Default2.aspx" protection="All" timeout="60" />
</authentication>
<authorization>
<deny users="?" />//不允許匿名登陸
</authorization>
在系統中有一個User,它有方法User.Identity.Name提許出當前登陸的用戶名
以下內容未經例子證明,還可以使用配置爲基於窗體的身份驗證服務提供有效憑據的列表,如下例所示:
<authentication>
<credentials passwordFormat="SHA1" >
<user name="Mary" password="94F85995C7492EEC546C321821AA4BECA9A3E2B1"/>
<user name="John" password="5753A498F025464D72E088A9D5D6E872592D5F91"/>
</credentials>
</authentication>
還可以通過使用 FormsAuthentication.HashPasswordForStoringInConfigFile(String password, String passwordFormat) API 生成密碼的哈希表示形式。此方法支持使用 SHA1 或 MD5 生成哈希值。然後,應用程序可以調用 FormsAuthentication.Authenticate 並提供用戶名和密碼,ASP.NET 將驗證憑據。根據 passwordFormat 屬性的下列值,憑據可以存儲在明文中,也可以存儲爲 SHA1 或 MD5:
Hash 類型 說明
Clear 密碼以明文形式存儲
SHA1 密碼存儲爲 SHA1 摘要
MD5 密碼存儲爲 MD5 摘要
授權用戶和角色
ASP.NET用於控制對 URL 資源的客戶端訪問。它對於用於生成請求的 HTTP 方法(GET 或 POST)是可配置的,並且可配置爲允許或拒絕訪問用戶組或角色組。下面的示例演示向名爲 someone 的用戶和名爲 Admins 的角色授予訪問權。所有其他用戶的訪問被拒絕。
<authorization> <allow users="[email protected]" /> <allow roles="Admins" /> <deny users="*" />//*代表所有用戶 ?代碼匿名用戶 </authorization>
成員資格”功能圍繞兩個中心類來生成:Membership 和 MembershipUser
Membership:例子
MembershipCreateStatus result;//返回值,用做處理創建成功與否返回消息
Membership.CreateUser(username.Text, userpassword.Text, email.Text, DropDownList1.SelectedValue.ToString(), quest.Text, true, out result);
if (result ==MembershipCreateStatus.Success) lblResults.Text = "User successfully created!";
//MembershipUser(有一個功能鎖定) MembershipUser Userer;
Userer = Membership.GetUser();
Label1.Text = Userer.UserName;
Label3.Text = Userer.Email;
Label4.Text = Userer.PasswordQuestion;
Label5.Text = Userer.LastPasswordChangedDate.ToString();
Label6.Text = Userer.LastLoginDate.ToString();
<location path="secured">//路徑爲secured <system.web> <authorization> <deny users="?"/>//所有匿名用戶不能訪問 <allow users="*"/>//所有登陸用戶可以訪問 </authorization> </system.web> </location>
二.管理角色Roles
Roles.CreateRole
DE>Roles.DeleteRoleDE>
DE>Roles.GetAllRolesDE>
<location path="administrators_role"> <system.web> <authorization> <allow roles="Administrators" />//Administrators級別用戶訪問 <deny users="*"/>//所有用戶不能訪問 </authorization> </system.web> </location>