通过


ASP.NET Web API 中的表单身份验证

作者:Mike Wasson

表单身份验证使用 HTML 表单将用户的凭据发送到服务器。 这不是 Internet 标准。 表单身份验证仅适用于从 Web 应用程序调用的 Web API,以便用户可以与 HTML 表单进行交互。

优点 缺点
  • 易于实现:内置于 ASP.NET 中。
  • 使用 ASP.NET 成员资格提供程序,以便轻松管理用户帐户。
  • 不是标准 HTTP 身份验证机制;使用 HTTP Cookie 而不是标准授权标头;某些用户禁用 Cookie。
  • 难以从非浏览器客户端使用。 登录需要浏览器。
  • 用户凭据在请求中以纯文本形式发送。
  • 容易受到跨站点请求伪造(CSRF)的攻击;需要反 CSRF 措施。

简言之,ASP.NET 中的表单身份验证的工作方式如下所示:

  1. 客户端请求需要身份验证的资源。
  2. 如果未对用户进行身份验证,服务器将返回 HTTP 302(已找到),并重定向到登录页。
  3. 用户输入凭据并提交表单。
  4. 服务器返回另一个 HTTP 302,该 HTTP 302 重定向回原始 URI。 此响应包括身份验证 Cookie。
  5. 客户端再次请求资源。 请求包括身份验证 Cookie,因此服务器会接受请求。

说明 S P dot Net 中的表单身份验证的工作原理

有关详细信息,请参阅 窗体身份验证概述。

将表单身份验证与 Web API 配合使用

若要创建使用表单身份验证的应用程序,请在 MVC 4 项目向导中选择“Internet 应用程序”模板。 此模板创建用于帐户管理的 MVC 控制器。 还可以使用在 2012 年秋季更新 ASP.NET 提供的“单页应用程序”模板。

在 Web API 控制器中,可以使用属性 [Authorize] 来限制访问,如 使用 [Authorize] 属性中所述。

Forms-authentication 使用会话 Cookie 对请求进行身份验证。 浏览器会自动将所有相关 Cookie 发送到目标网站。 此功能使表单身份验证可能容易受到跨站点请求伪造(CSRF)攻击的攻击,请参阅 防止跨站点请求伪造(CSRF)攻击

表单身份验证不会加密用户的凭据。 因此,除非与 SSL 一起使用,否则表单身份验证不安全。 请参阅 在 Web API 中使用 SSL