【问题标题】:XMLHttpRequest blocked by CORS policy when using Android Webview for Oauth2 RedditXMLHttpRequest 在使用 Android Webview for Oauth2 Reddit 时被 CORS 策略阻止
【发布时间】:2020-11-04 12:33:54
【问题描述】:

我正在尝试在 Android 应用程序中使用 Oauth2 从 Reddit api 获取身份验证令牌。我只是想从我的 Android 应用程序中使用 Reddit api,并且必须使用 Oauth2 来实现这一点。在我的应用程序中,webview 用于将用户导航到以下页面。

如果用户点击允许,应用会从 Reddit 接收授权码,以便它可以向 Reddit api 发出 api 请求。从上面可以看出,将用户导航到上述页面的 url 适用于桌面 chrome 浏览器。然而,在 Android 模拟器中,我可以从 webview 看到 reddit 上的加载页面,但是 webview 突然消失,并在 Logcat 上出现以下错误:

“从源 'https://www.redditmedia.com' 访问 XMLHttpRequest 已被 CORS 策略阻止:没有'访问权限' -Control-Allow-Origin' 标头出现在请求的资源上。”

在为 Oauth2 创建 reddit 应用程序时,我选择了“已安装的应用程序”。以下是我正在使用的网址:

https://www.reddit.com/api/v1/authorize?client_id=8QWhUSXGUjcwpg&response_type=code&state=TEST&redirect_uri=https%3A%2F%2Fgithub.com%2Fkdy304g%2FCapstone-Project&duration=temporary&scope=read

这是我用于 webview 的代码:

web.loadUrl(url);

            web.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    super.onPageStarted(view, url, favicon);
                    Log.i("","page started");

                }
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);

我的 webview 适用于其他 url,但由于某种原因我猜不是这个。如果有人可以看一下,我将不胜感激。提前谢谢!

My github project link

【问题讨论】:

  • 在标题中输入“访问控制允许来源:*”。检查此以获取更多信息stackoverflow.com/questions/17272612/…
  • 非常感谢您的回复。按照您的建议,我在我的 webview 客户端中添加了以下方法,但它仍然无法正常工作。 public boolean shouldOverrideUrlLoading(WebView view, String url) { Map<String, String> map = new HashMap<String, String>(); map.put("Access-Control-Allow-Origin", url); view.loadUrl(url); return false; } 在标题中,我应该在“Access-Control-Allow-Origin”旁边放什么?我只是放了网址,但这似乎不对。
  • 你必须在 loadUrl 中传递 map .. 检查它的标题添加 stackoverflow.com/questions/7610790/…
  • 映射 extraHeaders = new HashMap(); extraHeaders.put("Access-Control-Allow-Origin", /* 你的域名在这里 */); host.loadUrl(url,extraHeaders);
  • 我acutally注意到我的愚蠢错误并将我的代码修改为`view.loadUrl(url,map);`而不是`view.loadUrl(url);`同样的问题仍然存在..也许我不应该为此使用 shouldOverrideUrlLoading 方法?不管怎样,谢谢你的帮助。

标签: java android webview oauth-2.0 reddit


【解决方案1】:

如今,移动 webview 登录可能存在很大问题 - 一些提供商(例如 Google)会阻止 webview 登录。

安全建议是使用移动流程和 AppAuth 库登录 Chrome 自定义选项卡窗口。

这在密码自动填充等领域也具有更好的可用性,我认为您不会遇到任何 CORS 问题。

可能从基于私有 URI 方案的登录开始,其中您的回调 url 是这样的值 - 而不是 webview HTTPS url。

  • com.mycompany.myapp:/callback

尝试使用 APPAUTH 示例登录

要查看这是否有效,请按照my blog post 中的快速步骤操作以使 AppAuth 登录正常工作。

然后在 Reddit 中创建一个 OAuth 客户端(信任条目),将测试应用更新为这些值并查看它是否有效。

【讨论】:

    猜你喜欢
    • 2018-02-26
    • 2021-09-05
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 2021-04-24
    • 2021-10-05
    • 2019-10-31
    相关资源
    最近更新 更多