使用表单例份验证在 ASP.NET MVC 3 中对 JSON 的 Javascript 请求结果

标签 javascript json rest asp.net-mvc-3 restful-authentication

我有一个 MVC 3 REST API,它有一个简单的 Controller :ApiControllerApiController 中有一个方法 Foo,它接收一些字符串信息并返回一个 JSON 结果:

public class ApiController : Controller
{
    [HttpPost]
    public JsonResult Foo(string input)
    {
        ...
    }
}

我想用一些用户输入的数据调用 Foo 的 JQuery 方法并显示结果。

这里的问题是我想检查是否允许用户访问 Foo。在 ASP.NET MVC 3 中解决这个问题的最佳方法是什么?我认为答案是使用 SSL 和基本身份验证,但我不知道那会是什么样子。另外,我是否必须滚动我自己的密码散列/加盐,或者有什么方法可以只使用表单例份验证?

编辑:请注意,我正在尝试创建第三方开发人员可以使用的 API。例如,如果有人编写了一个 Rapportive 风格的浏览器插件来扫描您的 Gmail,将文本发送到 Foo,并在浏览器中显示。

此外,我相信仅使用 Forms Authentication 就会以纯文本形式发送用户名/密码信息,对吗?我不确定如何实现 SSL 来防止这种情况。

最佳答案

您可以使用 FormsAuthentication 和 [Authorize] 属性。因此,您可能有一个带有 LogOn 操作的 AccountController,它只能通过 HTTPS 访问。该 Controller 将允许客户端进行身份验证并获取身份验证 cookie,该 cookie 将被重用于访问 API:

public class AccountController: Controller
{
    [HttpPost]
    [RequireHttps]
    public ActionResult LogOn(string username, string password)
    {
        // TODO: verify the credentials and emit an authentication cookie if valid
        // return some result (JSON?) to indicate whether the operation succeeded or
        // not
    }
}

然后剩下的就是用 [Authorize] 属性装饰您想要保护的其他 Controller 操作:

public class ApiController : Controller
{
    [HttpPost]
    [Authorize]
    public JsonResult Foo(string input)
    {
        ...
    }
}

因此,现在客户端需要首先调用 LogOn 操作并在响应中获取相应的身份验证 cookie,这些 cookie 将随后续调用您的 API 一起发送。

关于使用表单例份验证在 ASP.NET MVC 3 中对 JSON 的 Javascript 请求结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5601484/

相关文章:

javascript - subscribe() 后获取返回变量的值

javascript - 缓动圆圈碰撞解析

javascript - AgendaWeek View 和 AgendaDay View 中今天行的 FullCalendar 背景颜色

javascript - 用你自己的覆盖浏览器拼写检查?

java - 在 Java REST API 中,使用 PATCH 与 PUT 更新实体

json - 如何获取 Spark 驱动程序指标 json?

php - 将 json 响应中的嵌套数组插入 mysql

java - Jackson 在尝试映射没有类元素的 JSON 时崩溃

web-services - .NET 中使用 WADL 而不是 WSDL 的 Restful 服务

java - RESTful 服务的 url 设计