Как повторно использовать маркер доступа для будущего запроса и как обновить маркер доступа Android Outlook API

В Примере OutlookQuickStart для Android отлично работает в первом запросе после logon ().

Теперь я хочу продолжать подключать свое приложение к этому пользователю и продолжать проверять новые письма..

Как повторно использовать маркер доступа и создать запрос для проверки новых сообщений электронной почты?

Нужно ли сохранять маркер доступа, обновить маркер ?


Как я могу обновить маркер в Android, если он истек.

1 ответ

  1. Согласно документации для библиотеки auth по адресу https://github.com/AzureAD/azure-activedirectory-library-for-android , библиотека кэширует маркер и обновить маркер для вас. Таким образом, вы бы просто использоватьacquireTokenSilentSync, чтобы получить маркер каждый раз, когда вам это нужно. Эта функция возвращает текущий маркер из кэша, если он все еще действителен, и обновляет его, если он истек.

    UPDATE: я более подробно рассмотрел пример, который вы используете, и Outlook SDK, который он использует. Главное здесь-DependencyResolverобъект. Передайте этот объект OutlookClientконструктору. Затем в любое время , когда вы делаете вызов API с этимOutlookClient, он просто вызывает getCredentialsпереопределение, которое вы предоставляете при создании DependencyResolver.

    Так как образец стоит, вы должны быть в состоянии сделать несколько вызовов через это OutlookClientбез необходимости изменять его вообще. Однако через час после истечения срока действия маркера доступа вызовы начнут завершаться ошибкой. Исправление для этого было бы изменить getCredentialsпереопределение на всегда вызывать acquireTokenSilentSync. Что-то вроде:

    @Override
    public Credentials getCredentials() {
        logger.debug("getCredentials in resolver called");
    
        AuthenticationResult result = mAuthContext.acquireTokenSilentSync(
            scopes, 
            getResources().getString(R.string.AADClientId), 
            UserIdentifier.getAnyUser());
    
        logger.debug("AcquireTokenSilentSync SUCCESS");
        logger.debug("Token expires: ", result.getExpiresOn());
        logger.debug("Token: ", result.getAccessToken());
        return new OAuthCredentials(result.getAccessToken());
    }
    

    Предупреждение: я не могу запустить этот код для его проверки из-за проблем с запуском эмулятора Android на моей машине dev :(.