Библиотека приложения App Android выдает «File not found исключение» при запросе токена - PullRequest
0 голосов
/ 05 декабря 2018

Я использую библиотеку AppAuth для аутентификации Oauth2.https://github.com/openid/AppAuth-Android

Я использую пример аутентификации приложения Google.https://codelabs.developers.google.com/codelabs/appauth-android-codelab/#0

Я изменил 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 Ответ

0 голосов
/ 04 января 2019

Вы используете эмулятор случайно?У меня была точно такая же проблема.Для эмулятора локальным хостом является 10.0.0.2, поэтому изменили конечную точку авторизации и токена, чтобы использовать ее.

Однако, похоже, что для конечной точки токена это должен быть localhost.

Итак, моя последняя конфигурация службы выглядит следующим образом:

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 как показано здесь

...