虽然 API 提供了多种身份验证方法,但我们强烈建议对生产应用程序使用 OAuth。 提供的其他方法旨在用于脚本或测试(即没有必要使用完整 OAuth 的情况)。 依赖 GitHub 进行身份验证的第三方应用程序不应要求或收集 GitHub 凭据。 相反,它们应该使用 OAuth Web 流。
基本身份验证
API 支持 RFC2617 中定义的基本身份验证,但有一些细微差别。
主要区别在于,RFC 要求使用 401 Unauthorized 响应应答未经身份验证的请求。 在很多地方,这会暴露用户数据的存在。 相反,GitHub API 通过 404 Not Found 进行响应。
这可能会导致假定 401 Unauthorized 响应的 HTTP 库出现问题。 解决方案是手动创建 Authorization 标头。
通过 personal access token
建议使用 fine-grained personal access token 向 GitHub API 进行身份验证。
$ curl -u USERNAME:TOKEN https://api.github.com/user
如果你的工具只支持基本身份验证,但你想要利用 personal access token 安全功能,此方法非常有用。
通过用户名和密码
注意:从 2020 年 11 月 13 日起,GitHub 停止对所有 GitHub.com 帐户的 API 密码验证,包括 GitHub Free、GitHub Pro、GitHub Team 或 GitHub Enterprise Cloud 计划。 现在,你必须使用 API 令牌(如 OAuth 访问令牌、GitHub 应用程序安装访问令牌或 personal access token,具体取决于你需要使用令牌执行的操作)向 GitHub API 进行身份验证。 有关详细信息,请参阅“故障排除”。
SAML SSO 身份验证
注意:代表其他工具生成令牌的集成和 OAuth 应用程序将自动获得授权。
注意:在大多数情况下,可以使用 Authorization: Bearer 或 Authorization: token 传递令牌。 但是,如果要传递 JSON Web 令牌 (JWT),则必须使用 Authorization: Bearer。
如果使用 API 访问强制实施 SAML SSO 以进行身份验证的组织,则需要创建 personal access token 并为该组织授权该令牌。 访问 X-GitHub-SSO 中指定的 URL 为组织授权令牌。
生成的 URL 的有效期为一小时,然后过期。 一小时后,需要生成另一个 URL。
$ curl -v -H "Authorization: Bearer TOKEN" https://api.github.com/repos/octodocs-test/test
> X-GitHub-SSO: required; url=https://github.com/orgs/octodocs-test/sso?authorization_request=AZSCKtL4U8yX1H3sCQIVnVgmjmon5fWxks5YrqhJgah0b2tlbl9pZM4EuMz4
{
"message": "Resource protected by organization SAML enforcement. You must grant your personal token access to this organization.",
"documentation_url": "https://docs.github.com"
}
当请求可能来自多个组织的数据(例如,请求用户创建的问题列表)时,X-GitHub-SSO 标头指示哪些组织要求你授权 personal access token:
$ curl -v -H "Authorization: Bearer TOKEN" https://api.github.com/user/issues
> X-GitHub-SSO: partial-results; organizations=21955855,20582480
值 organizations 是一个以逗号分隔的组织 ID 列表,这些组织需要你的 personal access token 授权。
使用双重身份验证
启用双因素身份验证后,REST API 中的大多数终结点的基本身份验证要求你使用 personal access token。
可以使用 GitHub 开发人员设置来生成新的 personal access token。 有关详细信息,请参阅“为命令行创建 personal access token”。 然后,你将使用这些令牌通过 GitHub API 使用 OAuth 令牌进行身份验证。

