Laravel Passport 应用

从 Laravel 5.3 开始,内置 oAuth 认证组件 Passport,其基于 league 的 PHP oAuth 库,本文结合 Laravel 5.5 官方文档介绍 oAuth 能为开发者解决什么问题。

多终端 API 的好伙伴

在手机,平板,PC 共存的时代,应用软件大都需要支持多终端。

APP / 浏览器与 API 服务器之间通信,服务器必须验证来访者的身份。这些通信多基于 HTTP 协议,HTTP 天生记不住来访者的身份,页面传输完便忘了。传统网站为了在多次页面请求间记住来访者,浏览器和服务端分别开发了 Cookie 和 Session,两种技术共同作用以弥补 HTTP 的不足。手机 APP 出现时,这小伙伴并不知道 Cookie 为何物,于是 API Token 方案被提出并逐渐流行,它类似浏览器的 Cookie,但可以用于任何基于 HTTP 协议通信的客户端,API Token 由提供 API 的服务器生成,形式上是一个包含了用户身份的加密字符串,其生命周期如下:

  1. APP / 浏览器 登录 服务器
  2. 服务器 验证用户名 / 密码,如果不合法则到此结束,否则继续;
  3. 服务器生成 Token 保存,并将 Token 和用户 ID 信息关联起来,将 Token 返回
  4. APP / 浏览器收到 Token 并保存
  5. APP / 浏览器 再次访问 服务器,并向服务器出示 Token
  6. 服务器通过 Token 查找用户ID,如果找不到则到此结束,否则继续;
  7. APP / 浏览器服务器 请求退出,并向服务器出示 Token
  8. 服务器通过 Token 查找用户ID,如果找不到则到此结束,否则 服务器 删除 Token

三方认证

参见官方文档 Issuing Access Tokens

如今诸多手机 APP / PC 网站都支持用 QQ 或微信账号登录,这种登录认证方式就是三方认证,哪三方呢?他们是:

  • 用户
  • APP
  • 认证服务(例如 QQ,微信 …)

三方认证要确保这三者间两两互相识别身份。

两方认证

参见官方文档 Password Grant Tokens

两方认证是多数开发者常用的认证方式。其特点为:

  • 用户直接将用户名/密码等信息告知 APP
  • 由 APP 向服务器请求 API Token 时需必须提供以下信息:
    • 用户的用户名/密码
    • APP 在认证服务端注册的 Client ID / Client Secret ( 也被称为 APP ID / APP Secret 或 Access Key / Access Secret )

简化的三方认证

参见官方文档 Implicit Grant Tokens

简化的三方认证以牺牲安全性为代价,服务端不再对发起请求的客户端认证,直接将 API Token 发给客户端。

服务端-to-服务端认证

当需要向其他应用服务器提供 API,但此 API 并不需要 APP 的目标用户信息时,就要用到这种认证,其特点为:

  • 应用服务器向 API 服务器请求 API Token 时需提供以下信息:
    • 应用服务器在 API 服务器注册的 Client ID / Client Secret ( 也被称为 APP ID / APP Secret 或 Access Key / Access Secret )

用于开发测试的认证

参见官方文档 Personal Access Tokens