-
Notifications
You must be signed in to change notification settings - Fork 24
fix: fix token clock skew issue #333
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
@@ -71,7 +71,9 @@ def _update_cache(new_token: str) -> None: | |||
# verify_oauth2_token not only decodes but also validates the token's | |||
# signature and claims against Google's public keys. | |||
# It's a synchronous, CPU-bound operation, safe for async contexts. | |||
claims = id_token.verify_oauth2_token(new_token, Request()) | |||
claims = id_token.verify_oauth2_token( | |||
new_token, Request(), clock_skew_in_seconds=60 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
60s is a long time. Would we be better off with a smaller range of like 1s or 5s?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't find any standard implementations of this. I did, however, see that firebase only allows clock_skew < 60
(ref).
I have changed it to 10 for now. Let me know if you think that's too much and we should make it smaller.
Token used too early errors are a known issue.
For example: firebase/firebase-admin-python#624, googleapis/google-auth-library-python#889
This happens when the system clock is not completely syncronised with the server. The function
verify_id_token
may fail for tokens that were issued by servers which have clocks running a little early.If verification is done right after the token was issued by such a server, then the call to function
google.oauth2.id_token.verify_token
may be early enough for the 'issued-at-time' timestamp of the token still being in the future.Adding the optional parameter
clock_skew_in_seconds=60
to the call togoogle.oauth2.id_token.verify_token
would allow for the servers clock to be off by up to a minute and still allow verification of the issued token immediately after it being issued.Fixes #332