2016-09-20 63 views
0

我正在嘗試製作基於AzureAD的應用程序。我有一個功能性的後端,我也有一個功能性的客戶端服務,可以通過在頭中傳遞訪問令牌來連接到應用程序。ADAL.js使用授權令牌的SPA請求

然而,當我嘗試使用ADAL.js通過這個代碼授權:

$.ajax({ 
     url: '/api/folder', 
     type: 'POST', 
     headers: { 'Authorization': 'Bearer ' + getAuthHeaders(), }, 
     xhr: function() { 
      myXhr = $.ajaxSettings.xhr(); 
      if (myXhr.upload) { 
       myXhr.upload.addEventListener('progress', progressBar, false); 
      } 
      return myXhr; 
     }, 
     success: completeHandler = function (data) { 
      alert('Success!'); 
      modal.remove(); 
      updateFileBrowsers(folderName); 
     }, 
     error: errorHandler = function (jqXHR, textStatus, errorThrown) { 
      alert('Fail! :('); 
     }, 
     data: formData, 
     cache: false, 
     contentType: false, 
     processData: false 
    }, 'json'); 

我只在來自服務器的響應得到了401。該控制器非常簡單,它在API訪問點上具有整個控制器的[授權]符號。

我已經檢查過,令牌不是空的,它不是。我已將該應用程序添加到Azure應用程序。

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 

我能看到的唯一區別是,一個使用ADAL:使用所使用的客戶端後臺的應用的控制器誰登錄,然後設置標題的時候做的完全一樣的方式生成連接成功.js和一個使用.NET本機類來設置請求標頭。

說明:httpClient的作用像一個魅力。 SPA解決方案拒絕工作。

回答

0

基於401錯誤,似乎您使用的令牌無法爲您的服務進行身份驗證。

一個可能的原因是您對該資源使用了不正確的標記。 您可以解析來自here的令牌,以檢查令牌中的aud聲明是否與您爲Web API配置的受衆匹配。

此錯誤的另一個原因是當您使用過期令牌時。

我建議您使用爲客戶端後臺應用程序工作的令牌來查看問題是否已修復。