MVC4 WebAPI + JSON身份验证

时间:2012-11-10 14:40:43

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

我创建了一个新的MVC4 Web项目,并且所有这些项目都可以正常使用用户登录等。

我在其上添加了一个WebAPI,它将从Entity Framework返回数据。

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

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

>

  

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

     

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

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

解决:

我改为使用WCF身份验证服务:

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