arietimmerman / laravel-oauth-introspect-middleware
Laravel 中间件,允许资源所有者使用远程授权服务器验证 OAuth2 访问令牌
v0.5.4
2022-01-06 20:49 UTC
Requires
- php: ^7.0|^8.0
- guzzlehttp/guzzle: ^6.0|^7.0
- illuminate/support: ^6.0|^7.0|^8.0
Requires (Dev)
- orchestra/testbench: ~3.0
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-07 02:40:18 UTC
README
特别是对于微服务架构,认证和授权功能应该委托给其他服务。通过将 Web 服务实现为纯 OAuth2 资源服务器,并依赖于远程授权服务器上的令牌验证来保护资源是最佳做法。
Laravel OAuth 2.0 令牌检查中间件
Laravel Passport 提供了完整的 OAuth2 服务器实现,但缺少了 OAuth 2.0 令牌检查(RFC7662)中定义的可选 OAuth2 功能。
检查端点由 ipunkt/laravel-oauth-introspection 提供。此包提供了验证访问令牌对远程检查端点的中间件。
注意:为了防止令牌扫描攻击,该端点还必须要求某种形式的授权才能访问此端点。提供的中间件假设检查端点需要使用客户端凭证授权检索的 OAuth2 Bearer 令牌。因此,您必须提供有效的 客户端 ID 和 客户端密钥。
安装
在您的资源服务器上安装此包
composer require arietimmerman/laravel-oauth-introspect-middleware
并在您的 config/app.php
中添加服务提供者
'providers' => [ // [..] \ArieTimmerman\Laravel\OAuth2\ServiceProvider::class // [..] ];
并在您的 App/Http/Kernel.php
中添加中间件
protected $routeMiddleware = [ // [..] 'verifyaccesstoken' => \ArieTimmerman\Laravel\OAuth2\VerifyAccessToken::class, // Or 'verifyaccesstoken_has_any' => \ArieTimmerman\Laravel\OAuth2\VerifyAccessTokenHasAnyScope::class, // [..] ];
发布配置
php artisan vendor:publish
配置
在您的 .env
文件中,定义以下属性
# Url of the authorization server AUTHORIZATION_SERVER_URL="https://authorization.server.dom" # Client Identifier as defined in https://tools.ietf.org/html/rfc6749#section-2.2 AUTHORIZATION_SERVER_CLIENT_ID="123" # The client secret AUTHORIZATION_SERVER_CLIENT_SECRET="abcdefg" # Endpoint for requesting the access token AUTHORIZATION_SERVER_TOKEN_URL="${AUTHORIZATION_SERVER_URL}/oauth/token" # The OAuth2 Introspection endpoint https://tools.ietf.org/html/rfc7662 AUTHORIZATION_SERVER_INTROSPECT_URL="${AUTHORIZATION_SERVER_URL}/oauth/introspect" # Optional configuration for requesting an OAuth2 access tokens using the implicit grant flow AUTHORIZATION_SERVER_AUTHORIZATION_URL="${AUTHORIZATION_SERVER_URL}/oauth/authorize" AUTHORIZATION_SERVER_REDIRECT_URL=https://my.machine.dom
现在,使用中间件。
Route::group(['middleware'=>'verifyaccesstoken:required-scope1,required-scope2'], function () { Route::get('/endpoint1', 'UserController@index'); Route::resource('/resource', 'OrderController'); }); // or if only one of the scopes from the list is required Route::group(['middleware'=>'verifyaccesstoken_has_any:required-scope1,required-scope2'], function () { Route::get('/endpoint1', 'UserController@index'); Route::resource('/resource', 'OrderController'); });