2013-05-17 2 views
1

Я разрабатываю webapi, и в настоящее время я выполняю базовую аутентификацию, но я также хочу проверить, что api вызывается из определенного домена, как я могу проверить, вызван ли вызов api был сделан из определенного домена?Asp.net Webapi Проверка домена оригинатора

Я тестирую его с другим приложением C# с HttpClient, запрос выполняется успешно, но нет заголовка 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; 
+0

Вы нашли ответ? –

+0

@LeandroTupone еще нет – Escobar5

ответ

0

Браузеры применять ту же политику происхождения на JavaScript. CORS - это один из способов обхода и с CORS, есть заголовок Origin. Код клиента у вас есть на C#, что означает, что он работает на сервере. Нет такой политики происхождения или CORS для клиентов, не являющихся JavaScript. Итак, зачем вам заголовок источника? BTW, любой может отправить заголовок Origin любым желаемым значением.

+1

Ну, у меня просто есть требование в моем API, чтобы проверить, где он был вызван, есть ли другой способ проверить это? Я не возражаю против CORS, мне просто нужен домен, где он был вызван – Escobar5

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-адрес может быть подделан.

+0

Nevermind предыдущий комментарий. – JayC

+0

Я имею в виду что-то вроде HttpRequest.UrlReferrer в webapi – Escobar5

Смежные вопросы