1

我正在开发 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;
4

2 回答 2

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地址可以被欺骗。

于 2013-05-17T17:38:36.260 回答
0

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

于 2013-05-17T16:54:43.463 回答