如何在 Symfony 中以编程方式验证 jwt 令牌?
How to validate a jwt token programmatically in Symfony?
使用LexikJWTAuthenticationBundle,可以在控制器中验证传递的令牌?
p.s。我知道如果用户已通过身份验证,我可以 $this->getUser()
returns 用户,否则 null
。但这不是我所追求的。
我想知道是否有某种 isTokenValid('the-token-string');
给出 true/false 响应的东西?
将 JWTEncoderInterface 注入您的控制器,
public function __construct(JWTEncoderInterface $jwtEncoder)
{
$this->jwtEncoder = $jwtEncoder;
}
然后在您的方法中,您可以像这样解码令牌
try {
$this->jwtEncoder->decode($token);
} catch (JWTDecodeFailureException $ex) {
// if no exception thrown then the token could be used
}
如果没有抛出异常,则可以使用令牌。请注意,如果
则抛出异常
- 令牌无效
- 令牌已过期
- 令牌未验证
但是如果你想具体知道发生了哪一个,你应该注入
控制器的 JWSProviderInterface
public function __construct(JWSProviderInterface $jwsProvider)
{
$this->jwsProvider = $jwsProvider;
}
并在您的方法中像这样调用它的加载操作
try{
$jws = $this->jwsProvider->load($token);
}catch(\Exception $e){
}
if (!$jws->isInvalid()) {
//if token is valid
}
if (!$jws->isExpired()) {
//if token is not expired
}
if ($jws->isVerified()) {
//if token is verified
}
使用LexikJWTAuthenticationBundle,可以在控制器中验证传递的令牌?
p.s。我知道如果用户已通过身份验证,我可以 $this->getUser()
returns 用户,否则 null
。但这不是我所追求的。
我想知道是否有某种 isTokenValid('the-token-string');
给出 true/false 响应的东西?
将 JWTEncoderInterface 注入您的控制器,
public function __construct(JWTEncoderInterface $jwtEncoder)
{
$this->jwtEncoder = $jwtEncoder;
}
然后在您的方法中,您可以像这样解码令牌
try {
$this->jwtEncoder->decode($token);
} catch (JWTDecodeFailureException $ex) {
// if no exception thrown then the token could be used
}
如果没有抛出异常,则可以使用令牌。请注意,如果
则抛出异常- 令牌无效
- 令牌已过期
- 令牌未验证
但是如果你想具体知道发生了哪一个,你应该注入
控制器的 JWSProviderInterface
public function __construct(JWSProviderInterface $jwsProvider)
{
$this->jwsProvider = $jwsProvider;
}
并在您的方法中像这样调用它的加载操作
try{
$jws = $this->jwsProvider->load($token);
}catch(\Exception $e){
}
if (!$jws->isInvalid()) {
//if token is valid
}
if (!$jws->isExpired()) {
//if token is not expired
}
if ($jws->isVerified()) {
//if token is verified
}