AcquireToken () из фонового задания

Я использую Azure Active Directory и ADAL для взаимодействия с Exchange EWS Office 365 с OAuth.

Я знаю, что вы можете использовать authContext.AcquireToken(), и он сделает все за вас. Он будет сохранять, использовать и обновлять токены для вас, а также запрашивать учетные данные пользователя, когда это необходимо. В моем случае проблема заключается в том, что мне нужно взаимодействие в фоновом веб-задании Azure, поэтому он не сможет запрашивать учетные данные пользователя.

Я пытался получить код авторизации, заставляющий пользователя переходить по URL-адресу из GetAuthorizationRequestURL(). Затем получение токена с использованием AcquireTokenByAuthorizationCode() и сохранение токена обновления в базе данных. Поэтому, когда фоновое задание должно подключиться к EWS, оно может использовать токен обновления (сохраненный в базе данных) с помощью AcquireTokenByRefreshToken().

Этот подход работает, но я не знаю, как получить новый токен обновления, если срок его действия истекает через 14 дней.

Есть идеи, как обновить токен обновления или как лучше использовать ADAL в фоновом задании?

Спасибо и привет !!


person Ricardo Polo Jaramillo    schedule 19.04.2015    source источник


Ответы (1)


Вот идея. Создайте простую консоль или приложение формы выигрыша, которое запрашивает ваш токен. В этом приложении используйте настраиваемый кеш, который сохраняет токены в переносном хранилище (например, в зашифрованном файле, см. https://github.com/AzureADSamples/NativeClient-DotNet). Запустите приложение один раз, чтобы заполнить кеш. Затем возьмите этот кеш и разверните его вместе со своим веб-заданием. Теперь около 90 дней с тобой все будет в порядке. Другой альтернативой является использование потоков имени пользователя и пароля, но это редко бывает хорошей идеей и влечет за собой множество важных ограничений.

person vibronet    schedule 19.04.2015
comment
Проблема в том, что приложение не только для меня. Мы хотим, чтобы пользователь зашел на веб-сайт и «Авторизовал» доступ к своему офису 365. Тогда фоновое задание будет делать что-то каждую ночь .. Вот почему учетные данные и процесс oauth должны запрашиваться на веб-сайте, но использование токенов в фоновом режиме. Любая идея? - person Ricardo Polo Jaramillo; 19.04.2015
comment
Ах, тогда это легко. Просто поделитесь кешем токенов между веб-сайтом и фоновой работой. Acquiretokensilent использует и обновляет токены обновления. Просто возьмите github.com/AzureADSamples/WebApp-WebAPI-OpenIDConnect-DotNet и пусть логика контроллеров работает в фоновом режиме. Важно то, что и веб-сайт, и работа работают с одним и тем же экземпляром кеша. - person vibronet; 19.04.2015