Android App Auth库在请求令牌时抛出“找不到文件异常”

时间:2018-12-05 18:26:46

标签: android oauth-2.0 appauth

我正在使用AppAuth库进行Oauth2身份验证。 https://github.com/openid/AppAuth-Android

我正在使用Google的应用程序身份验证示例。 https://codelabs.developers.google.com/codelabs/appauth-android-codelab/#0

我根据我的oauth提供商修改了网址。 我指定了一个有效的授权端点,客户端ID,重定向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 :(得分:0)

您是否有机会使用模拟器? 我有完全相同的问题。对于仿真器,本地主机为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或更多,因此肯定是网址as is shown here的问题