JWT 令牌失效的未知原因

Posted

技术标签:

【中文标题】JWT 令牌失效的未知原因【英文标题】:Unknown Reason for JWT Tokens invalidation 【发布时间】:2016-04-22 11:44:48 【问题描述】:

我的 laravel-Angular 应用程序遇到了非常奇怪的问题。我正在使用 Tymon JWT 在我的每个请求上刷新令牌。我正在使用 Satellizer 库来处理这些 JWT 令牌,但是,Satellizer 似乎没有响应拦截器来捕获新令牌。因此,我编写了自己的拦截器来这样做。

.factory('ResponseHttpInterceptor', function ($window) 
    return 
        response: function (response) 
            if (response.headers('Authorization') != null) 
                $window.localStorage.removeItem('satellizer_token');
                $window.localStorage.setItem('satellizer_token', response.headers('Authorization').replace('Bearer ', ''));
            
            return response;
        
    
)

此代码基本上捕获新令牌并用新令牌替换本地存储中的现有令牌。

我的测试流程是:

Login -> Make who Am I call -> Logout

注销时我收到错误Invalid token这并不总是发生。有时流程成功,有时失败)。此流程通过 REST 客户端邮递员完美运行。所以我认为我的 API 没有任何问题

在我的whoami 调用后刷新后,附加图像显示正在传递的新令牌。

注销后,我正在清除本地存储。谁能告诉我这可能是什么原因?

编辑

Route::group(['prefix' => 'api/v1_0'], function () 
   Route::post('login', 'Auth\AuthControllerGeneral@postLogin');
   Route::get('logout', ['middleware' => 'jwt.auth', 'uses' =>    'Auth\AuthControllerGeneral@getLogout']);

   Route::group(['middleware' => ['jwt.refresh', 'jwt.auth']], function() 
       Route::get('whoami', 'Auth\AuthControllerGeneral@loggedInUserInfo');
   );
);

【问题讨论】:

分享你的 htcacess 和 auth 控制器 不在生产服务器上。使用php artisan serve 运行服务器。 为什么需要AuthController?我的意思是,这是一个通用的控制器。我会分享我的路线。请查看编辑。 【参考方案1】:

检查你的 htaccess 你应该有下面的代码

RewriteEngine On
RewriteCond %HTTP:Authorization ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

而 AuthContrller 与 https://github.com/sahat/satellizer/blob/master/examples/server/php/app/Http/Controllers/AuthController.php 相同

而且有些人忘记检查身份验证中间件。也检查一下

https://github.com/sahat/satellizer/blob/master/examples/server/php/app/Http/Middleware/Authenticate.php

我建议首先尝试使用默认路由,如演示 https://github.com/sahat/satellizer/blob/master/examples/server/php/app/Http/routes.php

您仍然没有得到解决方案,然后尝试使用示例客户端文件夹。 https://github.com/sahat/satellizer/tree/master/examples/client

你可以把它放在你的 laravel 公用文件夹中只是为了测试。

我发现在 satellizer 中一切正常,但有些人无法配置它。

【讨论】:

我已经在文档中阅读了这些内容。当前使用内部工匠服务器。因此,这些配置还没有出现。

以上是关于JWT 令牌失效的未知原因的主要内容,如果未能解决你的问题,请参考以下文章

重启服务器后JWT失效

Spring Cloud Security 实战,退出登录时如何借助外力使JWT令牌失效?

JWT如何解析过期的token中的信息

JWT如何解析过期的token中的信息

基于未知情况的WSS失效异常数据预测判断方法

spring cloud实战与思考 JWT之Token主动失效