Как использовать библиотеку ADAL при наличии нескольких ресурсов

Как я могу включить поддержку нескольких ресурсов в iOS с помощью ADAL. Искал на многих сайтах, но мне трудно понять поток с несколькими ресурсами, с токеном обновления и токеном доступа. Может ли кто-нибудь кратко объяснить этот поток, пожалуйста?

Согласно библиотеке, ADTokenCacheStoreItem будет иметь accessToken, который будет равен нулю, если элемент хранит токен обновления с несколькими ресурсами. что мой запрос с несколькими источниками. Есть ли какие-либо настройки, которые мне нужно сделать?

/*! Токен доступа получен. Должно быть равно нулю, если элемент хранит токен обновления с несколькими ресурсами. / @property NSString accessToken;

А также, нужно ли мне каждый раз перед вызовом каждого API-интерфейса с разными конечными точками или без них вызывать методAcquireTokenWithResource:clientId:redirectUri. Или я обязан кэшировать/сохранять токен доступа и дату истечения срока действия для каждого ресурса? Кроме того, как я могу обрабатывать автоматический вход в случае нескольких ресурсов?


person Shyam    schedule 12.10.2016    source источник
comment
Я не совсем понимаю ваши опасения. Предполагая, что вы отправили запрос на авторизацию для ресурса1 и получили токен обновления для нескольких ресурсов, тогда, когда вы выдаете запрос на авторизацию для ресурса2, вы просто получите токен доступа без запроса аутентификации пользователя (если только срок действия токена обновления не истек между исходный запрос и сейчас). Вы можете использовать acquireTokenWithResource:clientId:redirectUri:promptBehavior:userId:extraQueryParameters:completionBlock:, чтобы гарантировать отказ, а не подсказку, если это ваше требование.   -  person Paulw11    schedule 12.10.2016
comment
Предположим, у меня есть 10 вызовов API (для каждого вызова требуется токен доступа), 8 из которых имеют resource1 , а остальные 2 имеют ресурс2, в этом случае мне нужно вызывать методAcquireTokenWithResource:clientId:redirectUri: 10 раз? Или нам нужно поддерживать сопоставление кеша идентификатора ресурса и маркера доступа, и нам нужно обрабатывать только случай истечения срока действия маркера доступа для каждого конкретного ресурса?   -  person Shyam    schedule 12.10.2016
comment
Вы вызываете acquireTokenWithResource:clientId:redirector: перед каждой попыткой доступа к ресурсу. Если в кеше есть действительный токен, то этот токен будет возвращен. Если нет, то библиотека попытается использовать токен обновления для получения токена доступа. Если срок действия токена обновления истек, пользователю будет предложено повторно пройти аутентификацию.   -  person Paulw11    schedule 12.10.2016
comment
Спасибо за ваше предложение. Я пытался использовать описанный выше подход, но я получаю разные токены обновления для каждой попытки вызова acquireTokenWithResource:clientId:redirector: Ожидается ли это? (Я думал, что для каждого запроса ресурса будет отличаться только токен доступа)? И как я могу получить Refresh Token молча, если срок действия токена истек?   -  person Shyam    schedule 12.10.2016


Ответы (1)


С ADAL вам просто нужно вызывать некоторую форму acquireToken* каждый раз, когда вашему приложению требуется токен доступа, предположительно для выполнения вызова API. ADAL должен позаботиться о кэшировании токенов, обновлении и т. д. для вас. Вам никогда не придется вручную использовать токены обновления.

Маркеры обновления из Azure AD по своей сути являются «мультиресурсными». То есть вы можете запросить токен доступа к ресурсу 1, получить этот токен доступа + токен обновления, а затем использовать токен обновления для получения токена доступа к ресурсу 2. Это позволяет вам получать токены для разных ресурсов «молча» , что означает, что пользователю нужно войти в систему только один раз.

person dstrockis    schedule 17.10.2016
comment
Спасибо за ваш ответ. Последнее сомнение. Что, если срок действия Refresh Token истек? Насколько я помню, срок действия токена обновления составляет 14 дней. Можно ли как-то получить его автоматически после истечения срока его действия, не запрашивая у пользователя повторный вход в систему? - person Shyam; 18.10.2016
comment
Жетоны обновления из AAD не имеют фиксированного времени жизни. Единственное, что вы можете сделать, это попытаться использовать их, и если запрос не будет выполнен, попросите пользователя снова войти в систему. Вы должны всегда заменять кэшированный токен обновления новым токеном обновления, полученным от AAD при каждом запросе токена. Если вы используете ADAL, обо всем этом позаботятся за вас. - person dstrockis; 18.10.2016