跳到主要内容

调试 OAuth 2.0 鉴权接口

什么是 OAuth 2.0?

OAuth 2.0 是一种授权框架,允许用户授权第三方应用程序(例如通过支付宝、微信、QQ 账号)代表他们访问或注册服务。用户不再需要重复地手动输入自己的各项信息才能完成网页注册,使用第三方鉴权登录还能够确保个人数据的安全性和灵活性。

这种授权框架已被广泛应用于许多互联网服务中,如社交媒体平台、API 提供商和第三方应用程序集成。

鉴权流程图如下:

快速上手

现在假设你搭建了 1 个网站,而这个网站允许用户使用微信扫码登录。那么,你的网站就是客户端。而微信就是认证服务器和资源服务器。要想接入 OAuth 2.0,具体需要经过哪些步骤呢?本文将上面流程图的每一个步骤进行说明。

1. 网页请求用户给予授权

用户点击网站上的「微信登录」按钮后,将会被导向至由微信官方提供的扫码登录页面。通过分析域名可以得知,浏览器此时实际访问的是微信认证服务器。

认证页面的 URL 为:https://open.weixin.qq.com/connect/qrconnect。根据微信官方文档说明,调用此端口需要携带的 Query 参数是:

参数名参数值
appid你的网站在微信开放平台申请到的应用唯一标识
redirect_uri用户确认授权后,重定向到你的网站中的一个页面,接收微信返回的 code 值
response_type固定值,code
scope固定值,snsapi_login
state随机数

2. 用户同意网页授权请求

用户使用微信扫码后,手动同意并给予客户端(网站)微信账号授权,允许客户端(网站)获取用户在资源服务器(微信)的昵称、头像等个人信息。

微信授权

3. 网页向微信申请令牌

用户同意授权之后,浏览器会从扫码登录界面自动重定向到 redirect_uri,其中的 Query 参数携带了 codestate 字段。

参数名参数值
code微信返回的随机数
state在第 1 步中通过 state 字段传给微信的随机数,原样返回

redirect_uri 由你架设的网站所提供,因此可以获取到 code 字段。然后通过服务器调用认证服务(微信)的 API 接口以申请令牌。API 的地址是 https://api.weixin.qq.com/sns/oauth2/access_token,需要携带以下 Query 参数:

参数名参数值
appid你的网站在微信开放平台申请到的应用唯一标识
secret你的网站在微信开放平台申请到的应用密钥
code微信返回的 code 的值
grant_type固定值,authorization_code

在调试的过程中,可以使用 Apifox 来调用认证服务器(微信)的 API 接口申请令牌。新建”快捷请求“后,参考下图填写各项参数后发送请求。

4. 微信授权网页请求

调用认证服务器(微信)的 API 接口后,微信会校验相关信息是否有效。认证通过后,微信向客户端(网页)发放授权令牌,含在 API 接口返回的 JSON 中。

字段名字段值
access_token接口调用凭证,即令牌
expires_in令牌的有效期
refresh_token用于刷新令牌的凭证,即刷新令牌
openid授权用户的唯一标识
scope用户授权的作用域

数据返回格式可参考下图。

5. 网页获取资源微信中的用户信息

获取授权令牌之后,网页就可以微信申请获取用户信息资源(头像和昵称)了。微信资源的 API 的地址是 https://api.weixin.qq.com/sns/userinfo,需要传递以下 Query 参数:

字段名字段值
access_token接口调用凭证,即令牌
openid授权用户的唯一标识

通过前面步骤所获取到的令牌,使用 Apifox 请求微信资源(头像和昵称)的 API 地址。

6. 微信确认令牌并向网页返回用户信息

资源服务器(微信)检查令牌无误后,向客户端(网页)开放资源,即返回用户的昵称、头像等信息。

可以看出,用户的昵称在 API 返回的 JSON 的 nickname 字段,而用户的头像地址在 headimgurl 字段。现在有了这些信息后,用户无需繁琐的账号密码注册也能够完成网页注册,网站上也可以直接展示用户的微信头像和昵称。

总结

调试 OAuth 2.0 接口大致需要六步,使用 Apifox 调试接口能够帮助你更加清晰地看到上下游所需要传递的各项参数,优化调试体验。使用 Apifox 将完整链路跑通后,后端就可以开始编写代码来完成整个业务过程,而不必边开发边验证。