OAuth2 授权

如题所述

第1个回答  2022-07-27

引自balckheart大神的博文

通俗的话可以这样去理解,假如你们公司正在开发一个 第三方应用XXX ,该应用会需要在 微信 中分享出来一个活动页,该活动需要让 微信用户 去参与,你们的应用需要 收集到用户的姓名,头像,地域 等信息,那么问题来了?你的应用如何才能拿到所有参与活动的微信用户的基本信息呢?

根据以上示例,可以将OAuth2分为四个角色:

不难看出,OAuht2 解决问题的关键在于使用 授权服务器 提供一个 访问凭据 给到 第三方应用 ,让 第三方应用 可以在 不知道资源所有者 在 资源服务器上的账号和密码 的情况下,能获取到 资源所有者 在 资源服务器 上的 受保护资源 ,这里的受保护资源就是 微信用户的姓名以及头像等信息 。

引用 blackheart 博主 的流程图

拿上述的获取微信用户信息示例来说

至此,整套授权流程结束,可以看出 访问令牌 是整个流程中的核心

除此之外,还需要提供一个让第三方应用程序注册的管理后台,当第三方应用注册后会给到第三方应用一个app_id & app_secret ,app_secret是第三方应用程序的私钥,不允许在授权过程中传递的,主要用户安全加密用。

引用 blackheart 博主 的流程图

简要阐述一下各步骤

第三方应用使用用户代理(浏览器,或自己的服务器)访问微信授权服务器提供的一个url,该url就是提供获取授权码的url,第三方应用需要传递一下参数

示例请求

微信授权服务器验证第三方应用再上一步中传递的参数,确认无误后会提供一个页面给微信用户a登录或者手动确认授权操作,操作超过后微信授权服务器会根据redirect_uri重定向到该地址,并携带下发的授权许可code

类似重定向地址

第三方应用根据上一步拿到的授权码code以及app_id,重定向地址等参数,再次请求微信授权服务器,请求获取访问令牌access_token

请求示例如下

微信授权服务器返回访问令牌和一些刷新令牌,令牌过期时间等信息给到第三方应用

返回示例如下:

第三方应用根据访问令牌去微信资源服务器获取微信用户a的基本信息。

请求参数示例

请求url示例

返回参数示例

返回url示例

请求参数示例

请求url 示例

请求参数示例

当访问令牌过期时,由第三方应用调用微信授权服务器的刷新令牌接口,传递以下参数即可。

这样就可以一直使用有效的访问令牌啦

相似回答