使用JWT(JSON Web令牌)设置令牌到期的RESTful API



我使用JWT来实现RESTful API(用于移动设备的Laravel Web服务)。如何将代币到期设置为永不到期,或者设置代币到期的最佳实践是什么?因为目前我需要在每次代币到期时获得代币,任何人都可以有这个问题或代币到期的最佳解决方案吗。

没有什么可以让令牌永远不会过期。然而,您可以将有效期延长到一个非常长的时间跨度,例如1年。这是可能的,但出于安全考虑,不建议这样做。

为了实现这一点,您需要配置两个部分,即令牌刷新时间和令牌到期时间。

所以在config/jwt.php

'refresh_ttl' => 29030400,  // Number of minutes in 1 year (12*4*7*24*60*60)

当你创建代币时,你可以通过下面的

$tokenId    = base64_encode(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
$issuedAt   = Carbon::now()->timestamp;
$notBefore  = $issuedAt;             //Adding 10 seconds
$expire     = $notBefore + 12*4*7*24*60*60;            // Adding 6 hours
    /*
    * Create the token as an array
    */
    $data = [
      'iat'  => $issuedAt,      // Issued at: time when the token was generated
      'jti'  => $tokenId,   // Json Token Id: an unique identifier for the token
      'iss'  => 'https://example.com',       // Issuer
      'nbf'  => $notBefore,        // Not before
      'exp'  => $expire,           // Expire
      'data' => [                  // Data related to the signed user
      'userId'   => Auth::user()->id, // userid from the users table
      ]
    ];

现在,您的代币在1年内永远不会过期。您有长达1年的时间来刷新它。当用户下次打开应用程序,并且您对令牌进行身份验证时,您可以刷新它。您可以刷新令牌,如此处文档中所述。我建议大家也来讨论一下猪瘟。

此外,我在StackOverflow上发现了这个问题,我认为它会有所帮助。

最新更新