我正在使用iOS ADAL庫2.2.6版並在成功登錄後接收刷新令牌。現在我想通過使用此刷新令牌進行靜默調用。我嘗試使用下面的方法,但它無法返回訪問令牌。iOS ADAL-使用刷新令牌進行靜默呼叫
ADAuthenticationContext *authContext;
[authContext acquireTokenSilentWithResource:resourceId
clientId:clientId
redirectUri:redirectUri
userId:strUserID //loggedIn userID
completionBlock:^(ADAuthenticationResult *result){
// It alway throws an error //Please call the non-silent acquireTokenWithResource methods.
if(result.error){
ADAuthenticationError *error = nil;
authContext = [ADAuthenticationContext authenticationContextWithAuthority:inputData.authority error:&error];
[authContext acquireTokenWithResource:inputData.ResourceID
clientId:inputData.ClientId // Comes from App Portal
redirectUri:inputData.RedirectUri // Comes from App Portal
completionBlock:^(ADAuthenticationResult *result)
{
if (AD_SUCCEEDED != result.status){
// Show alert with error description
}
else{
//Handle Success token
}
}];
}else{
//Handle Success token
}
}];
但它總是拋出一個錯誤說"The user credentials are needed to obtain access token. Please call the non-silent acquireTokenWithResource methods."
有沒有什麼辦法讓使用刷新令牌無聲的電話嗎?請幫助我。提前致謝。
感謝您的答覆。我會在今天檢查,意味着你可以看看我更新的問題(代碼)。 –
上面的邏輯很好用。但訪問令牌在1小時後過期。因此,每次我們將服務調用爲「承載<訪問令牌>」時,我們是否在調用內部服務器調用之前調用上面的「acquireTokenSilentWithResource:」邏輯來獲取刷新令牌? –
您應該嘗試調用API。如果您遇到訪問錯誤,則應調用acquireTokenSilentWithResource()。但是請記住,如果刷新令牌無效,會提示用戶。如果你不想這樣做(用戶正在做一些重要的事情,或者你可以等待提示他們),那麼在調用acquireToken()之前,你可能需要等待,所以你想以不同的方式處理錯誤。 –