android - App Auth 库 Android 在请求 token 时抛出 "File not found exception"

标签 android oauth-2.0 appauth

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

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

我根据我的 oauth 提供商修改了 url。 我已经指定了一个有效的授权端点、客户端 ID、重定向 uri、 token uri、范围(openid、配置文件、电子邮件)、响应类型(代码)。我不知道是否有办法添加消费者 secret 。我在示例代码的任何地方都没有看到添加消费者 secret 的方法。 当我运行该应用程序时,我看到了我们的 sso 页面,我能够登录,重定向发生了。当获取 token 的请求被执行时,我得到一个异常。 token 请求失败。知道为什么会这样吗? token 交换 url 是正确的,我不确定为什么它提示在该特定 token 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,因此更改了授权和 token 端点以使用它。

不过,对于token端点来说,似乎毕竟应该是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 的问题 as is shown here

关于android - App Auth 库 Android 在请求 token 时抛出 "File not found exception",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638556/

相关文章:

ios - SFAuthenticationSession 如何在 Safari 中存储 session 相关的 cookie

iOS - 没有重定向的 AppAuth

android - onChildRemoved() 被多次调用

android - 如何使自定义 View 与可扩展 ListView 一起滚动......?

azure - Microsoft "converged"OAuth 授权组织 O365 帐户时出现错误 AADSTS90093

oauth-2.0 - 用于用户注册、密码重置、忘记密码等的 Keycloak 端点

android - Android AVD 的最佳屏幕分辨率是多少?

Android 谷歌 Oauth 问题

android - 如何修复 "Activity has leaked ServiceConnection net.openid.appauth.browser.CustomTabManager$1@41fb56d0 that was originally bound here"错误

android - 重定向 URI 是否为 native 移动应用程序的 OAuth 实现提供安全性?