phpway / one-auth-server
简单OAuth2服务器实现,功能有限,专为单页面应用(SPA)设计
0.9.4
2024-08-24 08:05 UTC
Requires
- php: ^7.4 || ^8.0
- hidehalo/nanoid-php: ^1.1
- psr/http-message: ^1.1|^2.0
README
OneAuth服务器是一个非常简单的OAuth2服务器实现,功能有限,专门为根据以下工作流程仅使用引用令牌进行认证的单页面应用(SPA)设计。
如果您需要一个功能完整的OAuth2服务器实现,您可以查看官方OAuth页面 https://oauth.ac.cn/code/php/。
功能
目前,OneAuth服务器提供3个控制器
AuthorizeController
- 处理获取授权码
的请求,这是一个一次性使用、短期有效的随机代码,用于SPA获取访问令牌
。TokenController
- 处理获取访问令牌
的请求。ResourceController
- 用于验证API请求。
每个控制器所需请求数据和响应细节在以下工作流程中描述。
由于OneAuth服务器专为认证SPA设计,OneAuth服务器与客户端应用程序之间的所有通信对用户来说都是透明的(无论是通过URL搜索参数,还是通过在POST请求中发送表单数据),这意味着这两个实体之间没有交换数据的回话。
因此,工作流程中没有客户端密钥
,因为SPA没有隐藏它的机制。但是它使用PKCE保护,该保护要求客户端应用程序在请求授权码时发送code verifier
(随机字符串)的散列,然后在交换授权码以获取访问令牌时发送code verifier的明文。
PSR-7 请求/响应
OneAuth服务器使用与PSR-7兼容的请求和响应对象来处理获取授权码和/或访问令牌的请求。因此,您需要提供一个最适合您应用程序的PSR-7实现。以下是一些您可以选择的选项
- Slim-Psr7 - Slim框架PSR-7实现
- httpsoft/http-message & httpsoft/http-server-request - 快速、严格且轻量级的实现
为了向客户端发送响应,您还需要实现一个响应发射器,或者使用现有的一个(例如,来自Slim框架的ResponseEmitter.php)。
SPA工作流程
待办事项
- 为保护API添加资源控制器
- 在标题中识别令牌
- 在GET中识别令牌
- 在POST中识别令牌
- 实现撤销令牌
- 单个令牌
- 给定用户的全部
- 添加刷新令牌的功能