OAuth 应用程序的网络应用流程
注意:如果您正在构建 GitHub 应用程序,您仍然可以使用 OAuth Web 应用程序流程,但设置有一些重要区别。有关更多信息,请参阅“为 GitHub 应用程序识别和授权用户”(https://docs.github.com/en/developers/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps)。
为您的应用程序授权用户的 Web 应用程序流程是:
- 用户被重定向以请求他们的 GitHub 身份
- 用户被 GitHub 重定向回您的站点
- 您的应用使用用户的访问令牌访问 API
1. 请求用户的 GitHub 身份
GET https://github.com/login/oauth/authorize
当您的 GitHub 应用程序指定登录参数时,它会提示用户使用他们可用于登录和授权您的应用程序的特定帐户。
参数:
Name | Type | Description |
client_id | string | 必需的。注册时从 GitHub 收到的客户端 ID。 |
redirect_uri | string | 您的应用程序中的 URL 将在授权后发送用户。请参阅下面有关重定向 URL 的详细信息。 |
login | string | 建议用于登录和授权应用程序的特定帐户。 |
scope | string | 以空格分隔的范围列表。如果未提供,则范围默认为未授权应用程序任何范围的用户的空列表。对于拥有应用程序授权范围的用户,用户将不会看到带有范围列表的 OAuth 授权页面。相反,流程的这一步将自动完成用户为应用程序授权的范围集。例如,如果用户已经执行了两次 Web 流,并已授权一个具有用户范围的令牌和另一个具有 repo 范围的令牌,则不提供范围的第三个 Web 流将收到具有用户和 repo 范围的令牌。 |
state | string | 一个不可猜测的随机字符串。它用于防止跨站点请求伪造攻击。 |
allow_signup | string | 在 OAuth 流程期间,是否会为未经身份验证的用户提供注册 GitHub 的选项。默认值为真。当策略禁止注册时使用 false。 |
2. 用户被 GitHub 重定向回你的站点
如果用户接受您的请求,GitHub 将使用代码参数中的临时代码以及您在上一步中在状态参数中提供的状态重定向回您的站点。临时代码将在 10 分钟后过期。如果状态不匹配,则第三方创建了请求,您应该中止该过程。
将此代码交换为访问令牌:
POST https://github.com/login/oauth/access_token
参数:
Name | Type | Description |
client_id | string | 必需的。您从 GitHub 收到的 OAuth 应用程序的客户端 ID。 |
client_secret | string | 必需的。您从 GitHub 收到的 OAuth 应用程序的客户端密码。 |
code | string | 必需的。您收到的作为对步骤 1 的响应的代码。 |
redirect_uri | string | 授权后发送用户的应用程序中的 URL。 |
回复(Response):
默认情况下,响应采用以下形式:
access_token=gho_16C7e42F292c6912E7710c838347Ae178B4a&scope=repo%2Cgist&token_type=bearer
如果您在 Accept 标头中提供格式,您还可以接收不同格式的响应。
例如,接受:application/json 或接受:application/xml:
3. 使用访问令牌访问API
访问令牌允许您代表用户向 API 发出请求。
Authorization: token OAUTH-TOKEN
GET https://api.github.com/user
例如,在 curl 中,您可以像这样设置 Authorization 标头:
curl -H "Authorization: token OAUTH-TOKEN" https://api.github.com/user
GitHubOAuth应用程序授权登录时序图: