为啥 OAuth 流程中的 GitHub 授权按钮显示为灰色?
Posted
技术标签:
【中文标题】为啥 OAuth 流程中的 GitHub 授权按钮显示为灰色?【英文标题】:Why is the GitHub authorization button in the OAuth flow grayed out?为什么 OAuth 流程中的 GitHub 授权按钮显示为灰色? 【发布时间】:2017-11-09 13:11:36 【问题描述】:我正在构建一个 android 应用程序,该应用程序使用 OAuth 将用户登录到 GitHub。我按照说明here 这样做了。作为流程的第一部分,我将用户发送到 URL
https://github.com/login/oauth/authorize?scope=repo&client_id=MY_CLIENT_ID
但是,当我在我的 Android 设备上登录时,Authorize xxxx
按钮显示为灰色,我无法单击它。有谁知道这是为什么? (下图大图)
我认为该按钮之前可能没有变灰,这是我第一次运行应用程序并登录时。但是,我不能确定,因为我很着急。
【问题讨论】:
【参考方案1】:我在 Safari 中遇到了同样的问题,但我找到了一个潜在的原因,网站的内容安全策略设置为:script-src github.githubassets.com
【讨论】:
【参考方案2】:我绝对支持 @james-ko 所说的 - 必须为 WebView 启用 JS。
但有时它并没有帮助。我发现了更多信息,很乐意在这里分享。
类似的故事 - 我有一个应用程序应该使用 GitHub OAuth 登录用户,除了“授权”按钮之外一切正常 - 在某些情况下,无论应用什么设置,它都会保持禁用状态。
这里是总结:
无论设置和用户行为如何,该按钮在具有 API 22 和 23 的模拟器上始终处于禁用状态(虽然我没有尝试 24-27)。
它在使用 API 28 和 29 的模拟器上运行良好。
在真实设备 Pixel 3 (API 29) 上,该按钮最初被禁用,并且有一段时间没有发生任何事情。但是当我在随机的地方两次录下屏幕时,它就被启用了。应用程序重启重现了这种情况:最初禁用的按钮 --> 点击屏幕 --> 按钮被启用。
显然涉及一些反欺诈机制。
但它给最终用户带来了糟糕的体验,它看起来像是应用程序中的一个错误,我们对此无能为力:-/
【讨论】:
【参考方案3】:因此,我将链接粘贴到计算机上的 Chrome 中,并且 OAuth 过程运行良好。我注意到按钮起初是灰色的,但后来变成了亮绿色。这让我想知道:Android WebView 中是否默认启用了 javascript?果然,不是。我找到了this answer,它详细说明了如何启用 JS。这是让一切正常工作的关键:
webView.getSettings().setJavaScriptEnabled(true);
【讨论】:
如果我不使用 webview ,我使用的是 git api ,遇到同样的问题。我们该如何解决。 clientId="2e9c1001acbdbecef8a9";字符串 clientSecret="3ba4b54a344820154a175b8907d1229013f11add"; String redirectUrl="futurestudio://calback";, Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("github.com/login/oauth/authorize" +"?client_id="+clientId+"&scope=repo&redirect_url="+redirectUrl));开始活动(意图);以上是关于为啥 OAuth 流程中的 GitHub 授权按钮显示为灰色?的主要内容,如果未能解决你的问题,请参考以下文章
Slack Oauth:如果用户已经授权应用程序,则自动授权用户