应用程序身份验证库 Android 在请求令牌时抛出"File not found exception"



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

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

我根据我的oauth提供者修改了url。我已经指定了一个有效的授权端点、客户端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) 

您是否在使用模拟器?我也有同样的问题。对于模拟器,本地主机是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肯定有问题,如所示

最新更新