为啥 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:如果用户已经授权应用程序,则自动授权用户

OAuth 2.0 代码授权流程

开放平台OAuth 2.0授权开发实践

OAuth 2.0 Playground:授权 API 按钮

OAuth - 第三方登录的原理

oAuth2.0:为啥需要“授权码”,然后才需要令牌?