2016-12-07 45 views
0

我按照this後的思路進行了操作。我只是做了一些改變,比如使用jwt載體令牌認證在同一端口上運行ASP.net核心和Angular 2前端。使用ADAL.js訪問Web API時獲取「invalid_token」

我正在使用ADAL.js來驗證Azure AD,並且此過程似乎正常工作。我從Azure AD獲取令牌並將其保存在本地存儲中。

當我使用這是越來越保存在本地存儲打電話給我API我碰到角2 401

呼叫到的WebAPI都位於同一個端口上的令牌。

var token = localStorage["adal.access.token.keye1b88e53-810a-474d-93af-bb98c956d01e"];  
     console.log(token); 
     let headers = new Headers({ 
      'Authorization': 'Bearer ' + token, 'Accept': 'application/json; odata.metadata=minimal' 
     }); 
     let options = new RequestOptions({ headers: headers }); 
     return this.http.get('https://localhost:44375/api/values', options) 
      .map((response: Response) => response.json()).subscribe((val) => { 
     console.log(val);}); 

這個調用回來與401與此消息

承載誤差= 「INVALID_TOKEN」,ERROR_DESCRIPTION = 「令牌是過期」

任何想法讚賞。謝謝!

回答

0

默認情況下,我們獲取的令牌將在一小時內過期。根據您的錯誤消息,您的令牌應該已過期,每個令牌都會有一個過期時間戳,您可以檢查本地存儲中的密鑰adal.expiration.key1b88e53-810a-474d-93af-bb98c956d01e是否已過期。

其實,如果你正在使用你的應用程序adal-angular模塊,作爲其Github上庫中的描述:

你可能有

任何服務調用的代碼將保持不變。 Adal的攔截器會自動爲每個傳出呼叫添加令牌。

我們不需要在出門請求中手動設置授權標頭。此外,如果您組成,您可以嘗試使用:

config.headers['Authorization'] = 'Bearer ' + localStorage.getItem("adal.idtoken"); 

並手動更新您的令牌。 enter image description here

+0

我沒有使用示例中提到的adal-angular。由於adal-angluar與Angular-2不兼容。我們只是使用Adal.js進行身份驗證。這就是爲什麼我設置每個傳出呼叫的授權標題的原因。而且,即使我正在更新令牌併發送請求,我仍然看到相同的錯誤。 – Pickle

+0

現在,當我續訂令牌時,我看到 '承載錯誤=「invalid_token」,error_description =「觀衆無效」 – Pickle

+0

這是'aud'聲明與接收方所期望的不同的結果。你用什麼運行時進行驗證? –

0

在我改變

app.UseJwtBearerAuthentication(new JwtBearerOptions 
     { 
      Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], 
      Audience = Configuration["Authentication:AzureAd:Audience"] 
     }); 

app.UseJwtBearerAuthentication(new JwtBearerOptions { 
       Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], 
       Audience = Configuration["Authentication:AzureAd:ClientId"], 
       TokenValidationParameters = new TokenValidationParameters { SaveSigninToken = true } 

      }); 
+0

此更改是否有效?你是否能夠擺脫錯誤消息「invalid_token」? –

+0

是的,這個改變對我有用。 – Pickle

0
在Web API結束:

此外,還可以通過創建adal.js本地存儲檢查所有的鍵/值

您還可以將AD應用程序的應用程序ID設置爲在Web API和客戶端應用程序中都是相同的,如**clientId**,並將su您可以在清單中啓用**"oauth2AllowImplicitFlow": true,**(AD的可用天藍色門戶)。