firebase_admin auth 的 verify_id_token 方法引发令牌使用过早错误

M. *_*hak 11 python google-authentication firebase

每当我跑步时

from firebase_admin import auth
auth.verify_id_token(firebase_auth_token)
Run Code Online (Sandbox Code Playgroud)

它抛出以下错误:

Token used too early, 1650302066 < 1650302067. Check that your computer's clock is set correctly.
Run Code Online (Sandbox Code Playgroud)

我知道底层的 google auth API 确实会检查令牌的时间,但是如此处所述, 应该存在 10 秒的时钟偏差。显然,我的服务器时间晚了 1 秒,但是运行仍然失败,即使这远低于允许的 10 秒偏差。有没有办法来解决这个问题?

Fra*_*ank 12

这是 firebase_admin.verify_id_token 验证令牌的方式:

verified_claims = google.oauth2.id_token.verify_token(
                    token,
                    request=request,
                    audience=self.project_id,
                    certs_url=self.cert_url)
Run Code Online (Sandbox Code Playgroud)

这是 google.oauth2.id_token.verify_token(...) 的定义

def verify_token(
    id_token,
    request,
    audience=None,
    certs_url=_GOOGLE_OAUTH2_CERTS_URL,
    clock_skew_in_seconds=0,
):
Run Code Online (Sandbox Code Playgroud)

如您所见,函数 verify_token 允许指定“clock_skew_in_seconds”,但 firebase_admin 函数不会传递它,因此使用默认值 0,并且由于您的服务器时钟关闭了 1 秒,verify_token 中的检查失败。

我认为这是 firebase_admin.verify_id_token 中的一个错误,也许您可​​以针对 firebase admin SDK 提出问题,但除此之外,您只能确保您的时钟准确或显示的时间早于实际时间

编辑:

实际上,我在 GitHub 上为 firebase/firebase-admin-Python 打开了一个问题,并创建了一个相应的拉取请求,因为我已经查看了所有源文件......

如果合并拉取请求,则服务器的时钟最多允许偏差一分钟。