【问题标题】:How to make a proper authentication with an ASHX Handler如何使用 ASHX 处理程序进行正确的身份验证
【发布时间】:2014-01-22 22:14:34
【问题描述】:

我正在使用 ASP.NET 的通用处理程序(ASHX 文件)来制作可以将数据返回到移动应用程序等的服务器端页面。其中一些数据是保密的。到目前为止,我正在使用 JSON 和 POST 方法。

但是,任何有权访问客户端代码(例如移动应用程序的代码)的人都可以看到他必须将哪些关键字发送到“不可预测”的 URL 才能进行更改或获取数据.

我已经研究了几个小时,但找不到合适的方法来验证发送 JSON 请求的人确实是经过批准的移动应用程序。

使用 AJAX 向服务器发送请求的示例:

function login() 
{
    var jsonParam = { name: "test", aname: "secret", pass: "1234", type: "login" }
    $.ajax({
        url: "AppDatabase.ashx",
        type: "post",
        data: JSON.stringify(jsonParam),
        dataType: "json",
        contentType: 'application/json; charset=utf-8',
        async:false,
        success: function (response) {
            alert(response.userEmail);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) { 
            alert("Status: " + textStatus + "\r\n" + "Error: " + errorThrown);
        }    
    });
}

服务器端接收请求示例:

public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "application/json";
    JavaScriptSerializer jss = new JavaScriptSerializer();

    context.Request.InputStream.Position = 0;
    string json;
    using (var reader = new StreamReader(context.Request.InputStream))
    {
        json = reader.ReadToEnd();
    }

    Dictionary<string, object> dict = jss.Deserialize<Dictionary<string, object>>(json);

    if(dict["aname"].ToString() == "secret")
    {
      // The best security I have right now is a "secret keyword" within the request
    }
}

【问题讨论】:

  • 你的意思是你从客户端发送秘密关键字??
  • @Furqan 是的,还有哪里?
  • 如果您想阻止任何其他 3rd 方应用程序访问该 URL,那么这是不可能的。一旦 URL 公开,任何人都可以访问它,唯一的停止方法是实施用户身份验证。但是,如果他们有凭据,第三方仍然可以访问该资源。

标签: c# asp.net ajax json handler


【解决方案1】:

只是一个想法:

客户端(例如移动应用)是“你的”还是意味着某种 API(针对 x 个客户端)?

不管怎样,也许值得研究JWT?这个想法是“有效负载”(数据)是签名的(例如 HMAC SHA-256)并且具有防止“重放”的保护。

这样,您不只是查看身份验证部分 - 重新:两端都需要验证 数据,因此双方都可以确保此类数据来自“正确的来源”并且是(仍然) 有效。

第...

【讨论】:

  • 移动应用程序是我的。我去看看JWT,谢谢。
【解决方案2】:

你现在的方式很危险。

您可以使用另一个需要用户名和密码的页面进行身份验证(例如使用Session),然后让客户端请求您的 ashx 文件和您的 ashx应该检查Session 进行身份验证。

【讨论】:

  • 不确定我明白了。我怎样才能做到这一点?以及如何在处理程序上将 Session 分配给客户端?
  • 哦。我想我得到你了。您是说,将会话附加到登录的任何发件人,然后每当收到登录以外的请求时,检查会话的有效性。所以一个人要获得另一个人的信息,他们必须知道名字和密码。不过,我仍然想听听是否有人对如何使其安全有更多建议。
猜你喜欢
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 2019-01-05
  • 2014-04-15
相关资源
最近更新 更多