Сделайте запрос авторизации обмена токеном с помощью AppAuth-Android, но НЕ с помощью пользовательских ярлыков - PullRequest
0 голосов
/ 16 ноября 2018

Таким образом, вся предпосылка этого вопроса может быть тупой и поэтому спорным вопросом, но здесь идет:

У меня есть собственный IdP с возможностью обмена токена oauth1 + секрет на токены OIDC. Это фактически тихий запрос авторизации для переключения уже зарегистрированных приложений со старой системы на новую. Это все функции .
Однако использование пользовательской вкладки для выполнения запроса означает, что он открывает браузер. При этом на телефонах без установленного Chrome браузер часто даже не закрывается, как это делают пользовательские вкладки Chrome после выполнения запроса. Я бы хотел полностью избежать этого, НЕ используя пользовательские вкладки для выполнения запроса.

Итак, я использовал okhttp для выполнения запроса. ohttp не обрабатывает редиректы на uris, поэтому при ответе я:

if (response.isRedirect()){
    Intent intent = new Intent(Intent.ACTION_VIEW, 
        Uri.parse(response.headers().get("location")));
    startActivity(intent);
}

Получает намерение net.openid.appauth.RedirectUriReceiverActivity, однако теперь необходимо проверить AuthorizationRequest request = PendingIntentStore.getInstance().getOriginalRequest(state);, и я не могу установить исходный запрос в PendingIntentStore, поскольку он недоступен в моем пользовательском performSilentAuthorizationRequest.

Должен ли я клонировать AppAuth-Android, чтобы просто взломать доступ к PendingIntentStore? Я полагаю, что я также могу расширить RedirectUriReceiverActivity и изменить его на использование автономной копии PendingIntentStore, к которой я могу получить доступ. Но фактически это одно и то же, просто обойти проверку RedirectUriReceiverActivity PendingIntentStore.

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

...