Я использую пакет flutter_appauth во Flutter для обработки потоков кода авторизации для IdentityServer4 и не смог найти метод, с помощью которого можно вызвать конечную точку /endsession
в iOS.
Чтобы понять, что я пытаюсь сделать, это моя рабочая реализация Android с использованием пакета url_launcher
:
var signOutUrl = '${_endSessionUrl}?id_token_hint=${_idToken}&post_logout_redirect_uri=${AppConfig.oidcCallbackUri}';
await launch(signOutUrl);
Используя тот же код, iOS просто сообщает общая информация PlatformException
без дополнительных подробностей относительно причины, хотя исключение, безусловно, связано с полным обходом AppAuth путем простой попытки запустить URL.
Решение в в этом комментарии GitHub появляется работать с использованием OKTA, но при использовании IdentityServer4 я получаю следующее исключение, которое немедленно завершает работу приложения Flutter:
[DEVICE LOG] 2020-04-16 08:55:01.039163-0400 localhost Runner[18007]: (CoreFoundation) *** Terminating app due to uncaught exception 'Attempted to create a token exchange request from an authorization
response with no authorization code.', reason: 'Attempted to create a token exchange request from an authorization response with no authorization code.'
Это имеет смысл, учитывая, что моя конечная точка /endsession
не возвращает ответ на авторизацию.
В любом случае решение вызова конечной точки авторизации с URL-адресом завершения в лучшем случае является хаком, но, похоже, это «принятый» способ сделать это.
Вся документация, которую я могу найти, используя AppAuth, говорит, что выхода можно получить, просто «забыв» токены в приложении, но так как браузеры сохранить аутентичные куки, вход в систему происходит автоматически. У пользователей нет возможности выбрать другую учетную запись.
Также стоит отметить, что это не является указанием c для Flutter, пакета flutter_appauth
или IdentityServer4. Этот комментарий к собственному пакету AppAuth- iOS описывает ту же проблему с тем же решением, как описано выше.
Абсолютно должна быть возможность выйти (и, следовательно, удалить браузер). куки) на iOS, но я в полной растерянности относительно того, как этого добиться.