【问题标题】:Asp.net Webapi Check originator's domainAsp.net Webapi 检查创建者的域
【发布时间】:2020-01-07 13:24:39
【问题描述】:

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

【问题讨论】:

  • 你找到答案了吗?
  • @LeandroTupone 还没有

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


【解决方案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地址可以被欺骗。

【讨论】:

  • 我的意思是 webapi 中的 HttpRequest.UrlReferrer 之类的东西
【解决方案2】:

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

【讨论】:

  • 好吧,我的 API 中只是有一个要求来检查它被调用的位置,还有其他方法可以检查吗?我不介意 CORS,我只需要它被调用的域
猜你喜欢
  • 2013-08-02
  • 2015-12-13
  • 1970-01-01
  • 2012-06-19
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
相关资源
最近更新 更多