gpt4 book ai didi

laravel - 对所有 API 请求使用客户端凭证中间件

转载 作者:行者123 更新时间:2023-12-02 02:58:57 25 4
gpt4 key购买 nike

在我的 routes/api.php 文件中,我有一个这样的路由组:

Route::group([
'prefix' => config('api.route_prefix'),
'middleware' => ['api', 'auth:api'],
], function() {
// ...

这正确地只允许通过密码授予访问权限的 token 的用户访问这些路由。在尝试实现客户端凭据授予时,我发现一个 separate middleware is necessary .由于 auth:api 中间件引发异常,这会产生冲突,因为我希望请求具有任一授权类型的有效 token 来访问这些路由。

我发现仅使用客户端凭证中间件似乎可以验证两者,但我不确定这样做是否有任何不良影响。

绕过 auth:api 中间件并将其替换为 Laravel\Passport\Http\Middleware\CheckClientCredentials 有什么问题吗?

最佳答案

一个明显的大缺点是客户端凭据在 JWT token 中似乎没有任何用户信息。这会导致请求的用户解析器在调用 request()->user() 时返回 null。从 Laravel\Passport\Guards\TokenGuard::authenticateViaBearerToken,返回 null:

// If the access token is valid we will retrieve the user according to the user ID
// associated with the token. We will use the provider implementation which may
// be used to retrieve users from Eloquent. Next, we'll be ready to continue.
$user = $this->provider->retrieveById(
$psr->getAttribute('oauth_user_id')
);

跟踪 $psr->getAttribute 将我带到 League\OAuth2\Server\AuthorizationValidators\BearerTokenValidator::validateAuthorization:

 // Return the request with additional attributes
return $request
->withAttribute('oauth_access_token_id', $token->getClaim('jti'))
->withAttribute('oauth_client_id', $token->getClaim('aud'))
->withAttribute('oauth_user_id', $token->getClaim('sub'))
->withAttribute('oauth_scopes', $token->getClaim('scopes'));

所有属性 except oauth_user_id 都通过 token 上的声明正确设置,$token 在我的例子中是一个实例Lcobucci\JWT\Token。因此,即使使用具有指定 user_id 的 oauth 客户端,仅使用客户端凭据中间件也不是拥有一组路由的好解决方案。

关于laravel - 对所有 API 请求使用客户端凭证中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47684160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com