2017-04-11 74 views
0

嗨有效我創建了個人帳戶一個MVC SPA的應用程序啓用併成功能夠獲得訪問令牌註冊過程後的accessToken不跨域API

我也創造了個人賬戶WEB API項目啓用。並在本地主機上託管MVC和API項目。

我試圖從保存在我的會話存儲承載令牌的MVC應用程序訪問API。只要兩個項目都在localhost中,它就可以正常工作。我在Azure中託管了API項目,並且如果我嘗試使用Web應用程序創建的不記名令牌從本地主機MVC應用程序訪問它,API調用將始終返回「未授權」。

示例代碼:

MVC應用:

$.ajax({ 
     url: 'https://azureapi/api/getProducts', 
     headers: { 
      'Authorization': 'Bearer ' + accesstoken, 
      'Content-Type': 'application/json; charset=utf-8' 
     }, 
     type: "POST", /* or type:"GET" or type:"PUT" */ 
     dataType: "json", 
     data: JSON.stringify(model), 
     success: function (result) { 


     }, 
     error: function (e) { 
      debugger; 
      console.log(e.responseText); 
     } 
    }); 

API項目:

[Authorize] 
    [Route("getProducts")] 
    [HttpPost] 
    public HttpResponseMessage GetProducts(ProductCriteria model) 
    {} 

在WEB API 啓用CORS

// Configure Web API to use only bearer token authentication. 
     config.SuppressDefaultHostAuthentication(); 
     config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 
     var enableCORS = new EnableCorsAttribute("*", "*", "*"); 
     config.EnableCors(enableCORS); 
+1

是因爲CORS(預檢OPTIONS請求未通過)或拒絕請求他們是否拒絕了您的應用程序後端代碼(例如訪問令牌驗證)? –

+0

我沒有線索。如果我嘗試在fiddler中運行請求,即使我在Auth頭文件中傳遞了有效的不記名令牌,我也會得到「未授權」,如果我在本地主機中同時託管了MVC和API解決方案,那麼相同的持票人令牌就可以工作。我是否需要在API的web.config中添加任何設置? – DevExpress

+1

您可能需要確保兩個站點共享相同的machineKey。 –

回答

0

正如克里斯在他的評論中提到的,爲了讓站點A將令牌傳遞給站點B和站點B以「驗證」或「授權」它,兩個站點必須共享相同的MachineKey。

我相信這可以在兩個網站的Web.Config文件中設置,但我沒有嘗試過(害怕破壞我的網站!)。

這裏有一個討論:How to set machineKey on Azure Website

我問過類似的問題在這裏作爲一個更大的任務的一部分:ASP.NET Identity 2.0 - Is the expiry timespan stored in the token & different sub-domains

+0

謝謝!但我仍然想知道機器鍵是如何解決這個問題的。將挖更多.. – DevExpress