[英]How to pass windows authentication from “.aspx” page to “.ashx” handler
[英]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.