リフレッシュトークンは、一時的なアクセストークンを新たに生成または更新するために使用される特殊な種類のトークンです。これは、ユーザーがサービスに再ログインすることなくセッションを維持できるようにするためのものです。
以下はJavaScriptを使用して利用する場合のコード例です。
const jwt = require('jsonwebtoken');
function generateAccessToken(user) {
return jwt.sign(user, process.env.ACCESS_TOKEN_SECRET, { expiresIn: '30m' });
}
function generateRefreshToken(user) {
return jwt.sign(user, process.env.REFRESH_TOKEN_SECRET);
}
リフレッシュトークンの動作
リフレッシュトークンの主な目的は、アクセストークンの有効期限が切れた後でもユーザーのセッションを維持することです。次に、リフレッシュトークンの典型的な使用例を見てみましょう。
app.post('/token', (req, res) => {
const refreshToken = req.body.token;
if (refreshToken == null) return res.sendStatus(401);
if (!refreshTokens.includes(refreshToken)) return res.sendStatus(403);
jwt.verify(refreshToken, process.env.REFRESH_TOKEN_SECRET, (err, user) => {
if (err) return res.sendStatus(403);
const accessToken = generateAccessToken({ name: user.name });
res.json({ accessToken: accessToken });
});
});
リフレッシュトークンの安全性
リフレッシュトークンは、高度に安全なものであると考えられています。その理由の一つは、それが一時的なアクセストークンと異なり、通常は特定のユーザーに対して一度しか使用されないためです。
app.delete('/logout', (req, res) => {
refreshTokens = refreshTokens.filter(token => token !== req.body.token);
res.sendStatus(204);
});
まとめ
リフレッシュトークンは、ユーザーがアクセストークンの有効期限が切れてもサービスにアクセスし続けられるようにするための重要なツールです。これは、ユーザーが頻繁に再ログインする必要を排除し、結果的にはユーザーエクスペリエンスを向上させます。さらに、リフレッシュトークンは高度な安全性を提供し、サービスのセキュリティを強化します。