jwt中间件验证

This commit is contained in:
hgc 2025-01-02 21:53:46 +08:00
parent 750b566f1e
commit 938caef787
6 changed files with 113 additions and 91 deletions

View File

@ -63,7 +63,7 @@ class GoogleAdsCustomers
$option['refresh_token'] = $thirdUser->access_token; $option['refresh_token'] = $thirdUser->access_token;
// dump($option); // dump($option);
$allRootAccounts = $this->googleAdsAccountService->runGetAccountHierarchy($option); $allRootAccounts = $this->googleAdsAccountService->runGetAccountHierarchy($option);
// dump($allAccounts); // dump($allRootAccounts);
foreach ($allRootAccounts as $rootAccountId => $accounts) { foreach ($allRootAccounts as $rootAccountId => $accounts) {
// dump($rootAccountId, $accounts); // dump($rootAccountId, $accounts);
foreach ($accounts as $account) { foreach ($accounts as $account) {

View File

@ -1,58 +1,61 @@
<?php <?php
namespace app\middleware; namespace app\middleware;
use Webman\MiddlewareInterface; use Webman\MiddlewareInterface;
use Webman\Http\Request; use Webman\Http\Request;
use Webman\Http\Response; use Webman\Http\Response;
use app\rpc\client\AuthRpcClient; use Firebase\JWT\JWT as FJWT;
use Firebase\JWT\Key;
use Exception; use Exception;
class Jwt implements MiddlewareInterface class Jwt implements MiddlewareInterface
{ {
// 签名密钥
private const SIGNING_KEY = '83OP5jf43875jK7';
public function process(Request $request, callable $handler): Response public function process(Request $request, callable $handler): Response
{ {
// 获取 Authorization 头 // 获取 Authorization 头
// $authorization = $request->header('Authorization', ''); $authorization = $request->header('Authorization', '');
// if (empty($authorization) || strpos($authorization, 'Bearer ') !== 0) { if (empty($authorization) || strpos($authorization, 'Bearer ') !== 0) {
// return response(['code' => 1, 'msg' => '缺少 Authorization 头或格式无效'], 200); return Json([
// } 'code' => 1,
'msg' => '缺少 Authorization 头或格式无效',
'data' => []
]);
}
// 提取 JWT token // 提取 JWT token
// $jwtToken = substr($authorization, 7); $jwtToken = substr($authorization, 7);
// dump($jwtToken);
// return Json([
// 'code' => 0,
// 'msg' => 'ok',
// 'data' => $jwtToken,
// ]);
try { try {
// 调用 AuthRpcClient 进行 JWT 验证 // 使用 firebase/php-jwt 解码并验证 JWT
// $authRpcClient = new AuthRpcClient(); // $decoded = FJWT::decode($jwtToken, new Key(self::SIGNING_KEY, 'HS512'), $headers = new stdClass()); // 使用 HMAC-SHA512 算法进行验证
// $response = $authRpcClient->validateJwtToken($jwtToken); $decoded = FJWT::decode($jwtToken, new Key(self::SIGNING_KEY, 'HS512'));
//
// // 如果验证不通过,返回错误消息
// if ($response['result'] !== 'JWT_VERIFY_OK') {
// return response([
// 'code' => 1,
// 'msg' => $this->getErrorMessage($response['result']),
// ], 200);
// }
//
// // 如果验证通过,将用户数据 (claims) 存入请求属性,供后续使用
// $request = $request->withAttribute('user', $response['claims']);
$jwtClaims = ['uid' =>'8d2f93fd-af63-4d46-90ab-69f366a19332' ];
$request->jwtClaims = $jwtClaims;
// // 如果返回了新 token将其添加到响应头 X-New-Token 中 // 将解码后的数据(即 claims存入请求对象后续可以访问
$response = $handler($request); $request->jwtClaims = (array)$decoded;
// if (!empty($response['new_token'])) {
// $response = $response->withHeader('X-New-Token', $response['new_token']);
// }
return $response; // 验证 JWT Token
// dump((array)$decoded);
// return Json([
// 'code' => 0,
// 'msg' => 'JWT 验证成功',
// 'data' => []
// ]);
// 继续处理请求
return $handler($request);
} catch (Exception $e) { } catch (Exception $e) {
return response(['code' => 1, 'msg' => 'JWT 验证失败: ' . $e->getMessage()], 200);
return Json([
'code' => 1,
'msg' => $e->getMessage(),
'data' => []
]);
// return response(['code' => 1, 'msg' => 'JWT 验证失败: ' . $e->getMessage()], 200);
} }
} }

View File

@ -77,7 +77,7 @@ class UpdateGoogleAdsTask
} }
); );
new Crontab('* * */6 * * *', function () { new Crontab('* */20 * * * *', function () {
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsAssetRelations::IMAGEASSET . '开始'); dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsAssetRelations::IMAGEASSET . '开始');
Event::emit(GoogleAdsAssetRelations::IMAGEASSET, []); Event::emit(GoogleAdsAssetRelations::IMAGEASSET, []);
}); });
@ -88,7 +88,7 @@ class UpdateGoogleAdsTask
} }
); );
new Crontab('0 */15 * * * *', function () { new Crontab('0 */3 * * * *', function () {
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsCustomers::CUSTOMERADD . '开始'); dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsCustomers::CUSTOMERADD . '开始');
Event::emit(GoogleAdsCustomers::CUSTOMERADD,[]); Event::emit(GoogleAdsCustomers::CUSTOMERADD,[]);
} }

