当前位置: 首页 > 知识库问答 >
问题:

使用OAuth访问私有回购的Github API

秦景福
2023-03-14

尝试使用API访问Github组织的私有存储库中的文件,我是该组织的成员。到目前为止,尝试了几种不同的方法:

1.如果我使用用户名/密码方法-

curl -u "sashafklein:mypassword" https://api.github.com/repos/:org/:repo/git/trees/:file_sha

它工作正常,但是我试图从一个协作的Rails应用程序访问repos,所以我不想公开我的github登录凭据。我想创建一个具有访问权限的虚拟GH帐户并使用这些凭据是可能的,但这绝对不理想...

2.因此,我查看了API文档中的OAuth2 Secret/Key方法。但它不起作用。如果我将我的凭据作为url中的参数卷曲org repo url:

curl -i "https://api.github.com/orgs/:org/repos?private&client_id=<ID>&client_secret=<SECRET>"

只有公开回购才会出现。这可能是我如何通过参数的问题(通过?Private=true理论上应该返回一个空列表,但该列表是相同的,所有公共repos),但我遵循文档。

3.所以我很沮丧,看了一下这些文档,想得到一个OAuth令牌,但我不知道如何修改它,这样就没有用户界面——也就是说,我的应用程序可以自动访问我所属的Github组织,而无需用户做任何特别的事情。

你知道我尝试2的错误是什么,或者如何让尝试3自动工作吗?我被难住了。

编辑我认为我的客户id/密码是错误的,因为即使我使用Octokit,它也无法访问受保护的回购协议。我理解错了吗?作为我自己,我在Github上为我的Rails应用程序创建了一个“应用程序”,我正试图使用这些凭据使用API访问该组织的私有repo(我是其参与者)。

共有2个答案

太叔昆
2023-03-14

我使用Octokit与C#遇到了同样的问题。经过一些调查,我发现这是我的令牌权限的问题。

令牌具有作用域(https://developer.github.com/v3/oauth/#scopes)因此,要访问私有存储库,您需要“repo”而不是“public_repo”,我认为这是默认的。

这可以很容易地从设置更改

戎永福
2023-03-14

如果有人遇到这个问题,我找到了解决办法。

显然,我的客户凭证不起作用。我想我不太明白它们是干什么用的。最简单的方法是使用username:password方法(上面的1),我可以使用它(即,我的rails应用程序可以访问我是其成员的私有回购协议)。

为了使我的个人github凭据不适用于使用该应用程序的每个人,我创建了一个新的虚拟github帐户,该帐户具有专门用作api凭据的访问权限。

 类似资料:
  • 我已经复制了这个代码,似乎是各种工作dockerfile周围,这里是我的: 这给了我错误 这是我第一次使用dockerfile,但是从我所读到的(以及从工作配置中获取的),我不明白为什么这不起作用。 我的id_rsa和我的dockerfile在同一个文件夹中,是我的本地密钥的副本,可以克隆这个回购没有问题。 编辑: 在我的dockerfile中,我可以添加: 它打印出正确的密钥,所以我知道它被正确

  • 我有一个Keycloak(独立)V1.9.4。最后在AWS实例上使用Wildfly 10安装安装程序,并尝试使用Keycloak(通过Keycloak的登录页面)和Twitter4j来验证Twitter用户,然后明显地让我的应用程序验证并查看用户的时间线等。 我已经配置了身份提供程序(Twitter)、领域和我的客户端应用程序。 我还在apps.Twitter.com上设置了一个Twitter应用

  • 我有两个终点。 是一个内部(半私有)endpoint。仅允许配置的客户端使用。(不需要用户名和凭据;但clientID就足够了) 问候语是专用endpoint。仅允许客户端和用户配置。(需要clientID、用户名和密码) 以下是配置。 这是控制器 我不能访问没有任何令牌。所以当我尝试使用下面的curl获取访问令牌时(注意我不传递用户名和密码,只传递client_id和client_secret)

  • 在github文档中找不到任何东西,在这里也找不到。但是我想知道是否可以有一个用于名为的私有存储库,该存储库可以访问,只有一个人可以访问存储库本身。 我记得曾经读过一些关于github页面总是公开的东西,但似乎再也找不到了。

  • 我知道如何访问私有变量,但我正在尝试测试以下类: ProcessStatusResult: 在我的测试中,我需要在ProcessStatusBody中获取ProcessStatus来验证它,但我不知道如何做到这一点。 有没有一种方法可以使用反射(或其他方法)来访问它,而不必仅仅为了测试而在ProcessStatusResult中添加getter?