0
已開發一個Web API,它使用ADAL .Net v3.14進行身份驗證。現在這裏是獲取access_token的代碼(使用ADAL提供的默認TokenCache)AcquireTokenAsync在Web API中使用UserAssertion失敗
var provider = "https://login.microsoftonline.com/XXXXXXXX.onmicrosoft.com"
var service = "https://XXXXXXXX.onmicrosoft.com/XXXXXXService" //which is registered as service in Azure AD
var clientId = "01d2b529-XXXX-XXXX-b794-XXXXXXXXXXXX" //client app registered on Azure AD
AuthenticationContext authContext = new AuthenticationContext(provider);
UserPasswordCredential uc = new UserPasswordCredential(user, password);
AuthenticationResult result = authContext.AcquireTokenAsync(service, clientId, uc).ConfigureAwait(false).GetAwaiter().GetResult();
它成功返回Access_Token。現在1小時後,當該令牌到期,我已經實現下面的代碼它使用Refresh_Token更新(假設refresh_token會從緩存中被視爲實現ADAL TokenCache):
AuthenticationContext authContext = new AuthenticationContext(provider);
UserAssertion userAssertion = new UserAssertion(oldtoken, "urn:ietf:params:oauth:grant-type:jwt-bearer", upn);
AuthenticationResult result = authContext.AcquireTokenAsync(resource,clientId, userAssertion).ConfigureAwait(false).GetAwaiter().GetResult();
var token = result.AccessToken
此代碼給出錯誤:
「JWT令牌無效,AADSTS50027:無效的JWT令牌,令牌格式無效」。
我檢查了'oldtoken'變量,它是有效的JWT標記。
嗨,我正在web api端更新令牌,是不是可以使用userId來更新令牌而不是web api端的用戶憑據?此外,客戶端應用程序(如AngularJS SPA)將如何做,因爲這些應用程序將調用我們的Web API以獲取access_token – devangi
web api端不能更新訪問令牌,因爲令牌緩存中不存在刷新令牌。如果客戶端是AngularJS SPA,則可以使用ADAL JS,它檢查現有令牌(在緩存中)的預計到期時間,並且如果令牌即將到期,則會使用不可見的iFrame將新令牌(續訂)請求發送到Azure AD。請參閱文檔[here](http://www.cloudidentity.com/blog/2014/10/28/adal-javascript-and-angularjs-deep-dive/)。並參考[代碼示例](https://github.com/Azure-Samples/active-directory-javascript-singlepageapp-dotnet-webapi)。 –
感謝您的幫助,我錯過了clientId,因爲它未能獲得新的令牌 – devangi