构建OAuth应用
1 Github文档
您可以构建OAuth应用程序以供个人或公共使用。 了解如何为OAuth应用注册和设置权限和授权选项。
1.1 创建OAuth应用程序
您可以在个人帐户下或在您具有管理访问权限的任何组织下创建和注册OAuth应用程序。 在创建OAuth应用时,请记住仅使用您认为公开的信息来保护您的隐私。
1.2 为OAuth应用程序创建自定义徽章
您可以上传自己的徽标图片并自定义背景,从而替换OAuth应用中的默认徽章。
1.3 授权OAuth应用程序
您可以启用其他用户授权您的OAuth应用。
注意:GitHub的OAuth实现支持标准授权码模式。 您应该实现下面描述的Web应用程序流程以获取授权代码,然后将其交换为令牌。 (不支持简化模式)
1.3.1 Web应用程序流
授权用户使用您的应用的流程是:
- 用户被重定向以请求他们的GitHub身份
- 用户被GitHub重定向回您的网站
- 您的应用使用用户的访问令牌访问API
1.3.1.1 用户被重定向以请求他们的GitHub身份
GET https://github.com/login/oauth/authorize
Parameters:
- client_id
- redirect_uri
- scope
- state
- allow_signup
1.3.1.2 用户被GitHub重定向回您的网站
如果用户接受您的请求,GitHub将使用代码参数中的临时代码以及您在上一步中在状态参数中提供的状态重定向回您的站点。 如果状态不匹配,则请求由第三方创建,并且应该中止该过程。
将此代码交换为访问令牌:
POST https://github.com/login/oauth/access_token
Parameters:
- client_id
- client_secret
- code
- redirect_uri
- state
Response
默认情况下,响应采用以下形式:
access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer
您还可以根据Accept标头接收不同格式的内容:
Accept: application/json
{"access_token":"e72e16c7e42f292c6912e7710c838347ae178b4a", "scope":"repo,gist", "token_type":"bearer"}
Accept: application/xml
<OAuth>
<token_type>bearer</token_type>
<scope>repo,gist</scope>
<access_token>e72e16c7e42f292c6912e7710c838347ae178b4a</access_token>
</OAuth>
1.3.1.3 您的应用使用用户的访问令牌访问API
访问令牌允许您代表用户向API发出请求。
GET https://api.github.com/user?access_token=...
您可以在查询参数中传递令牌,如上所示,但更简洁的方法是将其包含在Authorization标头中。
Authorization: token OAUTH-TOKEN
例如,在curl中,您可以像这样设置Authorization标头:
curl -H "Authorization: token OAUTH-TOKEN" https://api.github.com/user
1.3.2 重定向URLs
redirect_uri
参数是可选的。 如果省略,GitHub会将用户重定向到OAuth应用程序设置中配置的回调URL。 如果提供,重定向URL的主机和端口必须与回调URL完全匹配。 重定向URL的路径必须引用回调URL的子目录。
CALLBACK: http://example.com/path
GOOD: http://example.com/path
GOOD: http://example.com/path/subdir/other
BAD: http://example.com/bar
BAD: http://example.com/
BAD: http://example.com:8080/path
BAD: http://oauth.example.com:8080/path
BAD: http://example.org
1.3.3 为OAuth应用程序创建多个令牌
您可以为用户/应用程序/范围组合创建多个令牌,以便为特定用例创建令牌。
如果您的OAuth应用程序支持使用GitHub进行登录的一个工作流程并且仅需要基本用户信息,则此功能非常有用。 另一个工作流可能需要访问用户的私有存储库。 使用多个令牌,您的OAuth应用程序可以为每个用例执行Web流程,仅请求所需的范围。 如果用户仅使用您的应用程序登录,则他们永远不需要授予您对其私有存储库的OAuth应用程序访问权限。
每个用户/应用程序/范围组合发布的令牌数量有限制。 如果您的应用程序请求足够的令牌超过其中一个限制,则较旧的令牌将停止工作。
1.3.4 指导用户查看其访问权限
您可以链接到OAuth应用程序的授权信息,以便用户可以查看和撤消其应用程序授权。
要构建此链接,您需要在注册应用程序时从GitHub收到的OAuth Apps client_id。
https://github.com/settings/connections/applications/:client_id
1.4 了解OAuth应用程序的范围
通过范围,您可以准确指定所需的访问类型。 范围限制OAuth令牌的访问权限。 他们不会授予超出用户已有权限的任何其他权限。
2 gitlab文档
2.1 Web应用程序流
2.1.1 请求授权码
2.1.2 请求访问令牌
2.2 简化模式
与Web流不同,客户端会在授权请求后立即收到访问令牌。 该流程不使用客户端密钥或授权代码,因为所有应用程序代码和存储都易于访问,因此密钥可能很容易泄漏。
2.3 使用访问令牌访问Gitlab API
访问令牌允许您代表用户向API发出请求。 您可以将令牌作为GET参数传递
GET https://gitlab.example.com/api/v4/user?access_token=OAUTH-TOKEN
或者您可以将令牌放入Authorization标头:
curl --header "Authorization: Bearer OAUTH-TOKEN" https://gitlab.example.com/api/v4/user