如何在 git push 上解决“拒绝允许 OAuth 应用程序创建或更新工作流”

Posted

技术标签:

【中文标题】如何在 git push 上解决“拒绝允许 OAuth 应用程序创建或更新工作流”【英文标题】:How to resolve "refusing to allow an OAuth App to create or update workflow" on git push 【发布时间】:2021-01-11 12:33:39 【问题描述】:

得到

拒绝允许 OAuth 应用在没有 workflow 范围的情况下创建或更新工作流 .github/workflows/cd.yml"

git push。如何授予workflow范围?

【问题讨论】:

您是如何创建用于推送的令牌的?您是如何创建 OAuth 应用程序的?在请求令牌的范围时,OAuth 应用程序是否请求了 workflow 范围?我们需要更多关于正在发生的事情以及如何设置的详细信息,以便能够为您提供有用的答案。 @bk2204 我使用了 https github 克隆。 【参考方案1】:

当我尝试使用 IntelliJ 推送到包含 GitHub Action 工作流(.github/workflows 中的YAML 文件)的分支时,我确实遇到了这个问题。我没有发现 Internet 上的现有资源很有帮助,所以我希望这也能帮助您修复它。

TL;DR:生成一个新的个人访问令牌,在 GitHub 中启用workflow 范围,并配置您的应用程序以使用它。

背景:与 GitHub 集成的第三方工具(如 IntelliJ、Visual Studio Code、Github Desktop 等)使用令牌连接到您的 GitHub 帐户,以便他们可以代表您拉/推等。在 IntelliJ 的情况下,他们的指令只说包括 repogistread:org 范围。但是您需要 workflow 范围来修改 GitHub Actions。

解决方法如下:

    在您的 Github 帐户中,转到 设置(在右上角的头像下拉菜单中) 转到开发者设置 > 个人访问令牌 如果列出了您的应用程序,请单击其名称以编辑与其令牌关联的设置。确保勾选workflow。 点击更新令牌保存更改。 在同一页面上,单击生成令牌。仔细阅读信息,然后单击“确定”继续。 复制 Github 显示的新令牌。 您需要使用新令牌重新创建应用与 Github 的集成,以使更改生效。

注意:如果您的应用程序自动刷新其权限,您可能可以跳过第 5 步,但这似乎不适用于 IntelliJ。

在 IntelliJ 中,最后一步是转到 Settings > 版本控制 > GitHub,然后删除现有的集成并重新添加它,粘贴在新令牌中。您必须找出您正在使用的工具需要做什么才能为其提供新的 GitHub 个人访问令牌。

【讨论】:

有人能解释为什么会这样吗? 您还可以编辑当前的个人访问令牌以通过将workflow 添加到其中来更改其范围。这正是我刚刚为克服这个问题所做的。 @Xanlantos 我认为这是因为您最初创建令牌时工作流的东西并不存在 @gonadarian 回答对我有用,似乎最轻松 @gondadarian。是的!谢谢你。更新现有用户个人访问令牌并将workflow 添加到它是解决此问题的最无缝和最简单的方法。非常感谢分享?!【参考方案2】:

对于 Windows 10:转到设置 -> 凭据管理器 -> Windows 凭据 -> 删除 github.com 凭据 -> 从 git-bash 控制台 git pull/push 您的 github 项目 -> 在您的 IDE/源代码控制中重新连接 GitHub 帐户. 您不需要使用“工作流程”创建个人访问令牌,您不需要创建秘密 GITHUB_TOKEN(它创建自动并且无法手动创建)

【讨论】:

对我来说,它正在删除所有与 github 相关的凭据并注销并重新登录 github 桌面应用程序。但迄今为止最接近的答案! 刚刚解决了!我删除了我的 Windows 凭据中对 github 的所有引用。当我再次 git push 时,它强制浏览器登录,然后一切正常! 在过去的两周里,这件事发生在我身上两次。不知道为什么。但这个答案是解决它的原因。 我在将 Firebase 托管的自定义操作添加到我的存储库后遇到了这个问题。对我来说在窗户上。我已经通过 git desktop 安装了 git;但同时从命令行和 vscode 推送。去github桌面客户端重新登录就够了。【参考方案3】:

