#ios #swift #access-token #adal #refresh-token
#iOS #swift #токен доступа #adal #обновить-токен
Вопрос:
Как я могу включить поддержку нескольких ресурсов в iOS с помощью ADAL.Искал на очень многих сайтах, но мне было трудно понять поток с несколькими ресурсами, с токеном обновления и токеном доступа.Кто-нибудь может кратко объяснить этот поток, пожалуйста?
Согласно библиотеке, ADTokenCacheStoreItem будет иметь accessToken будет равен нулю, если в элементе хранится токен обновления с несколькими ресурсами.Но всякий раз, когда я буду вызывать acquireTokenWithResource:ClientID:redirectUri: я получаю как токен доступа, так и токен обновления.Как я могу сообщить библиотеке, что у меня есть запрос с несколькими источниками.Есть ли какие-либо настройки, которые мне нужно сделать?
/*! Получен токен доступа. Должно быть равно нулю, если в элементе хранится токен обновления с несколькими ресурсами. / @property NSString accessToken;
А также, нужно ли мне вызывать acquireTokenWithResource:ClientID:redirectUri каждый раз перед вызовом каждого API с разными конечными точками или без них.Или я несу ответственность за кэширование / хранение токена доступа и даты истечения срока действия для каждого ресурса? Также как я могу обрабатывать автоматический вход в систему в случае с несколькими ресурсами?
Комментарии:
1. Я не совсем понимаю ваши опасения. Предполагая, что вы отправили запрос на авторизацию для «resource1» и получили токен обновления с несколькими ресурсами, затем, когда вы отправляете запрос на авторизацию для «resource2», вы просто получите токен доступа без запроса на аутентификацию пользователя (если токен обновления не истек между исходным запросом и сейчас). Вы можете использовать
acquireTokenWithResource:clientId:redirectUri:promptBehavior:userId:extraQueryParameters:completionBlock:
для обеспечения сбоя, а не запроса, если это ваше требование2. Предположим, у меня есть 10 вызовов API (для каждого вызова требуется токен доступа), 8 из которых имеют resource1 , а оставшиеся 2 имеют resource2, в этом случае нужно ли мне вызывать метод acquireTokenWithResource:ClientID:redirectUri: 10 раз? Или нам нужно поддерживать сопоставление кэша идентификатора ресурса и токена доступа, и нам нужно обрабатывать только случай истечения срока действия accessToken для каждого конкретного ресурса?
3. Вы вызываете
acquireTokenWithResource:clientId:redirector:
перед каждой попыткой доступа к ресурсу. Если в кэше есть действительный токен, этот токен будет возвращен. Если нет, то библиотека попытается использовать токен обновления для получения токена доступа. Если токен обновления истек, пользователю будет предложено выполнить повторную аутентификацию.4. Спасибо за ваше предложение. Я пытался использовать описанный выше подход, но я получаю разные токены обновления для каждой попытки вызова acquireTokenWithResource:ClientID:redirector: ожидается ли это? (Я думал, что только токен доступа будет отличаться для каждого запроса ресурса)? И как я могу получить токен обновления автоматически, если срок действия токена истек?
Ответ №1:
С ADAL вам просто нужно вызывать какую-либо форму acquireToken*
каждый раз, когда вашему приложению требуется токен доступа, предположительно для выполнения вызова API. ADAL должен позаботиться о кэшировании токенов, обновлении и т. Д. Для вас. Вам никогда не придется вручную использовать токены обновления.
Токены обновления из Azure AD по своей сути являются «мультиресурсными». То есть вы можете запросить токен доступа к ресурсу 1, получить эту пару токенов доступа обновить токен, а затем использовать токен обновления, чтобы получить токен доступа к ресурсу 2. Это позволяет вам получать токены для разных ресурсов «молча», что означает, что пользователь должен войти в систему только один раз.
Комментарии:
1. Спасибо за ваш ответ. Последнее сомнение.. Что делать, если в случае, если токен обновления истек? Насколько я помню, срок действия токена обновления составит 14 дней. Есть ли какой-либо способ, которым я могу получить его молча после истечения срока его действия, не запрашивая пользователя для повторного входа в систему?
2. Токены обновления из AAD не имеют фиксированного срока службы. Единственное, что вы можете сделать, это попытаться использовать их, и если запрос завершится неудачей, попросите пользователя снова войти в систему. Вы всегда должны заменять свой кэшированный токен обновления новым токеном обновления, который вы получили от AAD при каждом запросе токена. Если вы используете ADAL, обо всем этом позаботятся за вас.