jwt令牌的刷新如何在django REST angular中工作

Posted

技术标签:

【中文标题】jwt令牌的刷新如何在django REST angular中工作【英文标题】:How does refreshing of jwt token work in django REST angular 【发布时间】:2015-08-29 18:18:15 【问题描述】:

我正在使用这个

http://getblimp.github.io/django-rest-framework-jwt/#refresh-token

我很困惑如何使它工作。我已经完成了所有设置。现在如何使它工作。

目前我有代码在用户提交登录时获取第一个令牌,并将该令牌保存在 cookie 存储中。然后我的请求将该令牌用于所有请求。我已经看到该令牌有时会过期,我不希望那样。所以这就是我使用这个的原因

$http
    .post('/api-token-auth/', logData)
    .then(function (response) 
        // assumes if ok, response is an object with some data, if not, a string with error
        // customize according to your api
        if (!response.data.token) 
            _vm.authMsg = 'Incorrect credentials.';
            deferred.reject('Incorrect credentials.');
         else 
            $cookieStore.put('djangotoken', response.data.token);
            $http.defaults.headers.common.Authorization = 'JWT ' + response.data.token;
            $http.get('/api/account/restricted/').then(function (response) 
                authService.loginConfirmed();
                $cookieStore.put('currentUser', response.data);
                $rootScope.$broadcast('user:login');
            );
        
        deferred.resolve(response.data);
        , function (x) 
            _vm.authMsg = 'Server Request Error';
            deferred.reject('Server Request Error');
        );

这就是我在每个请求中使用该令牌的方式

   $http.defaults.headers.common['Authorization'] = 'JWT ' + $cookieStore.get('djangotoken');

现在需要做什么才能使刷新令牌起作用。我的意思是用户是否必须手动刷新令牌或系统会自动刷新。我什么时候需要访问这个网址

url(r'^api-token-refresh/', 'rest_framework_jwt.views.refresh_jwt_token'),

【问题讨论】:

【参考方案1】:

您引用的文档非常明确。将现有令牌传递给刷新端点,如下 [snipped description]:

$ curl -X POST -H "Content-Type: application/json" -d '"token":"<EXISTING_TOKEN>"' http://localhost:8000/api-token-refresh/

您必须调用刷新 URL 才能使其工作。这意味着您的客户端需要监视何时需要刷新令牌并调用 URL,或者您可以在服务器中放置一些逻辑来为您希望用户花费很长时间的请求子集调用此 URL遍历它们(例如填写一个长的多页表单)。

如果您决定选择后者,您可能会发现 this 很有用。

【讨论】:

谢谢。这是我不清楚的。你认为我们什么时候需要刷新它。我想知道人们通常如何/何时刷新令牌。 @user3214546 这应该是在您点击“exp”字段中的时间之前。假设您使用默认设置,则为 300 秒。 @user3214546 这取决于你的程序设计。在某些时候,您将发出获取令牌的请求。收到响应后,您的客户端可以设置一个计时器在到期时间之前弹出并使用回调发出刷新。 谢谢。这就是我在我的问题中提出的问题。如何做到这一点的任何样本。我的意思是我给出的个人登录代码。我如何更新该代码以刷新令牌 @user3214546:我自己没有使用过它(因为我倾向于处理服务器端),但快速搜索显示,如果你设置它,angular-jwt 只会为你处理它正确。例如:github.com/auth0/auth0-angular/blob/master/docs/…

以上是关于jwt令牌的刷新如何在django REST angular中工作的主要内容,如果未能解决你的问题,请参考以下文章

如何使用访问和刷新令牌返回自定义数据以识别 Django Rest Framework 简单 JWT 中的用户?

Django REST JWT 刷新

单元测试 JWT 令牌过期:Django REST

在 Django REST 框架中使用 JWT 时,刷新令牌和访问令牌存储在哪里?

如何在 django rest 框架中验证 jwt 身份验证中的令牌

如何使用 Simple JWT(django rest)将 JWT 令牌列入黑名单?