mapkyca / known-oauth2-server
提供API调用用的OAuth2认证服务器
Requires
- php: >=7.1
- firebase/php-jwt: ^5.2
Requires (Dev)
- mapkyca/known-dev-scripts: ^1.0
- mapkyca/known-language-tools: ^1.0
- mapkyca/known-phpcs: ^1.0
README
**实验性**
此插件为Known提供OAuth2服务器,允许用户创建应用程序,并允许客户端使用OAuth2访问令牌对API和网站进行身份验证。
此插件是对规范的实验性基本实现,所以请尝试使用并报告您发现的所有问题!
用法
- 在插件中安装
- 通过设置创建应用程序
- 在您的OAuth2客户端使用适当的密钥
支持
当前插件支持
- response_type=code
- grant_type=authorization_code
- grant_type=refresh_token
- grant_type=password
- state参数验证
- 作用域支持
- OpenID Connect
示例用法
获取代码
https://mysite.com/oauth2/authorise/?response_type=code&client_id=<你的API密钥>&redirect_uri=<你的端点路径>
如果需要,您将被跳转到一个登录和授权页面,所以请继续前进。
根据规范,您可以省略redirect_uri
,在这种情况下,响应将是一个直接的json编码的blob。如果指定了redirect_uri
,您将被转发到端点,并在GET字段中包含适当的参数。
获取令牌
https://mysite.com/oauth2/access_token/?grant_type=authorization_code&client_id=<你的API密钥>&redirect_uri=<你的端点路径>
您应该会得到一个包含访问令牌、过期时间和刷新令牌的json编码的blob。
刷新令牌
如果您的访问令牌已过期,您可以使用刷新令牌更新它。
https://mysite.com/oauth2/access_token/?grant_type=refresh_token&refresh_token=<刷新令牌>
成功将返回新的访问令牌、刷新令牌和过期时间。它还将销毁原始令牌。
访问令牌
在成功登录后,使用的令牌将保存在当前会话中的$_SESSION['oauth2_token']
,您可以使用它来检查作用域权限、应用程序ID和其他详细信息。
授予给特定用户的范围也保存在用户对象的数组$user->oauth2[$client_id]['scope']
中,并在登录时进行交叉检查。
为什么不使用本机签名HTTP呢?
本机而言,Known使用每个用户的API密钥来签名请求,那么为什么不使用这个呢?
当然,您仍然可以,OAuth2服务器并不替代这个选项。在许多方面,签名HTTP方法更容易开始,然而...
- 几乎每种语言都有许多现有的OAuth2库。
- 使用OAuth2,您为每个应用程序提供不同的凭证。这意味着,如果您不再希望从应用程序A访问,但仍想保留B和C,您可以专门撤销A的令牌。
OpenID Connect
如果包含作用域openid
,在成功后,服务器将在id_token
字段返回一个OpenID Connect签名JWT。
此令牌将包含有关认证用户的基本信息。如果您还请求email
和profile
作用域,您将获得一些额外的配置文件信息(电子邮件、全名、图片URL、用户名等)。
您可以使用应用程序的公钥(从 https://yourserver.com/oauth2/CLIENTID/key
获取)来验证此令牌
请参阅
- 作者:Marcus Povey http://www.marcus-povey.co.uk
- OAuth2 规范 https://tools.ietf.org/html/rfc6749