Библиотека приложения 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, как показано здесь

Другие вопросы по тегам