从 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 的服务器生成,形式上是一个包含了用户身份的加密字符串,其生命周期如下:
APP / 浏览器
登录服务器
;服务器
验证用户名 / 密码,如果不合法则到此结束,否则继续;- 服务器生成
Token
保存,并将Token
和用户 ID 信息关联起来,将Token
返回 APP / 浏览器
收到Token
并保存- …
APP / 浏览器
再次访问服务器
,并向服务器出示Token
- 服务器通过
Token
查找用户ID,如果找不到则到此结束,否则继续; - …
APP / 浏览器
向服务器
请求退出,并向服务器出示Token
- 服务器通过
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