运行 macOS Big Sur。我正在从 Atom 文本编辑器推送我的 .yml 工作流文件,这对我有用。

    转到github personal access tokens settings 并生成一个新令牌。确保同时选择 repo 和工作流访问范围。 在 Mac 上转到 Keychain Access 应用程序,然后搜索 github。我发现了一个名为 github.com 的条目(如下所示),属于 Internet password 类型,之前填充了一个看似随机的标记。将密码条目替换为步骤 1 中生成的令牌(以 ghp_ 开头的令牌)。

【讨论】:

@eden 很高兴它有帮助! 嗨@Diego,谢谢,它适用于我在 macOS 上。【参考方案4】:

这个问题也只是因为您当前的令牌不允许在 Github 上使用工作流。 执行以下步骤修复

对于在 MacOS 上使用 android Studio 的人:

    删除您当前的令牌(首选项 -> 版本控制 -> GitHub):

记得点击“确定”按钮。

    尝试再次从 Android Studio 推/拉,现在会出现一个弹出窗口。

    点击 Use Token... 按钮,将出现另一个弹出窗口。

    点击生成,您将被发送到 GitHub 网站以生成新令牌。请记住选择工作流权限。

    点击生成按钮获取新令牌,并在步骤 3 中将其粘贴到 Android Studio。现在一切就绪。

【讨论】:

感谢您为创建图形所做的努力!很容易跟上。问题解决了。【参考方案5】:

就我而言,我在 macOS 钥匙串中有过时的 GitHub 凭据。我正在修改工作流文件并从命令行推送更改,因此我根本没想过检查钥匙串。 Updating credentials from the macOS Keychain 解释了如何使用git credential-osxkeychain 擦除钥匙串:

$ git credential-osxkeychain erase
host=github.com
protocol=https
> [Press Return]

然后我不得不再次输入我的用户名和密码。这次我生成了一个新的个人访问令牌并将该令牌用作密码。然后我终于可以推动工作流程的变化了。

【讨论】:

谢谢!从钥匙串中删除凭据并在 Android Studio 中再次添加令牌对我有用! 太棒了,谢谢!【参考方案6】:

在 Windows 10 上,这是我如何解决问题的分步说明

我已经包含了很多屏幕截图,因为它本来应该更难解决。

事后看来,@CSRedRat 说的是对的,但是当我遇到问题时,我无法理解,因为答案太简洁了。

最终导致我找到解决方案的是this article,这使情况更加清晰。

这是交易。虽然您可以使用 GitHub 开发人员设置菜单生成新令牌,然后将其粘贴到 Windows 凭据管理器中解决此问题,但您不应该因为最终该令牌将过期,然后您将再次遇到此问题,因为您手动设置了令牌,因此没有人知道如何刷新令牌。

取而代之的是,这个令牌 privs 问题需要通过 Git for Windows 修复。因此,这笔交易是“旧的”Windows 版 Git 凭据管理器没有要求 privs 来创建或更新工作流,但现在您需要它们。好消息是有一个名为 Git Credential Manager Core 的新版本,它确实要求提供这些权限等等。

新的凭据管理器随 Git 2.28 及更高版本一起提供,但默认情况下未启用。如果您已经安装了此版本或更高版本的 Git for Window,那么您甚至已经拥有该软件。就我而言,我的版本是 2.30.2,所以我已经有了新软件。

但它仍在使用我的旧 Git for Windows 凭据,这些凭据不具备所需的权限。这也可能是您的情况,或者如果您没有旧版本 2.28,那么您需要先安装更新版本。无论哪种方式,一旦您的机器上有足够新版本的 Git for Windows,下一步就是通过在 Windows 搜索框中键入“windows credential manager”来删除旧凭据。

然后找到每个git凭证,点击它,然后点击删除按钮。

现在,当您下次尝试从 git bash Visual Studio 或您使用的任何 git 客户端访问您的 get 帐户时,系统将提示您输入新凭据,因为旧凭据已消失。点击下方对话框中的Sign in with your browser按钮:

然后你会看到一个像下面这样的网页,如果你展开工作流下拉菜单,你会看到它正在询问你这次需要的权限。然后点击Authorize按钮。

