繁体   English   中英

如何使用ASHX处理程序进行正确的身份验证

[英]How to make a proper authentication with an ASHX Handler

我正在使用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
    }
}

您当前的方式非常危险。

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

只是一个想法:

客户端(例如移动应用程序)是“您的”吗,还是意味着某种API(对于x客户端)?

无论哪种方式,也许值得研究JWT 这个想法是“有效载荷”(数据)已签名 (例如HMAC SHA-256),并具有防止“重播”的保护。

这样,您不仅在寻找auth部分-re:两端都需要验证数据,以便双方都可以确保这些数据来自“正确的来源”并且(仍然)有效。

心连心...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM