delboy1978uk / bone-oauth2
Bone框架的OAuth2功能
v1.8.6
2024-09-06 22:29 UTC
Requires
- php: ^8.2
- ext-curl: *
- ext-json: *
- delboy1978uk/bone: ^3.10
- delboy1978uk/bone-doctrine: ^2.0
- delboy1978uk/bone-user: ^2.4
- laminas/laminas-diactoros: ^3.3
- laminas/laminas-uri: ^2.11
- league/oauth2-server: ^8.5
Requires (Dev)
- delboy1978uk/dev-tools: ^1.0
- roave/security-advisories: dev-master
Suggests
- delboy1978uk/bone-open-api: Open API documentation
- dev-master
- v1.8.6
- v1.8.5
- v1.8.4
- v1.8.3
- v1.8.2
- v1.8.1
- v1.8.0
- v1.7.8
- v1.7.7
- v1.7.6
- v1.7.5
- v1.7.4
- v1.7.3
- v1.7.2
- v1.7.1
- v1.7.0
- v1.6.2
- v1.6.1
- v1.6.0
- v1.5.3
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.12
- v1.4.11
- v1.4.5
- v1.4.4
- v1.4.3
- v1.4.2
- v1.4.1
- v1.4.0
- v1.3.5
- v1.3.4
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.6
- v1.2.5
- v1.2.4
- v1.2.3
- v1.2.2
- v1.2.1
- v1.2.0
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.9
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v0.7.0
- v0.6.0
- v0.5.0
- v0.4.0
- v0.3.0
- v0.2.0
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- v0.0.3
- v0.0.2
- v0.0.1
- dev-7-v2-use-attributes
This package is auto-updated.
Last update: 2024-09-06 22:30:14 UTC
README
安装
从Bone框架项目的根目录使用composer进行安装
composer require delboy1978uk/bone-oauth2
配置
只需将包添加到Bone的包配置中
<?php // use statements here use Bone\OAuth2\BoneOAuth2Package; use Bone\User\BoneUserPackage; return [ 'packages' => [ // packages here (order is important)..., BoneUserPackage::class, BoneOAuth2Package::class, ], // ... ];
生成公钥和私钥
首先进入data/keys
目录。
cd data/keys
使用openssl生成私钥,然后从私钥中提取公钥
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key
chmod 660 public.key
chmod 660 private.key
如果您想为私钥提供密码,则运行以下命令
openssl genrsa -passout pass:_passphrase_ -out private.key 2048
openssl rsa -in private.key -passin pass:_passphrase_ -pubout -out public.key
chmod 660 public.key
chmod 660 private.key
如果已使用密码生成私钥,则必须在授权服务器处提供该密码。
公钥应分发给任何需要验证访问令牌的服务(例如资源服务器)。
生成加密密钥
返回到项目根目录。
cd ../..
运行此命令并将它添加到您的配置中。
vendor/bin/generate-defuse-key
运行数据库迁移以生成表
vendor/bin/bone migrant:diff
vendor/bin/bone migrant:migrate
vendor/bin/bone migrant:generate-proxies
所需配置值
密钥可以存储在config数组之外,并作为环境变量获取以提高安全性,但这些是您需要的配置设置。
<?php return [ 'oauth2' => [ 'clientCredentialsTokenTTL' => 'PT1H', // 1hour 'authCodeTTL' => 'PT1M', // 1 minute 'accessTokenTTL' => 'PT5M', // 5 minutes 'refreshTokenTTL' => 'P1M', // 1 month 'privateKeyPath' => '/path/to/private.key', 'publicKeyPath' => '/path/to/private.key', 'encryptionKey' => 'generatedKeyString', ], ];
用法
服务器端
您可以使用vendor/bin/bone
命令创建客户端。您还可以创建作用域,并将作用域授予客户端。
要将端点锁定以需要访问令牌,只需将ResourceServerMiddleware
添加到Bone框架包类中的路由或路由组中即可
$router->map('GET', '/ping', [ExampleController::class, 'pingAction'])->middleware($c->get(ResourceServerMiddleware::class));
在您的控制器中,您将访问到用户,现在它是一个OAuthUser
的实例。您还可以获取请求授予的作用域。
/** * @param $request * @param array $args * @return ResponseInterface * @throws \Exception */ public function someAction(ServerRequestInterface $request, array $args) : ResponseInterface { /** @var \Bone\OAuth2\Entity\OAuthUser $user */ $user = $request->getAttribute('user'); if (!in_array('email', $request->getAttribute('oauth_scopes'))) { throw new Exception('How dare you!', 403); } return new JsonResponse(['random' => 'data']); }
客户端
客户端使用RFC6749中描述的标准OAuth2流程进行连接,您的Bone应用中的两个端点是
- /oauth2/authorize
- /oauth2/token
站点用户
登录用户现在有一个额外的端点可以访问,即/user/api-keys
,在那里他们可以获取新的API密钥或删除现有的密钥。
控制台
您还可以访问更多的bone
命令选项
bone client:create
bone client:create
bone scope:create
bone scope:list