Я встраиваю Microsoft Teams в наше родное приложение для iOS через модуль Flutter (пользовательский интерфейс Flutter, размещенный внутри собственного контейнера iOS). Тот же подход работает на Android, но на iOS мы сталкиваемся с ошибкой аутентификации после закрытия и повторного открытия пользовательского интерфейса клиента Teams. Настройка
Пользовательский интерфейс клиента Teams запускается из модуля Flutter внутри собственного контейнера приложения iOS
Аутентификация использует Microsoft Graph API
Токены доступа получаются на стороне сервера (корпоративный CAS) и передаются в мобильное приложение
При первом запуске токены работают, а запросы Graph выполняются
После закрытия и повторного открытия Teams (тот же сеанс приложения) вход в систему не выполняется. на только для iOS
Проблема
На iOS после закрытия и повторного открытия клиента Teams мы получаем:
AADSTS165000: Request tokens do not match user context
Похоже, это несоответствие токена/контекста пользователя, вызванное тем, что iOS повторно использует некоторый устаревший контекст аутентификации/сессии, даже несмотря на то, что мы снова предоставляем новые токены.
Примечания:
Сброс состояния Flutter (сброс движка / «возрождение приложения») не надежно исправляет это
Android не демонстрирует такое поведение при той же выдаче токена на стороне сервера.
Похоже, что состояние аутентификации хранится вне жизненного цикла Flutter (например, кеш MSAL, хранилище файлов cookie WebView, ASWebAuthenticationSession, Keychain и т. д.)
Что я пробовал
Воссоздание FlutterEngine/сброс состояния модуля Flutter
Повторное открытие пользовательского интерфейса клиента Teams из «холодного» состояния Flutter
Повторный запрос токенов с сервера (новый токен доступа), но iOS по-прежнему не работает после повторно открыть
Вопросы
Во встроенных сценариях iOS сохраняет ли MSAL / WebView / Teams состояние аутентификации вне жизненного цикла механизма Flutter (например, кэш токена связки ключей или общее хранилище файлов cookie)?
Есть существует рекомендуемый способ полностью очистить/сбросить контекст аутентификации на iOS, чтобы можно было установить новый контекст пользователя (например, MSAL RemoveAccount, очистка файлов cookie WKWebView, очистка состояния ASWebAuthenticationSession и т. д.)?
Кто-нибудь видел, чтобы AADSTS165000 происходило на только iOS после закрытие/повторное открытие встроенного интерфейса Teams и какова основная причина?
Я встраиваю Microsoft Teams в наше [b]родное приложение для iOS[/b] через [b]модуль Flutter[/b] (пользовательский интерфейс Flutter, размещенный внутри собственного контейнера iOS). Тот же подход работает на [b]Android[/b], но на iOS мы сталкиваемся с ошибкой аутентификации после закрытия и повторного открытия пользовательского интерфейса клиента Teams. [b]Настройка[/b] [list] [*]Пользовательский интерфейс клиента Teams запускается из модуля Flutter внутри собственного контейнера приложения iOS
[*]Аутентификация использует [b]Microsoft Graph API[/b]
[*][b]Токены доступа получаются на стороне сервера[/b] (корпоративный CAS) и передаются в мобильное приложение
[*]При первом запуске токены работают, а запросы Graph выполняются
[*]После закрытия и повторного открытия Teams (тот же сеанс приложения) вход в систему не выполняется. на [b]только для iOS[/b]
[/list] [b]Проблема[/b]
На iOS после закрытия и повторного открытия клиента Teams мы получаем: [code]AADSTS165000: Request tokens do not match user context[/code] Похоже, это [b]несоответствие токена/контекста пользователя[/b], вызванное тем, что iOS повторно использует некоторый [b]устаревший контекст аутентификации/сессии[/b], даже несмотря на то, что мы снова предоставляем новые токены. Примечания: [list] [*]Сброс состояния Flutter (сброс движка / «возрождение приложения») [b]не[/b] надежно исправляет это
[*]Android не демонстрирует такое поведение при той же выдаче токена на стороне сервера.
[*]Похоже, что состояние аутентификации хранится вне жизненного цикла Flutter (например, кеш MSAL, хранилище файлов cookie WebView, ASWebAuthenticationSession, Keychain и т. д.)
[/list] [b]Что я пробовал[/b] [list] [*]Воссоздание FlutterEngine/сброс состояния модуля Flutter
[*]Повторное открытие пользовательского интерфейса клиента Teams из «холодного» состояния Flutter
[*]Повторный запрос токенов с сервера (новый токен доступа), но iOS по-прежнему не работает после повторно открыть
[/list] [b]Вопросы[/b] [list] [*]Во встроенных сценариях iOS сохраняет ли [b]MSAL / WebView / Teams[/b] состояние аутентификации [b]вне[/b] жизненного цикла механизма Flutter (например, кэш токена связки ключей или общее хранилище файлов cookie)?
[*]Есть существует рекомендуемый способ [b]полностью очистить/сбросить[/b] контекст аутентификации на iOS, чтобы можно было установить новый контекст пользователя (например, MSAL RemoveAccount, очистка файлов cookie WKWebView, очистка состояния ASWebAuthenticationSession и т. д.)?
[*]Кто-нибудь видел, чтобы [b]AADSTS165000[/b] происходило на [b]только iOS[/b] после закрытие/повторное открытие встроенного интерфейса Teams и какова основная причина?