为什么使用 Firebase 的 createSessionCookie 而不是 ID 令牌?

问题描述 投票:0回答:1

当创建的 JWT 与已颁发的 ID 令牌几乎相同时,我无法理解为会话 cookie 创建新 JWT 的基本原理。

参考 管理会话 Cookie 文档,建议使用

createSessionCookie
创建会话 Cookie,如下所示:

  getAuth()
    .createSessionCookie(idToken, { expiresIn })
    .then(
      (sessionCookie) => {
        // Set cookie policy for session cookie.
        const options = { maxAge: expiresIn, httpOnly: true, secure: true };
        res.cookie('session', sessionCookie, options);
        res.end(JSON.stringify({ status: 'success' }));
      },
      (error) => {
        res.status(401).send('UNAUTHORIZED REQUEST!');
      }
    );

为什么我不能直接写:

// Set cookie policy for session cookie.
const options = { maxAge: expiresIn, httpOnly: true, secure: true };
res.cookie('session', idToken, options);
res.end(JSON.stringify({ status: 'success' }));

深入挖掘后,我认为 Firebase 创建的会话 cookie 可能具有其他属性,或者可能以某种方式混淆了

idToken
中的声明,以便更安全。但我发现
idToken
和会话 cookie 的声明几乎相同。唯一的区别是
kid
iss
不同......而且我不明白用另一个密钥放弃令牌有什么好处。

firebase cookies firebase-authentication jwt
1个回答
0
投票

来自使用 Firebase Admin SDK 创建自定义令牌的文档:

这些代币一小时后就会过期。

当您使用第三方 JWT 库创建自定义令牌时,稍后会在声明表页面中重申这一点:

exp

 — 到期时间
令牌过期的时间(自 UNIX 纪元以来的秒数)。最多可以比
iat
晚 3600 秒。

因此 Firebase ID 令牌的有效期最多为一小时,绝不会更长。

将其与

使用会话 cookie 进行身份验证的文档进行比较,其中显示:

创建自定义过期时间从 5 分钟到 2 周不等的会话 Cookie。

因此会话cookie的有效时间比ID令牌长得多,这使得它们更适合需要/有用更长有效期的场景。

如果您不(知道是否)有这样的情况,我建议坚持使用 ID 令牌 - 因为这些是 Firebase 最常见的身份验证机制。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.