【问题标题】:How to secure a JsonResult?如何保护 JsonResult?
【发布时间】:2013-09-27 00:28:59
【问题描述】:

this answer 的第一部分在另一个问题上解释了现有 MVC 站点如何能够非常快速地向其添加公开其数据的能力(例如,向请求数据的 Winforms 应用程序),所有这些都只需几行代码(无需转换为 WCF/Web API 并添加额外的层 - 我们的项目非常小且基本):

public JsonResult GetCategoryList()
{
    var list = //return list
    return Json(list, JsonRequestBehavior.AllowGet);
}

因此,我们将上述方法作为一种快速简便的解决方案进行了测试,显然它几乎可以正常工作,因为在流中我们获得了用于 MVC 应用登录的 html 源代码。

事实上,如果我们添加 AllowAnonymous 注释,我们确实会得到我们所追求的 Json 流。

但是我们不想允许匿名,我们需要一些保护。已尝试添加:

   Dim nc As New NetworkCredential("username", "password")
   request.Credentials = nc

就在解雇request.GetResponse 之前,但这不起作用(这可能完全无知,但似乎值得一试)。当我说它不起作用时,我的意思是我们回到流中获取登录页面的 html 源代码。

那么如何允许 winforms 应用程序在其对数据的请求中包含某种身份验证(这将起作用)?正如我所说,获取数据是有效的(由 AllowAnonymous 证明)。

【问题讨论】:

    标签: asp.net-mvc json


    【解决方案1】:

    您应该将 Web 应用程序的验证码(返回登录名的那个)与您公开 API 的验证码分开。

    看起来您正在为网站部分使用表单身份验证,您应该保持这种方式。但是,在公共 API GetCategoryList 中,您应该使用 ActionFilters 实施不同的身份验证策略。

    【讨论】:

    • 如果我使用 ActionFilter 注释 GetCategoryList 操作,例如, 是不是仍然期待表单身份验证?这如何改变它“倾听”来自 winforms 应用程序的请求的意愿?
    • 您可以通过使用 web.config 中的 标记或在控制器文件夹中创建另一个 web.config 来禁用控制器位置的 FormsAuth,如此处所述 (stackoverflow.com/questions/3750917/…) 所以它赢了'不要在这些路由中通过 FormsAuth,或者您可以将 Api 控制器放在 IIS 中另一个网站/应用程序的另一个项目中。
    猜你喜欢
    • 2010-10-07
    • 2015-08-10
    • 1970-01-01
    • 2013-10-06
    • 2011-05-23
    • 2015-09-22
    • 2010-12-27
    • 2011-02-07
    相关资源
    最近更新 更多