View File

@ -42,7 +42,8 @@
"webman/think-orm": "^1.1", "webman/think-orm": "^1.1",
"phpoffice/phpspreadsheet": "^3.6", "phpoffice/phpspreadsheet": "^3.6",
"grpc/grpc": "^1.38", "grpc/grpc": "^1.38",
"google/protobuf": "^4.29" "google/protobuf": "^4.29",
"firebase/php-jwt": "^6.10"
}, },
"suggest": { "suggest": {
"ext-event": "For better performance. " "ext-event": "For better performance. "

111
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "3b7d410388f353ce39d707fa20dd1931", "content-hash": "2436c19ae2c59b32e3a555bf9791ac20",
"packages": [ "packages": [
{ {
"name": "brick/math", "name": "brick/math",
@ -1961,16 +1961,16 @@
}, },
{ {
"name": "nesbot/carbon", "name": "nesbot/carbon",
"version": "2.72.5", "version": "2.72.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/briannesbitt/Carbon.git", "url": "https://github.com/briannesbitt/Carbon.git",
"reference": "afd46589c216118ecd48ff2b95d77596af1e57ed" "reference": "1e9d50601e7035a4c61441a208cb5bed73e108c5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/afd46589c216118ecd48ff2b95d77596af1e57ed", "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/1e9d50601e7035a4c61441a208cb5bed73e108c5",
"reference": "afd46589c216118ecd48ff2b95d77596af1e57ed", "reference": "1e9d50601e7035a4c61441a208cb5bed73e108c5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1990,7 +1990,7 @@
"doctrine/orm": "^2.7 || ^3.0", "doctrine/orm": "^2.7 || ^3.0",
"friendsofphp/php-cs-fixer": "^3.0", "friendsofphp/php-cs-fixer": "^3.0",
"kylekatarnls/multi-tester": "^2.0", "kylekatarnls/multi-tester": "^2.0",
"ondrejmirtes/better-reflection": "*", "ondrejmirtes/better-reflection": "<6",
"phpmd/phpmd": "^2.9", "phpmd/phpmd": "^2.9",
"phpstan/extension-installer": "^1.0", "phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^0.12.99 || ^1.7.14", "phpstan/phpstan": "^0.12.99 || ^1.7.14",
@ -2003,10 +2003,6 @@
], ],
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": {
"dev-master": "3.x-dev",
"dev-2.x": "2.x-dev"
},
"laravel": { "laravel": {
"providers": [ "providers": [
"Carbon\\Laravel\\ServiceProvider" "Carbon\\Laravel\\ServiceProvider"
@ -2016,6 +2012,10 @@
"includes": [ "includes": [
"extension.neon" "extension.neon"
] ]
},
"branch-alias": {
"dev-2.x": "2.x-dev",
"dev-master": "3.x-dev"
} }
}, },
"autoload": { "autoload": {
@ -2064,7 +2064,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-06-03T19:18:41+00:00" "time": "2024-12-27T09:28:11+00:00"
}, },
{ {
"name": "nikic/fast-route", "name": "nikic/fast-route",
@ -2291,16 +2291,16 @@
}, },
{ {
"name": "phpoffice/phpspreadsheet", "name": "phpoffice/phpspreadsheet",
"version": "3.6.0", "version": "3.7.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/PHPOffice/PhpSpreadsheet.git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
"reference": "bce5db99872f9613121c3ad033c43318a3789396" "reference": "2fc12fdc58d39297c7b8c72d65b37a1a25d65ab5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/bce5db99872f9613121c3ad033c43318a3789396", "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/2fc12fdc58d39297c7b8c72d65b37a1a25d65ab5",
"reference": "bce5db99872f9613121c3ad033c43318a3789396", "reference": "2fc12fdc58d39297c7b8c72d65b37a1a25d65ab5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2389,9 +2389,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
"source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/3.6.0" "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/3.7.0"
}, },
"time": "2024-12-08T15:04:12+00:00" "time": "2024-12-27T05:34:47+00:00"
}, },
{ {
"name": "phpoption/phpoption", "name": "phpoption/phpoption",
@ -3118,12 +3118,12 @@
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": { "branch-alias": {
"dev-main": "3.5-dev" "dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@ -3519,12 +3519,12 @@
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": { "branch-alias": {
"dev-main": "3.5-dev" "dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@ -4137,16 +4137,16 @@
}, },
{ {
"name": "workerman/redis-queue", "name": "workerman/redis-queue",
"version": "v1.2.0", "version": "v1.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/walkor/redis-queue.git", "url": "https://github.com/walkor/redis-queue.git",
"reference": "7b6aee70d69e5c9427c0411d85f8398027831b42" "reference": "75dbf7ed2ea228c45dc0df82c0fea35879b715d0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/walkor/redis-queue/zipball/7b6aee70d69e5c9427c0411d85f8398027831b42", "url": "https://api.github.com/repos/walkor/redis-queue/zipball/75dbf7ed2ea228c45dc0df82c0fea35879b715d0",
"reference": "7b6aee70d69e5c9427c0411d85f8398027831b42", "reference": "75dbf7ed2ea228c45dc0df82c0fea35879b715d0",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4168,22 +4168,22 @@
"homepage": "http://www.workerman.net", "homepage": "http://www.workerman.net",
"support": { "support": {
"issues": "https://github.com/walkor/redis-queue/issues", "issues": "https://github.com/walkor/redis-queue/issues",
"source": "https://github.com/walkor/redis-queue/tree/v1.2.0" "source": "https://github.com/walkor/redis-queue/tree/v1.2.1"
}, },
"time": "2024-02-28T07:00:03+00:00" "time": "2025-01-02T09:21:45+00:00"
}, },
{ {
"name": "workerman/webman-framework", "name": "workerman/webman-framework",
"version": "v1.6.9", "version": "v1.6.13",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/walkor/webman-framework.git", "url": "https://github.com/walkor/webman-framework.git",
"reference": "c328d94f3aa50a06a59689656a24a580a7b51dc1" "reference": "193cc0a157b56e6bcdc594b202e4d95404dde407"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/walkor/webman-framework/zipball/c328d94f3aa50a06a59689656a24a580a7b51dc1", "url": "https://api.github.com/repos/walkor/webman-framework/zipball/193cc0a157b56e6bcdc594b202e4d95404dde407",
"reference": "c328d94f3aa50a06a59689656a24a580a7b51dc1", "reference": "193cc0a157b56e6bcdc594b202e4d95404dde407",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4235,24 +4235,34 @@
"source": "https://github.com/walkor/webman-framework", "source": "https://github.com/walkor/webman-framework",
"wiki": "https://doc.workerman.net/" "wiki": "https://doc.workerman.net/"
}, },
"time": "2024-12-11T12:41:18+00:00" "time": "2025-01-02T10:40:52+00:00"
}, },
{ {
"name": "workerman/workerman", "name": "workerman/workerman",
"version": "v4.2.1", "version": "v5.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/walkor/workerman.git", "url": "https://github.com/walkor/workerman.git",
"reference": "cafb5a43d93d7d30a16b32a57948581cca993562" "reference": "df67931cc602675e95fb2eace90948fa642a3024"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/walkor/workerman/zipball/cafb5a43d93d7d30a16b32a57948581cca993562", "url": "https://api.github.com/repos/walkor/workerman/zipball/df67931cc602675e95fb2eace90948fa642a3024",
"reference": "cafb5a43d93d7d30a16b32a57948581cca993562", "reference": "df67931cc602675e95fb2eace90948fa642a3024",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.0" "ext-json": "*",
"php": ">=8.1"
},
"conflict": {
"ext-swow": "<v1.0.0"
},
"require-dev": {
"guzzlehttp/guzzle": "^7.0",
"mockery/mockery": "^1.6",
"pestphp/pest": "2.x-dev",
"phpstan/phpstan": "1.11.x-dev"
}, },
"suggest": { "suggest": {
"ext-event": "For better performance. " "ext-event": "For better performance. "
@ -4260,7 +4270,7 @@
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Workerman\\": "./" "Workerman\\": "src"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@ -4271,22 +4281,24 @@
{ {
"name": "walkor", "name": "walkor",
"email": "walkor@workerman.net", "email": "walkor@workerman.net",
"homepage": "http://www.workerman.net", "homepage": "https://www.workerman.net",
"role": "Developer" "role": "Developer"
} }
], ],
"description": "An asynchronous event driven PHP framework for easily building fast, scalable network applications.", "description": "An asynchronous event driven PHP framework for easily building fast, scalable network applications.",
"homepage": "http://www.workerman.net", "homepage": "https://www.workerman.net",
"keywords": [ "keywords": [
"asynchronous", "asynchronous",
"event-loop" "event-loop",
"framework",
"http"
], ],
"support": { "support": {
"email": "walkor@workerman.net", "email": "walkor@workerman.net",
"forum": "http://wenda.workerman.net/", "forum": "https://www.workerman.net/questions",
"issues": "https://github.com/walkor/workerman/issues", "issues": "https://github.com/walkor/workerman/issues",
"source": "https://github.com/walkor/workerman", "source": "https://github.com/walkor/workerman",
"wiki": "http://doc.workerman.net/" "wiki": "https://www.workerman.net/doc/workerman/"
}, },
"funding": [ "funding": [
{ {
@ -4298,7 +4310,7 @@
"type": "patreon" "type": "patreon"
} }
], ],
"time": "2024-11-24T11:45:37+00:00" "time": "2024-12-30T15:42:54+00:00"
} }
], ],
"packages-dev": [], "packages-dev": [],
@ -4308,7 +4320,8 @@
"prefer-stable": true, "prefer-stable": true,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {
"php": ">=8.1" "php": ">=8.1",
"ext-grpc": "*"
}, },
"platform-dev": {}, "platform-dev": {},
"plugin-api-version": "2.6.0" "plugin-api-version": "2.6.0"

