【问题标题】:MVC4 WebAPI + JSON AuthenticationMVC4 WebAPI + JSON 认证
【发布时间】:2012-11-10 14:40:43
【问题描述】:

我创建了一个新的 MVC4 Web 项目,并且它在用户登录等情况下都能正常工作。

我已经在上面添加了一个 WebAPI,它将从实体框架返回数据。

我希望能够从移动应用程序登录,能够调用 API 并根据登录的用户返回结果。

我向 Account/Login 发送了一个 POST 请求,内容类型为 application/json; charset=utf-8,但是我不断收到以下错误消息:

>

所需的防伪 cookie“__RequestVerificationToken”不存在。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Web.Mvc.HttpAntiForgeryException:所需的防伪 cookie“__RequestVerificationToken”不存在。

我将如何解决这个问题?或生成防伪cookie?

我在网上看过,但这些涉及基于 asp.net 的解决方案 - 我将从 iOS / Android 发出这些请求..

谢谢。

【问题讨论】:

  • 如果我在 AccountController.cs 中注释掉 [ValidateAntiForgeryToken] 似乎可以正常工作?这样做安全吗?

标签: asp.net-mvc json post forms-authentication


【解决方案1】:

听起来您实际上并没有解决问题; WCF 身份验证服务与防伪令牌无关。防伪令牌是一种用于阻止称为跨站点请求伪造 (CSRF) 的技术。在Steve Sanderson's blog 上有一个很好的解释。实现的基础是您在视图中有一个标签(参见 sn-p),然后在您希望 MVC “强制”令牌存在的操作上使用属性 [ValidateAntiForgeryToken]

<% using(Html.Form("UserProfile", "SubmitUpdate")) { %>
    <%= Html.AntiForgeryToken() %>
    <!-- rest of form goes here -->
<% } %>

您看到该异常的原因是您在发布到帐户/登录时没有包含防伪令牌。如果您尝试通过 Web API 方法处理登录/身份验证,您仍然可以使用防伪令牌。只需确保pass it to your view POST 回 API。

【讨论】:

    【解决方案2】:

    已解决:

    我改用了 WCF 身份验证服务:

    http://msdn.microsoft.com/en-us/library/bb398990(VS.100).aspx

    【讨论】:

      猜你喜欢
      • 2023-01-11
      • 2012-11-08
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 2018-11-06
      • 2015-01-06
      相关资源
      最近更新 更多