Laravel /oauth/token Passport 端点的速率限制
Laravel rate limit throttle for /oauth/token Passport endpoint
我正在尝试为 Laravel 5.8 中的 Passport 内置 oauth/token
端点禁用速率限制,我认为只需从 api 中删除节流中间件即可:
'api' => [
// 'throttle:60,1',
'bindings',
],
但是,尽管这有效地禁用了我在 api 路由文件中定义的每个端点的速率限制,但它不会对 /oauth/token
执行此操作,就好像 Passport 具有默认节流设置一样.所以我刚刚在 AppServiceProvider
中为该路由添加了一个荒谬的数字的油门中间件:
\Route::group(['middleware' => ['custom_provider', 'throttle:999999999,1']], function () {
Passport::routes();
});
但是当我测试这个时,出于某种原因我在几次请求后仍然收到 429 错误:
429 Too Many Requests
X-RateLimit-Limit →9999999999
X-RateLimit-Remaining →9999999935
x-ratelimit-reset →1567108098
所以我宁愿完全禁用它。有什么想法可以专门针对 Passport 路由禁用它吗?
那是因为 passport 不使用 api
中间件,而是 throttle
一个直接在该路由上的中间件。
您可以在 source code:
中看到
// This is how passport register that route
$this->router->post('/token', [
'uses' => 'AccessTokenController@issueToken',
'as' => 'passport.token',
'middleware' => 'throttle',
]);
您可以在 passport 注册他的路线之前自行定义该路线。要做到这一点,我认为最方便的方法是连接到 Passport::routes()
方法:
Passport::routes(function ($router) {
$router->forAuthorization();
Route::post('/token', [
'uses' => 'AccessTokenController@issueToken',
'as' => 'passport.token',
]);
// This function would trigger the internal /token route registration
$router->forAccessTokens();
$router->forTransientTokens();
$router->forClients();
$router->forPersonalAccessTokens();
});
请注意,如果您需要所有护照路线,您也可以这样做:
Passport::routes(function ($router) {
Route::post('/token', [
'uses' => 'AccessTokenController@issueToken',
'as' => 'passport.token',
]);
$router->all();
});
您可以通过在项目根目录 windows 的控制台中执行 php artisan route:list
来检查路由是否已正确注册
我正在尝试为 Laravel 5.8 中的 Passport 内置 oauth/token
端点禁用速率限制,我认为只需从 api 中删除节流中间件即可:
'api' => [
// 'throttle:60,1',
'bindings',
],
但是,尽管这有效地禁用了我在 api 路由文件中定义的每个端点的速率限制,但它不会对 /oauth/token
执行此操作,就好像 Passport 具有默认节流设置一样.所以我刚刚在 AppServiceProvider
中为该路由添加了一个荒谬的数字的油门中间件:
\Route::group(['middleware' => ['custom_provider', 'throttle:999999999,1']], function () {
Passport::routes();
});
但是当我测试这个时,出于某种原因我在几次请求后仍然收到 429 错误:
429 Too Many Requests
X-RateLimit-Limit →9999999999
X-RateLimit-Remaining →9999999935
x-ratelimit-reset →1567108098
所以我宁愿完全禁用它。有什么想法可以专门针对 Passport 路由禁用它吗?
那是因为 passport 不使用 api
中间件,而是 throttle
一个直接在该路由上的中间件。
您可以在 source code:
// This is how passport register that route
$this->router->post('/token', [
'uses' => 'AccessTokenController@issueToken',
'as' => 'passport.token',
'middleware' => 'throttle',
]);
您可以在 passport 注册他的路线之前自行定义该路线。要做到这一点,我认为最方便的方法是连接到 Passport::routes()
方法:
Passport::routes(function ($router) {
$router->forAuthorization();
Route::post('/token', [
'uses' => 'AccessTokenController@issueToken',
'as' => 'passport.token',
]);
// This function would trigger the internal /token route registration
$router->forAccessTokens();
$router->forTransientTokens();
$router->forClients();
$router->forPersonalAccessTokens();
});
请注意,如果您需要所有护照路线,您也可以这样做:
Passport::routes(function ($router) {
Route::post('/token', [
'uses' => 'AccessTokenController@issueToken',
'as' => 'passport.token',
]);
$router->all();
});
您可以通过在项目根目录 windows 的控制台中执行 php artisan route:list
来检查路由是否已正确注册