无法使用Github API(Github应用程序集成)对Github存储库进行标星/取消标星。

3
我正在尝试使用Github App来为当前用户(即我自己)的Repo点赞,通过Github Star repo for user API。为了简单起见,我在Postman中进行调试。我通过我的应用程序"使用Github登录"获得了用户的AccessToken,这一步是成功的,然后我使用该AccessToken发出点赞Repo的请求,但是返回的结果是...
{
    "message": "Resource not accessible by integration",
    "documentation_url": "https://docs.github.com/rest/reference/activity#star-a-repository-for-the-authenticated-user"
}

这个错误提示表明Github应用程序没有足够的权限,但我已经授予它在这里看到的能够给仓库加星标的能力。

enter image description here

这是我在目标仓库上安装的位置。注意它是灰色的并且有一个工具提示,这让人担忧。

enter image description here

值得注意的:

  • 我知道令牌是有效的,因为检查用户是否已收藏该存储库可以正常工作,并且通过 GET https://api.github.com/user/starred 列出他们收藏的存储库也可以正常工作
  • 这是一个 Github 应用程序,而不是 OAuth 应用程序
  • 安装的 Github 应用程序上的工具提示是一个警告标志,但我不知道如何修复它
  • 我尝试过卸载/重新安装 Github 应用程序
  • 我尝试重新触发 Github 应用程序授权过程以获取新的令牌

这里的目标只是要成功收藏该存储库,具体来说,我正在代表用户收藏 GitHub 上的一个随机存储库,而不是用户自己拥有的存储库。


1
调用此端点时,您是否将Content-Length设置为零?如果没有,请这样做并重试。参考为经过身份验证的用户收藏存储库“请注意,在调用此端点时,您需要将Content-Length设置为零。” - Haridarshan
1
调用此端点时,您是否将Content-Length设置为零?如果没有,请这样做并重试。参考为经过身份验证的用户收藏存储库 请注意,在调用此端点时,您需要将Content-Length设置为零。 - Haridarshan
1
@MattPengelly 很好的发现。我已经重写了我的答案的一部分,包括一个OAuth应用程序。 - VonC
1
@MattPengelly 很好的发现。我已经重新修改了我的回答,包括了一个OAuth应用程序。 - VonC
1
@MattPengelly 很好的发现。我已经重新修改了我的答案,包括了一个OAuth应用程序。 - undefined
显示剩余7条评论
1个回答

2
选择 GitHub 应用权限”包括:

使用用户访问令牌进行的 API 请求的成功取决于用户的权限以及应用的权限。

例如,如果应用被授予写入存储库内容的权限,但用户只能读取内容,则用户访问令牌只能读取内容。

使用安装访问令牌进行的 API 请求的成功仅取决于应用的权限。

在您的情况下,您有一个用户访问令牌,因此您需要检查“个人帐户存储库的权限级别”。

然而,OP 报告称它与Oauth 应用一起工作。

OAuth App(授权应用)是在GitHub上注册的应用程序,可以由GitHub用户授权代表他们执行操作。OAuth App使用OAuth令牌与GitHub API进行交互。
它非常适合于需要多个用户授予应用程序权限以代表他们执行操作的Web应用程序或服务。 发放给OAuth App的OAuth令牌可以根据用户在OAuth流程中授权的内容具有不同的范围。这些范围可以动态请求。
使用OAuth 2.0授权流程,将用户重定向到GitHub以授权应用程序,然后将其重定向回应用程序,并提供一个授权代码,该代码可以用来交换访问令牌。 它代表一个应用程序或服务,并可以代表许多用户执行操作。

在代表用户收藏存储库的情况下,OAuth App更加合适,因为它允许用户授权应用程序执行用户级别的操作,例如收藏存储库。

与用户访问令牌相反,用户访问令牌更像是静态令牌,更适合个人脚本或工具,并且缺乏OAuth App的动态授权流程。

我怀疑OAuth App之所以有效,是因为:

  • 它的用户模拟功能,结合:
  • 动态范围
  • 通过用户同意建立信任
  • 灵活性(可以由多个用户使用。授权应用程序的每个用户都可以授予其代表其行事的权限。)

它专为应用程序需要代表用户与GitHub进行交互并获得用户授权的情况而设计。
收藏存储库是属于用户活动的一种操作,OAuth非常适合处理这种情况。

对于OP,在评论中

现在它能够工作的原因(我认为)是因为:GitHub应用程序执行的是应用程序的用户操作,而不是用户本身的操作。
当用户执行操作时,OAuth应用程序是由用户执行的。

希望这样说得清楚,我认为Github应用程序并不是为处理收藏公共存储库而设计的,所以我认为这个案例是使用错误的工具。


@MattPengelly 好的,我提到用户访问令牌是因为(在你的问题中)“。我通过我的应用程序“使用GitHub登录”获取用户访问令牌。不过,我不记得OAuth应用程序有用户访问令牌。 - VonC
我在这里奖励悬赏,因为这篇帖子促使我调查了Oauth与Github之间的区别,最终起到了作用。对于类似这样的事情,可以使用一个Oauth应用程序。 - Matt Pengelly
是的,使用Oauth和Github App,流程如下:首先通过授权端点获取授权码,然后使用该授权码请求Github访问令牌。这对于两者来说都是相同的流程,这就是我所指的。 - Matt Pengelly
1
@MattPengelly 我已经简化了答案(删除了用户访问令牌部分),并在答案中包含了你的评论/结论,以增加可见性。 - VonC
1
@MattPengelly 我已经简化了答案(删除了用户访问令牌部分),并在答案中包含了你的评论/结论,以增加可见度。 - VonC
显示剩余10条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接