Asp.net Webapi检查发起人的域名

时间:2013-05-17 16:12:38

标签: asp.net asp.net-mvc asp.net-web-api cors

我正在开发一个webapi,我目前正在执行基本身份验证,但我还想检查api是从特定域调用的,如何检查api的调用是否来自特定的域?

我正在使用另一个带有HttpClient的C#应用​​程序测试它,请求正在成功但没有设置Origin头。

这是电话:

var client = new HttpClient();
client.BaseAddress = new Uri("http://xxxxxxx.apphb.com/");
client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json"));

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
        Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(
            string.Format("{0}:{1}", "username", "password"))));

var obj = new { Name = "Test", ManageInternal = true, Signers = "test1,test2,test3" };

var response = client.PostAsJsonAsync("api/document/postdocument", obj).Result;

2 个答案:

答案 0 :(得分:1)

如果您正在寻找获取客户端的IP地址,您可以这样做:

if (request.Properties.ContainsKey("MS_HttpContext"))
{
        var httpContext = (HttpContextBase)request.Properties["MS_HttpContext"];
        ipAddress = httpContext.Request.UserHostAddress;
}
else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
{
        RemoteEndpointMessageProperty prop;
        prop = (RemoteEndpointMessageProperty)
                        request.Properties[RemoteEndpointMessageProperty.Name];
        ipAddress = prop.Address;
}

但IP地址可能会被欺骗。

答案 1 :(得分:0)

浏览器对JavaScript实施相同的原始政策。 CORS是解决方法的一种方法,使用CORS时,涉及到Origin头。您拥有的客户端代码位于C#中,这意味着它在服务器中运行。非JavaScript客户端没有相同的源策略或CORS。那么,为什么需要原始标题?顺便说一句,任何人都可以使用他们想要的任何值发送Origin标头。