在該方案中,應(yīng)用程序使用 ASP.NET Forms 身份驗(yàn)證,該過(guò)程可使應(yīng)用程序收集直接來(lái)自客戶端請(qǐng)求者的憑據(jù)(如名稱(chēng)和密碼),并對(duì)其可靠性做出自己的判斷。雖然應(yīng)用程序并不使用 IIS 身份驗(yàn)證,但 IIS 身份驗(yàn)證設(shè)置對(duì)于 ASP.NET Forms 驗(yàn)證過(guò)程非常重要。除非您決定拒絕所有不符合已啟用的 IIS 身份驗(yàn)證方法標(biāo)準(zhǔn)的請(qǐng)求,否則必須啟用 IIS“匿名訪問(wèn)”設(shè)置。
注意 如果沒(méi)有啟用 IIS“匿名訪問(wèn)”設(shè)置,不符合 IIS 身份驗(yàn)證標(biāo)準(zhǔn)的請(qǐng)求將被拒絕而且永遠(yuǎn)不會(huì)到達(dá) ASP.NET 應(yīng)用程序。
該方案中的數(shù)據(jù)流如下圖所示。

該插圖顯示了以下的事件順序:
- 客戶端生成一個(gè)對(duì)受保護(hù)資源的請(qǐng)求。
- IIS 接收到該請(qǐng)求,如果該請(qǐng)求者經(jīng)過(guò) IIS 身份驗(yàn)證,或啟用了 IIS“匿名訪問(wèn)”,則請(qǐng)求將傳遞到 ASP.NET 應(yīng)用程序。在這種情況下,因?yàn)?ASP.NET 應(yīng)用程序中的身份驗(yàn)證模式設(shè)置為 Forms,所以沒(méi)有使用 IIS 身份驗(yàn)證。
- 如果沒(méi)有 Cookie 附加到該請(qǐng)求,ASP.NET 將該請(qǐng)求重定向到登錄頁(yè)面,其頁(yè)面路徑保存在應(yīng)用程序的配置文件中。在登錄頁(yè)面上,客戶端輸入必需的憑據(jù)(通常是名稱(chēng)和密碼)。
- 應(yīng)用程序代碼檢查憑據(jù)以確認(rèn)其可靠性,通常在事件處理程序中。如果憑據(jù)通過(guò)了身份驗(yàn)證,則應(yīng)用程序代碼將附加上包含用戶名稱(chēng)(但沒(méi)有密碼)的票據(jù),例如 Cookie。如果沒(méi)有通過(guò)身份驗(yàn)證,該請(qǐng)求通常返回“訪問(wèn)拒絕”信息或再次顯示登錄頁(yè)面。
- 應(yīng)用程序發(fā)出票據(jù)以后,ASP.NET 會(huì)使用消息身份驗(yàn)證檢查來(lái)檢查票據(jù)的有效性。應(yīng)用程序不需要 *.config 文件中的憑據(jù)。實(shí)際上,ASP.NET 在發(fā)出 Cookie 后并不檢查憑據(jù),即使它們存在。
- 如果用戶通過(guò)了身份驗(yàn)證,ASP.NET 會(huì)檢查授權(quán),然后允許訪問(wèn)最初所請(qǐng)求的、受保護(hù)的資源,或?qū)⒄?qǐng)求重定向到其他頁(yè)面上,這取決于應(yīng)用程序的設(shè)計(jì)。它也可以將請(qǐng)求定向到自定義的授權(quán)模塊上,在該模塊中將檢查憑據(jù),以用于對(duì)所訪問(wèn)的受保護(hù)資源進(jìn)行授權(quán)。如果沒(méi)有通過(guò)授權(quán),ASP.NET 會(huì)始終重定向到登錄頁(yè)面。
- 如果用戶已被授權(quán),則允許對(duì)受保護(hù)資源的訪問(wèn);或應(yīng)用程序在對(duì)受保護(hù)資源授權(quán)以前可能要求附加的憑據(jù)驗(yàn)證,這取決于應(yīng)用程序的設(shè)計(jì)。