Android-библиотека App Auth выдает исключение File not found при запросе токена

Я использую библиотеку 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) 

person Karu    schedule 05.12.2018    source источник


Ответы (1)


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

Однако, похоже, что для конечной точки токена это все-таки localhost.

Итак, моя последняя serviceConfiguration выглядит так:

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

person Syntax    schedule 04.01.2019