一旦你这样做了,你会看到一个这样的页面,用于提供你的 github 密码:

现在,您在 Windows 凭据管理器中拥有了一个新凭据,该凭据具有您需要的权限,并且您曾经失败的操作现在将成功。是的!

【讨论】:

【参考方案7】:

通过使用 Desktop Github App 推送我的更改来解决此问题(它似乎具有完全权限,而 vs 代码的范围有限)。

在通过修改后的工作流文件进行一次提交后,我能够在vs code 中再次正常进行推送提交。

【讨论】:

这对我有用。有没有办法修改vs code的权限? 还没有研究过,但最好去看看。【参考方案8】:

我在尝试将更改推送到 .\github\workflows\build.yml 时遇到了 CLion 2020.2.3 的这个问题。 CLion 似乎使用不包括“工作流程”范围的“JetBrains IDE 集成”令牌(GitHub 设置 -> 应用程序 -> 授权 OAuth 应用程序)。似乎没有办法更改此令牌的范围。

我创建了一个具有正确权限的新个人访问令牌(GitHub 设置 -> 开发人员设置 -> 个人访问令牌 -> 生成新令牌),但我无法配置 CLion 以使用它。

最终我能够使用 GitHub Desktop 推送提交。

【讨论】:

我在使用 RubyMine 时遇到了同样的问题。尽管使用工作流范围创建了一个新令牌,但它的行为就像没有被授予范围一样。我最终通过重新启动让它工作,尽管我现在怀疑简单地重新启动 RubyMine 也能正常工作。【参考方案9】:

这在 GitKraken 上发生在我身上。我只是从 GitKraken 断开并重新连接 GitHub 并且它工作正常。

【讨论】:

【参考方案10】:

我按照this article 安装Git Credential Manager Core 来自动处理这个问题 - 它对我来说效果很好(macOS):

使用自制软件:

brew tap microsoft/git
brew install --cask git-credential-manager-core

【讨论】:

这对我来说很顺利。【参考方案11】:

我必须将我的Git For Windows 升级到版本 2.29.2.2。这允许 git 命令行通过 GitHub 现在需要的浏览器登录。

我在尝试重置 Windows 凭据管理器并重新生成我的个人访问令牌后执行了此操作,但没有解决它。但它确实导致 GitHub 向我发送了这样一封电子邮件:

[GitHub] 需要操作 - 不再支持 Windows 版 Git 中的密码验证

我们检测到您最近尝试使用旧版本的 Windows 版 Git 对 GitHub 进行身份验证。 GitHub 改变了用户在使用 Git for Windows 时的身份验证方式,现在需要使用 Web 浏览器来对 GitHub 进行身份验证。为了能够通过网络浏览器登录,用户需要更新到最新版本的 Git for Windows。

【讨论】:

【参考方案12】:

这发生在我的 phpStorm 上。我试图使用 IDE 提交和推送我的更改,所以当我收到错误时,我尝试在 IDE 控制台上使用命令行推送,我得到了它。

【讨论】:

【参考方案13】:

对于 IntelliJ IDE 用户,请按照以下简单步骤操作:

    转到文件 > 设置 > 版本控制 > Github,然后单击帐户,然后单击“-”按钮删除 Github 帐户。 然后在您的默认浏览器中登录 Github.com 然后点击 我们在步骤 1 中打开的同一个 IDE 窗口上的“+”按钮。然后 选择“使用令牌登录”。 单击“生成”按钮。 这将在您的浏览器中打开一个拥有所有权限的 GitHub 页面 预填充。您所要做的就是点击“生成令牌” 页面底部。然后使用该令牌将其填充到 IDE 弹出窗口中 窗口。 关闭设置窗口并再次推送您的代码。这总是对我有用。

【讨论】:

以上是关于如何在 git push 上解决“拒绝允许 OAuth 应用程序创建或更新工作流”的主要内容,如果未能解决你的问题,请参考以下文章

git push每次都要身份验证,如何解决?

如何解决git====push 过程中出现的。error: failed to push some refs

git 提交 “push rejected”,如何解决

git可以add,pull, 不可以push的问题解决

git如何将当前分支的某个提交,push到本地其它分支上

如何解决:git push error: failed to push some refs to