OAuth 2.0 鉴权实战:使用 Apifox 调试接口的详细指南

OAuth 2.0 是一种授权框架,它可以让第三方应用程序在得到你的授权后,有限度地访问一些开放的个人信息。它被广泛用于互联网上的身份验证和授权机制。

OAuth 2.0 可以比作使用微信账号登录 Apifox:你扫码并授权后,Apifox 从微信获得一个访问令牌,这个令牌让 Apifox 获取你的部分信息(如昵称和头像)用于登录,无需单独设置账号密码,同时确保你的其他微信信息保持私密。这样一来,你就可以安全且便捷地使用微信账号在 Apifox 上工作。

OAuth 2.0 的运行流程可以用下图表示,其中,客户端代表一方,用户为另一方,认证服务器与资源服务器统一作为一方。

我们将通过一个微信登录的例子来解释上述步骤,并讲述如何在 Apifox 中调试。在这个例子中,我们用"网站"来指代客户端,用"微信"同时指代认证服务器和资源服务器。

OAuth 2.0 的实践:以微信登录为例

1 网站请求用户给予授权

如果你需要调用微信登录的接口,那么第一步是扫微信登录的二维码。这一步需要在网页上进行,还不需要使用 Apifox。

当用户点击网站上的「微信登录」按钮后,将会被导向到由微信官方提供的扫码登录页面,该页面实际访问的是微信的认证服务器。微信扫码登录页面形如下方的 URL:

perl 复制代码
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE

这里面参数的具体值,你需要到微信开发者中心查看。

当用户通过微信扫码并同意给网站授权时,就允许网站获取用户微信的昵称和头像等信息。这个授权过程由微信客户端和微信登录服务端处理,我们不需要关心。

用户一旦同意授权,浏览器便会自动跳转到预设的网址(即 redirect_uri 参数对应的网址),形如:

ini 复制代码
https://example.com/wechat/callback.do?code=CODE&state=3d6be0a40sssssxxxxx6624a415e

这个跳转页面里的内容其实不重要,重点在以上这个 URL 里。我们只需要关注其中的 code 参数,这个就是下一步申请微信登录令牌的关键。

我们把这个 URL 中包含的 code 复制出来,就完成了 Oauth 2.0 认证中的第一和第二步:用户授权,得到客户端授权 code。

接下来,我们就可以在 Apifox 中进行调试了。

2 网站向微信申请令牌

接下来,我们就需要向微信认证服务器申请令牌了。

你需要用 Apifox 访问微信认证服务器的 API,位于:api.weixin.qq.com/sns/oauth2/... 在调用该接口时,你需要携带以下参数,同理,这里面参数的具体值你需要到微信开发者中心查看:

我们可以在 Apifox 中对该接口进行调试并获取令牌。成功调用上述的接口后,微信认证服务器会验证相关信息的有效性。验证通过,便会收到一个令牌,该令牌包含在接口返回的 JSON 数据里。

以下是响应中各字段的解释:

将其存储在 Apifox 的环境变量中,以供取用。

以上就是 Oauth 认证过程中的第二步:向认证服务器发起令牌申请,并得到令牌(access_token)。

3 网站向微信申请用户信息

有了访问令牌,就可以用它向微信资源服务器请求用户资源,比如头像和昵称。

使用 Apifox 访问微信资源服务器的 API,位于 api.weixin.qq.com/sns/userinf... 在调用该接口时,你需要携带以下参数,这里面的参数值就是上一步返回的 access_token 和 openid,我们已经保存在环境变量中了,可以直接用 {{access_token}} 引用:

我们可以在 Apifox 中对该接口进行调试,发送请求后,微信资源服务器将验证所提交的令牌。如果令牌无误,服务器便会允许访问并返回用户信息,例如昵称和头像,正如下图展示的那样。

观察 API 返回的 JSON 数据,用户昵称位于 nickname 字段,而头像地址则在 headimgurl 字段。现在,你可以利用这些信息在网站上展示用户的微信昵称和头像。

调试 OAuth 2.0 接口大致就是上面的步骤,总共分三步:

第一步,在登录提供方(如微信或谷歌等)的页面上操作授权,获得授权 code;

第二步,在 Apifox 里用授权页返回的 code 申请 access_token;

第三步,在 Apifox 里用 access_token 请求更多信息。

使用 Apifox 调试接口能够帮助你更加清晰地看到上下游所需要传递的各项参数,优化调试体验。一旦在 Apifox 中成功将完整链路跑通,后端开发者就可以开始编写代码来实现整个业务流程,减少了在开发过程中进行频繁验证的麻烦。

相关推荐
向前看-6 小时前
验证码机制
前端·后端
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭7 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
超爱吃士力架8 小时前
邀请逻辑
java·linux·后端
AskHarries10 小时前
Spring Cloud OpenFeign快速入门demo
spring boot·后端
isolusion11 小时前
Springboot的创建方式
java·spring boot·后端
zjw_rp11 小时前
Spring-AOP
java·后端·spring·spring-aop
TodoCoder11 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
少年姜太公12 小时前
从零开始详解js中的this(下)
前端·javascript·程序员
凌虚12 小时前
Kubernetes APF(API 优先级和公平调度)简介
后端·程序员·kubernetes
机器之心13 小时前
图学习新突破:一个统一框架连接空域和频域
人工智能·后端