6

我的应用程序使用Github 的 Oauth。假设:

  • 在版本 1 中,应用程序只需要基本授权(范围 = [])
  • 在版本 2 中,应用程序需要对公共存储库进行 R/W 访问(范围 = ['public_repo'])

自升级以来,一些用户尚未登录。

现在我有一些比其他令牌具有更大授权能力的令牌。我如何区分它们?换句话说,我怎么能问 Github:“嘿,我有这个 oauth 令牌……我能用它做什么?”

4

2 回答 2

13

您可以发出任何 GitHub API 请求并读取 X-OAuth-Scopes 标头的值,以查看令牌提供了哪些范围。使用 /rate_limit 不会计入您应用的速率限制。

curl -I -H 'Authorization: token <token>' https://api.github.com/rate_limit
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 18 Oct 2012 23:48:37 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Status: 200 OK
Content-Length: 61
X-GitHub-Media-Type: github.beta
X-RateLimit-Remaining: 4999
X-RateLimit-Limit: 5000
X-OAuth-Scopes: public_repo
Cache-Control: 
X-Content-Type-Options: nosniff
于 2012-10-18T23:53:25.113 回答
0

(2014 年 2 月):增强了 SSH 密钥的 OAuth 安全性

我们刚刚添加了更精细的权限,因此第三方应用程序可以专门请求对您的公共 SSH 密钥的只读访问、读/写访问或完全管理员访问权限。


请注意,access-token现在(2013 年 10 月)也返回范围。

这在“即将发生的 OAuth 更改”(2013 年 10 月,由Tim Cleam - tclem 撰写)中有详细说明:

从今天开始,我们将返回已授予的范围作为 access_token 响应的一部分。
例如,如果您POST使用application/jsonmime-type 创建 a,您将看到授予范围的附加字段。

{
  "access_token":"e72e16c7e42f292c6912e7710c838347ae178b4a",
  "scope":"repo,gist",
  "token_type":"bearer"
  }

目前,这些范围将与您请求的相同,但我们正在朝着允许 GitHub 用户编辑其范围的功能集发展,从而有效地授予您的应用程序比您最初请求的更少的访问权限
您应该意识到这种可能性并相应地调整您的应用程序行为。

一些需要注意和牢记的事情:

  • 大多数使用 GitHub OAuth 来识别用户的第三方应用程序在采用方面取得了最大的成功,首先是请求应用程序可能获得的最低访问权限。
    像没有范围或只是user:email非常理智的东西。

  • 处理用户选择授予您的访问权限少于您最初请求的访问权限的错误情况非常重要。
    现在我们在access_token响应中显示了授予的范围,应用程序可以警告或以其他方式与其用户通信,他们将看到功能减少或无法执行某些操作。

  • 应用程序始终可以通过流程再次将用户送回以获得额外的权限,但不要忘记用户始终可以拒绝。

于 2013-10-05T08:54:11.140 回答