2017-03-24 84 views
0

我有一個安全的網絡api用令牌保護,我們讓它啓用CORS,並且我們希望確保API只被角APP和Xamarin應用(android ,ios,uwp)。Xamarin消費WEB API(CORS)

通常用CORS你明確地說出哪個起源可以使用WEB API。然而,xamarin應用程序不是源(域名),所以我如何在這裏檢查CORS?

+1

所以它是不是真的這麼多,你要檢查CORS只要你想以確保只有您的Xamarin應用程序和Angular應用程序可以連接您的API,實質上阻止其他應用程序。正確?另外一個有用的信息是我們在討論一個網絡API,並且你是否使用了異步功能? – Kyle

+0

也許對'token'的清晰度 - 你提到它已經(已經)限制API訪問的方法? – EdSF

回答

1

如果您使用異步Web API,那麼您可以在重寫SendAsync時添加一個檢查,這將強制API驗證請求,然後再允許它通過您的實際代碼。下面是一個模擬示例,說明如何通過檢查來自Xamarin移動應用程序的自定義用戶代理字符串來執行此操作。你可以很容易地明顯改變這種檢查別的專有有關Xamarin應用所有進來的請求,如其他自定義頁眉等

public class SecureMyApi : DelegatingHandler { 
    protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) 
    { 
      // Extra security stop to verify mobile app should have access to API 
      var httpRequest = HttpContext.Current.Request; 

      if (!string.IsNullOrWhiteSpace(httpRequest.UserAgent) && (httpRequest.UserAgent.StartsWith(ConfigurationManager.AppSettings["MyCustomUserAgentString"]))) 
      { 
       // Allow user to pass through 
      } 
      else 
      { 
       if (request.Method != HttpMethod.Get) 
       { 
        return request.CreateErrorResponse(HttpStatusCode.BadRequest, "You do not have permission to access the requested endpoint."); 
       } 
      } 

     return await base.SendAsync(request, cancellationToken); 
    } 
}