微信授权的游戏


微信公众相关

定义

授予一个令牌,使得令者在特定时间能访问指定资源。

角色

  • 用户:拥有很多资源的财主
  • 客户端(应用+代理):想获得金主某些资源的商家
  • 服务端(授权服务+资源服务):想尽办法保护财主的资源

image

  1. 商户请示用户:能不能给我这些资源?
  2. 用户礼貌地回答:没问题,拿我的手谕去银行换吧
  3. 商户询问银行前台:这是用户的许可证,给我资源好吗?
  4. 前台小妹核实之后:您的许可证有效,这是你的令牌
  5. 商户来到银行金库:我有令牌,可以给我用户的资源
  6. 金库大哥再次检测后:都给你找出来啦,请慢用

授权类型

客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0定义了四种授权方式。

  • 授权码模式(authorization code):通过服务端
  • 简化模式(implicit):通过App或Web
  • 密码模式(resource owner password credentials):通过受信任的子应用
  • 客户端模式(client credentials):通过第三方应用API

授权码授权

最常用的方式,因为它针对服务器端进行了优化,且保证了用户隐私。它基于重定向流,意味着程序必须能够与用户代理(比如浏览器)进行交互,流程如下:

image

  1. 客户端:带上客户端ID、回调地址、回传类型、访问级别,重定向到授权地址
  2. 用户:用户可以看到授权对象和权限列表,并且在登录状态下选择许可授权
  3. 服务器:如果用户许可了授权,则服务器会把code回传
  4. 客户端:通过临时的code,向服务端请求Token
  5. 服务端:颁发Token,客户端授权通过,同时得到响应资源

静默授权

常见于移动应用和网站,授权完成后不保证安全性。它同样基于重定向流(向服务端注册过的),不支持刷新Token。

image

  1. 客户端应用:基本与授权码一致,但回传类型为token
  2. 用户:完全与授权码一致,在登录状态下选择许可授权
  3. 服务端:如果用户许可授权,则重定向到客户端代理,并带上Token
  4. 客户端代理:重定向到客户端应用,并保留Token
  5. 客户端应用:发送一个包含脚本的页面给代理,并提取令牌
  6. 客户端代理:回传Token给应用程序,解码即可获得对应资源