2016-03-25 4 views
1

В моем сценарии пользователь предоставляет разрешение для моего приложения AAD время от времени читать их электронную почту в серверном процессе с использованием API-интерфейса Microsoft Graph. В то время, когда пользователь предоставляет разрешение, я получаю токен, используя authContext.GetAuthorizationRequestURL и authContext.AcquireTokenByAuthorizationCodeAsync. После этого, когда мне нужен маркер доступа, я выполнить следующее:Как правильно обновить токен аутентификации ADAL для вызова сервера на сервер

TokenCache tokenCache; // deserialized 
    AuthenticationContext authContext = CreateAuthContext(authority, tokenCache); 
    AuthenticationResult authResult = await authContext.AcquireTokenAsync(
      resource, 
      new ClientCredential(clientId, clientKey)); 
    return authResult.AccessToken; 

К сожалению, требующий API, MS Graph с результирующим маркером доступом возвращает 403 (Запрещено).

У меня создается впечатление, что я не нахожу правильный аромат AcquireToken *() с правильной информацией. Кто-нибудь знаком с этим сценарием?

ответ

0

Перегрузка AcquireTokenAsync, указанная в вопросе, будет использовать токен для приложения. Необходима перегрузка AcquireToken, которая принимает параметры ClientCredential и UserIdentifier, но, к сожалению, такой перегрузки не существует.

Однако вы можете продолжать использовать токен доступа до истечения срока его действия (проверьте с помощью AuthenticationResult.ExpiresOn), а затем используйте AuthenticationResult.RefreshToken с API AcquireTokenByRefreshTokenAsync, чтобы получить новый токен доступа.

+0

Прохладный, спасибо. Я выяснил, что такое токен. Я закончил работу над своим кодом, создав и передав также UserAssertion, состоящий из: предыдущего токена доступа, имени пользователя и загадочной строки: '' "urn: ietf: params: oauth: grant-type: jwt-bearer ". Кажется, это работает. Можете ли вы прокомментировать обоснованность этого решения? – Charles

+0

Решение звучит хорошо для меня. –

+0

Это вообще не работало для меня. В настоящее время у меня, похоже, есть решение, которое работает с использованием AcquireTokenUsingRefreshToken(). – Charles