Symfony - 如何在用户检查器中访问当前 JWT 令牌的范围?

问题描述 投票:0回答:1

我的应用程序中有一个自定义用户检查器(https://symfony.com/doc/current/security/user_checkers.html),用于检查登录用户是否处于活动状态。

用户可以在我的应用程序中创建文档。 但是,有一个单独的服务用于创建文档的屏幕截图并从中生成 PDF。

这个单独的服务总是登录到 API“模拟”文档的作者。

问题:

  1. 用户创建了一个文档
  2. 用户帐号已被停用
  3. 单独的服务尝试使用具有自定义范围的特殊 JWT 令牌以用户身份访问文档
  4. 用户检查器拒绝登录,因为用户目前不活跃

我想要什么: 我希望我的用户检查器(checkPostAuth)检查[帐户是否处于非活动状态?]仅当 JWT 令牌的自定义范围不等于“mySpecialScope”时

如何实现?

symfony security jwt
1个回答
0
投票

如果您使用的是 Lexik,您可以尝试将其添加到您的用户检查器类中:

use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;

//...

public function __construct(TokenStorageInterface $tokenStorageInterface, JWTTokenManagerInterface $jwtManager)
{
    $this->jwtManager = $jwtManager;
    $this->tokenStorageInterface = $tokenStorageInterface;
}

然后,使用这个在

checkPostAuth
中获取JWT数据:

$decodedJwtToken = $this->jwtManager->decode($this->tokenStorageInterface->getToken());

参考:https://github.com/lexik/LexikJWTAuthenticationBundle/blob/2.x/Resources/doc/9-access-authenticated-jwt-token.rst

© www.soinside.com 2019 - 2024. All rights reserved.