我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

其他身份验证方法

您可以在非生产环境中使用基本身份验证进行测试。

本文内容

此文档对您有帮助吗?

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。

虽然 API 提供多种身份验证方法,但我们强烈建议对生产应用程序使用 OAuth。 提供的其他方法旨在用于脚本或测试(即没有必要使用完整 OAuth 方法的情况)。 依赖 GitHub 进行身份验证的第三方应用程序不应要求或收集 GitHub 凭据。 它们应该使用 OAuth web 工作流程

基本身份验证

API 支持在 RFC2617 中定义的基本身份验证,但有一些细微区别。 主要区别在于 RFC 要求使用 401 Unauthorized 响应来回复未经验证的请求。 在很多情况下这会暴露用户数据的存在。 对于此类请求,GitHub API 的响应是 404 Not Found。 这可能导致 HTTP 库假定返回 401 Unauthorized 的问题。 解决方案是手动创建 Authorization 标头。

通过 OAuth 和个人访问令牌

我们建议您使用 OAuth 令牌向 GitHub API 验证。 OAuth 令牌包含个人访问令牌,允许用户随时撤销访问权限。

$ curl -u username:token https://api.github.com/user

如果您的工具只支持基本身份验证,但您想要利用 OAuth 访问令牌的安全功能,这个方法非常有用。

通过用户名和密码

弃用通知: GitHub 将停止使用密码向 API 验证。 You must now authenticate to the GitHub API with an API token, such as an OAuth access token, GitHub App installation access token, or personal access token, depending on what you need to do with the token. Password authentication to the API will be removed on November 13, 2020. For more information, including scheduled brownouts, see the blog post.

要将基本身份验证与 GitHub API 结合使用,只需发送与帐户关联的用户名和密码。

例如,如果您通过 cURL 访问 API,则将 <username> 替换为您的 GitHub 用户名后,以下命令将对您进行身份验证。 (cURL 将提示您输入密码。)

$ curl -u username https://api.github.com/user

如果您启用了双重身份验证,请务必了解如何使用双重身份验证

SAML SSO 身份验证

注:代表其他工具生成令牌的集成和 OAuth 应用程序将自动获得授权。

如果您要使用 API 访问实施 SAML SSO 身份验证的组织,您需要创建个人访问令牌 (PAT) 并授权该令牌访问组织。 访问 X-GitHub-SO 中指定的 URL 以授权令牌访问组织。

$ curl -v -H "Authorization: token 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 标头将指示哪些组织需要您授权个人访问令牌:

$ curl -v -H "Authorization: token TOKEN" https://api.github.com/user/issues

> X-GitHub-SSO: partial-results; organizations=21955855,20582480

organizations 的值是需要您授权个人访问令牌的组织列表,用逗号分隔。

使用双重身份验证

弃用通知: GitHub 将停止使用密码向 API 验证。 You must now authenticate to the GitHub API with an API token, such as an OAuth access token, GitHub App installation access token, or personal access token, depending on what you need to do with the token. Password authentication to the API will be removed on November 13, 2020. For more information, including scheduled brownouts, see the blog post.

启用双重身份验证后,REST API 中大多数端点的基本身份验证均要求您使用个人访问令牌或 OAuth 令牌,而不是用户名和密码。

您可以 使用 GitHub开发者设置来生成新的个人访问令牌,或者使用 OAuth 授权 API 中的“创建新授权”端点来生成新的 OAuth 令牌。 更多信息请参阅“创建用于命令行的个人访问令牌”。 然后,您将使用这些令牌向 GitHub API 验证,更多信息请参阅“使用 OAuth 令牌进行身份验证”。 唯一需要使用用户名和密码进行身份验证的时候是创建 OAuth 令牌或使用 OAuth 授权 API 时。

结合使用 OAuth 授权 API 与双重身份验证

当您调用 OAuth 授权 API 时,基本身份验证会要求您使用一次性密码 (OTP) 以及您的用户名和密码,而不是令牌。 当您尝试使用 OAuth 授权 API 进行身份验证时,服务器将响应 401 Unauthorized 和以下标头之一,以指示需要使用双重身份验证代码:

X-GitHub-OTP: required; SMSX-GitHub-OTP: required; app.

此标头指示您的帐户如何接收其双重身份验证代码。 您将通过 SMS 接收 OTP 代码,或者使用 Google Authenticator 或 1Password 等应用程序,具体取决于您的帐户设置。 更多信息请参阅“配置双重身份验证”。 在标头中传递 OTP:

$ curl --request POST \
  --url https://api.github.com/authorizations \
  --header 'authorization: Basic PASSWORD' \
  --header 'content-type: application/json' \
  --header 'x-github-otp: OTP' \
  --data '{"scopes": ["public_repo"], "note": "test"}'

此文档对您有帮助吗?

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。