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 (找到) 并重定向到登录页。
  3. 用户输入凭据并提交表单。
  4. 服务器返回另一个重定向回原始 URI 的 HTTP 302。 此响应包括身份验证 Cookie。
  5. 客户端再次请求资源。 请求包括身份验证 Cookie,因此服务器会授予请求。

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

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

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

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

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

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

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