ASP.NET Web API 中的表單驗證

作者:Mike Wasson

表單驗證會使用 HTML 表單將使用者的認證傳送至伺服器。 這不是網際網路標準。 表單驗證僅適用於從 Web 應用程式呼叫的 Web API,讓使用者可以與 HTML 表單互動。

優點 缺點
  • 易於實作:內建於 ASP.NET。
  • 使用 ASP.NET 成員資格提供者,可讓您輕鬆地管理使用者帳戶。
  • 不是標準 HTTP 驗證機制;會使用 HTTP Cookie,而不是標準授權標頭;某些使用者停用 Cookie。
  • 難以從非瀏覽器用戶端使用。 登入需要瀏覽器。
  • 用戶認證會在要求中以純文字形式傳送。
  • 容易受到跨網站偽造要求 (CSRF) 影響:需要防 CSRF 措施。

簡單來說,ASP.NET 中的表單驗證運作方式如下:

  1. 用戶端要求需要驗證的資源。
  2. 如果未驗證使用者,伺服器會傳回 HTTP 302 (Found),並重新導向至登入頁面。
  3. 使用者會輸入認證並提交表單。
  4. 伺服器會傳回另一個重新導向回原始 URI 的 HTTP 302。 此回應包含驗證 Cookie。
  5. 用戶端會再次要求資源。 要求包含驗證 Cookie,因此伺服器會授與要求。

ASP.Net 中表單驗證運作方式的圖例

如需詳細資訊,請參閱表單驗證概觀

將表單驗證與 Web API 結合使用

若要建立使用表單驗證的應用程式,請在 MVC 4 專案精靈中選取 [網際網路應用程式] 範本。 此範本會建立 MVC 控制器以進行帳戶管理。 您也可以使用 ASP.NET Fall 2012 Update 中提供的「單一頁面應用程式」範本。

在您的 Web API 控制器中,您可以使用 [Authorize] 屬性 (如使用 [授權] 屬性所述) 來限制存取。

表單驗證會使用工作階段 Cookie 來驗證要求。 瀏覽器會自動將所有相關 Cookie 傳送至目的地網站。 此功能讓表單驗證可能容易受到跨網站偽造要求攻擊 (CSRF) 影響,請參閱防止跨網站要求偽造 (CSRF) 攻擊

表單驗證不會將使用者的認證資訊加密。 因此,除非搭配 SSL 使用,否則表單驗證並不安全。 請參閱在 Web API 中使用 SSL。