View File

@ -41,6 +41,7 @@ Route::group('/googleads', function () {
// Route::post('/get', [AdController::class, 'getAdStatus']); // Route::post('/get', [AdController::class, 'getAdStatus']);
}); });
})->middleware([ })->middleware([
app\middleware\Jwt::class,
app\middleware\OauthCheck::class, app\middleware\OauthCheck::class,
]); ]);
@ -52,6 +53,7 @@ Route::group('/googleads', function () {
// Route::post('/get', [AdController::class, 'getCampaignStatus']); // Route::post('/get', [AdController::class, 'getCampaignStatus']);
}); });
})->middleware([ })->middleware([
app\middleware\Jwt::class,
app\middleware\OauthCheck::class, app\middleware\OauthCheck::class,
]); ]);
Route::group('/adgroup', function () { Route::group('/adgroup', function () {
@ -62,11 +64,13 @@ Route::group('/googleads', function () {
// Route::post('/get', [AdController::class, 'getGroupStatus']); // Route::post('/get', [AdController::class, 'getGroupStatus']);
}); });
})->middleware([ })->middleware([
app\middleware\Jwt::class,
app\middleware\OauthCheck::class, app\middleware\OauthCheck::class,
]); ]);
Route::group('/asset', function () { Route::group('/asset', function () {
Route::post('/list', [AdController::class, 'listAssets']); Route::post('/list', [AdController::class, 'listAssets']);
})->middleware([ })->middleware([
app\middleware\Jwt::class,
app\middleware\OauthCheck::class, app\middleware\OauthCheck::class,
]); ]);
Route::group('/customer', function () { Route::group('/customer', function () {
@ -75,6 +79,7 @@ Route::group('/googleads', function () {
Route::post('/list_resource', [CustomerController::class, 'accessibleCustomers']); Route::post('/list_resource', [CustomerController::class, 'accessibleCustomers']);
Route::post('/list_tree', [CustomerController::class, 'accountHierarchy']); Route::post('/list_tree', [CustomerController::class, 'accountHierarchy']);
})->middleware([ })->middleware([
app\middleware\Jwt::class,
app\middleware\OauthCheck::class, app\middleware\OauthCheck::class,
]); ]);
@ -86,8 +91,8 @@ Route::group('/googleads', function () {
Route::post('/refresh_token_test', [OAuthController::class, 'testRefreshToken']); Route::post('/refresh_token_test', [OAuthController::class, 'testRefreshToken']);
Route::post('/refresh_token_revoke', [OAuthController::class, 'revokeRefreshToken']); Route::post('/refresh_token_revoke', [OAuthController::class, 'revokeRefreshToken']);
})->middleware([ })->middleware([
app\middleware\Jwt::class, app\middleware\Jwt::class,
]); ]);
}); });