问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用GitHub的OAuth 2.0服务登录第三方网站:图文教程

创作时间:
作者:
@小白创作中心

使用GitHub的OAuth 2.0服务登录第三方网站:图文教程

引用
1
来源
1.
https://apifox.com/apiskills/how-to-use-github-oauth2/

要使用GitHub的OAuth 2.0服务登录第三方网站,通常需要完成以下三个步骤的配置:

  1. 在GitHub开发者后台创建一个应用,并配置重定向地址(回调地址),以获取客户端ID(Client ID)和客户端密钥(Client Secret)。
  2. 根据客户端ID、客户端密钥和回调地址构造登录页面,让用户授权,以获取访问令牌(Token)。
  3. 使用获取到的访问令牌访问GitHub的开放资源。

在开始之前,我们先来了解一下什么是OAuth 2.0。

什么是OAuth 2.0?

OAuth 2.0是一种开放标准的授权协议,用于授权第三方应用程序访问受保护的资源,而无需用户提供其用户名和密码。它允许用户通过授权代理向第三方应用程序颁发访问令牌(access token),以访问特定的资源。OAuth 2.0的核心概念包括授权服务器(Authorization Server)、资源所有者(Resource Owner)、客户端(Client)、资源服务器(Resource Server)和访问令牌(Access Token)。OAuth 2.0被广泛应用于Web和移动应用程序中,提供了安全的授权机制,同时保护用户的隐私。

OAuth 2.0协议涉及以下角色:

  1. 资源所有者(Resource Owner):通常是用户,拥有受保护的资源,例如图片、个人资料等。
  2. 客户端(Client):第三方应用程序,想要访问资源所有者的受保护资源。
  3. 授权服务器(Authorization Server):负责认证资源所有者并授权客户端访问资源的服务器。
  4. 资源服务器(Resource Server):存储受保护资源的服务器,提供访问受保护资源的API。

OAuth 2.0协议通过授权流程(Authorization Flow)来实现授权。其中,常见的授权流程包括:

  • 授权码授权流程(Authorization Code Grant):客户端重定向用户到授权服务器,用户登录并授权后,授权服务器返回授权码给客户端,客户端使用授权码与客户端凭证交换访问令牌。
  • 授权码授权流程,带有PKCE(Authorization Code Grant,With PKCE):与标准授权码模式相同,但客户端需要使用PKCE(Proof Key for Code Exchange)来增强安全性。
  • 密码授权流程(Resource Owner Password Credentials Grant):资源所有者直接将用户名和密码提供给客户端,客户端使用这些凭据向授权服务器请求访问令牌。
  • 客户端凭证授权流程(Client Credentials Grant):客户端使用自己的凭据直接向授权服务器请求访问令牌,适用于客户端自身需要访问资源的情况。
  • 隐式授权流程(Implicit Grant):用于在浏览器中直接从客户端获得访问令牌,通常用于Web前端应用。

GitHub使用的OAuth 2.0授权流程就是“授权码授权流程(Authorization Code Grant)”,下面我们来介绍一下具体实现步骤。

步骤1:创建应用,获取客户端ID和客户端密钥

要获取客户端ID和客户端密钥,首先需要在GitHub创建一个应用。访问以下链接进行创建:

https://github.com/settings/applications/new

在“Homepage URL”中填写你的域名,如果是本地调试,可以填写本地服务地址,例如:

http://127.0.0.1:8000

在“Authorization callback URL”中填写你的回调地址,可以是你的域名,也可以是你本地的回调地址,例如:

http://127.0.0.1:8000/callback

相关配置填写之后,点击“Register application”创建即可。

应用创建完毕后,会生成客户端ID和客户端密钥。客户端密钥需要单独生成,点击“Generate a new client secret”生成一个密钥即可。

步骤2:获取访问令牌

获取访问令牌这一步,我们通过HTTP请求来演示。根据GitHub官方文档的描述,在进行OAuth 2.0认证时,授权码的请求地址(Auth URL)是:

https://github.com/login/oauth/authorize

将这个授权码的请求地址填写到HTTP请求中即可,这个地址可以理解为登录授权页面,在首次校验登录状态时会打开这个页面(在客户端是窗口),然后让你填写用户名和密码。

一般在手动构造登录授权页面的时候,这个授权地址的后面还需要携带一些参数,比如像下面这样的:

https://github.com/login/oauth/authorize?
client_id=${clientId}&
redirect_uri=http%3A%2F%2F127.0.0.1%3A8000%2Fcallback&
scope=user:email

注:正常情况下无需进行参数换行,http%3A%2F%2F127.0.0.1%3A8000%2Fcallbackhttp://127.0.0.1:8000/callback转换成urlencode格式的样子。

根据GitHub官方文档的描述,要申请到访问令牌,需要请求的URL为:

https://github.com/login/oauth/access_token

将上面这个地址填写到HTTP请求中即可。因为在默认情况下,GitHub在返回访问令牌时,它的返回响应采用以下的格式:

access_token=gho_16C7e42F292c6912E7710c838347Ae178B4a&scope=repo%2Cgist&token_type=bearer

这个格式目前在大多数工具中不能自动解析,所以你需要在请求头中添加Accept: application/json,这样子返回响应就是JSON格式了。

上文的配置项都设置好以后,就可以发起请求来获取访问令牌了。点击后,如果是初次登录,会弹出一个窗口让你授权,填写你的GitHub账户的用户名以及密码即可。

填写完用户名密码后,会让你确认授权,或者进行两步验证,验证过后,点击确认即可。授权完成后,就会自动获取到访问令牌,并显示在页面上,同时,会将GitHub返回的其它信息也一并解析出来。

注意,如果你开了代理,你需要到“设置”里把代理打开,不然有可能会连接失败。遇到其它错误,你可以检查一下是不是某些第三方平台需要的必填参数没有填写,修改错误后,重新发起请求即可。

步骤3:根据Token访问开放资源

有了访问令牌(Token)之后,你就可以拿这个访问令牌调取GitHub的开放资源了,具体有什么样的开放资源,可以在GitHub API中查看。比如下面这个API就获取了用户的信息:

https://api.github.com/user

发送请求时会自动将Token附加到请求头的Authorization中,添加至Bearer后发送出去。如果你要将Token携带在URL上,你也可以在页面的配置项中修改Token的“添加位置”,将其选择为“Query Params”即可。

总结

OAuth 2.0是一种授权框架,允许第三方应用获取访问令牌而无需用户提供用户名密码。GitHub使用的授权流程是“授权码授权流程”,其授权过程可以在HTTP工具中调试配置。

使用GitHub的OAuth 2.0服务登录第三方网站一般需要以下三步操作配置:1. 在GitHub开发者后台创建应用,配置重定向地址以获取客户端ID和密钥。2. 根据ID、密钥和重定向地址构造登录页面,用户授权后获取访问令牌。3. 有了令牌即可访问GitHub的开放资源。

需要注意的是,本文内容基于2024年4月的GitHub API,GitHub的API和相关服务可能会有更新,因此在实际操作时需要检查最新的API文档。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号