android - App Auth library Android 在请求令牌时抛出“找不到文件异常”
问题描述
我正在使用 AppAuth 库进行 Oauth2 身份验证。 https://github.com/openid/AppAuth-Android
我正在使用谷歌的应用程序身份验证示例。 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)
解决方案
您是否有机会使用模拟器?我有完全相同的问题。对于模拟器,本地主机是 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 的问题,如此处所示
推荐阅读
- c++ - myfunc 没有函数模板的实例
- c++ - 单链表上的冒泡排序最糟糕的时间复杂度?
- go - 我试图测试我用 Go 编写的代码,但我不断收到这个错误,我不知道为什么
- python-3.x - Python - 从一个类中获取列表/字典,在另一个类中进行修改并将修改值返回给第一类
- spring-boot - 在 Spring Boot WebSocket 应用程序中为用户生成唯一的 URL 后缀
- php - 如何在 URL 中获取 Id 以使用 Symfony 5 显示评论?
- laravel - 带循环的轮播组件
- javascript - 简化嵌套对象并找到特定属性的总和
- excel - 关注特定单元格时在特定单元格中添加文本
- sql-server - 提高递归 CTE 的性能