2013-05-17 42 views
1

我正在開發一個webapi,我目前正在執行基本身份驗證,但我也想檢查api是否從特定域名被調用,我如何檢查是否打電話給API是從一個特定的域名?Asp.net Webapi檢查發起人的域名

我使用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; 
+0

你找到答案了嗎? –

+0

@LeandroTupone尚未 – Escobar5

回答

0

瀏覽器執行JavaScript的同源策略。 CORS是解決問題的方法之一,而CORS則涉及到Origin頭文件。您擁有的客戶端代碼是C#,這意味着它在服務器中運行。非JavaScript客戶端沒有相同的源策略或CORS。那麼,你爲什麼需要起源頭?順便說一句,任何人都可以發送他想要的任何值的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 previous comment。 – JayC

+0

我的意思是像webapi中的HttpRequest.UrlReferrer – Escobar5