Библиотека приложения App Android выдает "File not found исключение" при запросе токена
Я использую библиотеку AppAuth для аутентификации Oauth2. https://github.com/openid/AppAuth-Android
Я использую пример аутентификации приложения Google. https://codelabs.developers.google.com/codelabs/appauth-android-codelab/
Я изменил URL в соответствии с моим oauth-провайдером. Я указал действительную конечную точку авторизации, идентификатор клиента, URI перенаправления, URI токена, область действия (openid, профиль, электронная почта), тип ответа (код). Я не знаю, есть ли способ добавить потребительскую тайну. Я не видел нигде в примере кода способ добавить потребительский секрет. Когда я запускаю приложение, я вижу нашу страницу sso, я могу войти, происходит перенаправление. Когда выполняется запрос на получение токена, я получаю исключение. Запрос токена не выполнен. Есть идеи, почему это произойдет? URL-адрес обмена токенами верен, и я не уверен, почему он жалуется на то, что файл не найден по этому конкретному URL-адресу токена. Есть какие-нибудь указания на то, чтобы больше копаться в этом вопросе?
W/AppAuthSample: Token Exchange failed
AuthorizationException: {"type":0,"code":3,"errorDescription":"Network error"}
at net.openid.appauth.AuthorizationService$TokenRequestTask.doInBackground(AuthorizationService.java:244)
at net.openid.appauth.AuthorizationService$TokenRequestTask.doInBackground(AuthorizationService.java:206)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.io.FileNotFoundException: <token_url>
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:251)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:26)
at net.openid.appauth.AuthorizationService$TokenRequestTask.doInBackground(AuthorizationService.java:239)
at net.openid.appauth.AuthorizationService$TokenRequestTask.doInBackground(AuthorizationService.java:206)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
1 ответ
Вы используете эмулятор случайно? У меня была точно такая же проблема. Для эмулятора локальным хостом является 10.0.0.2, поэтому изменили конечные точки авторизации и токена, чтобы использовать их.
Однако, похоже, что для конечной точки токена он должен быть локальным.
Итак, мой последний сервис конфигурации выглядит так:
AuthorizationServiceConfiguration serviceConfiguration = new AuthorizationServiceConfiguration(
Uri.parse("http://10.0.2.2:8080/oauth/authorize"), // authorization endpoint (localhost endpoint)
Uri.parse("http://localhost:8080/oauth/token") // token endpoint (localhost endpoint)
);
Надеюсь, это поможет.
Причина для java.io.FileNotFoundException
является то, что код ответа http 400 или более, так что определенно проблема с URL, как показано здесь