From abfa143a4e86972334dbd875a577703751021525 Mon Sep 17 00:00:00 2001 From: Sai Sunder Srinivasan Date: Mon, 16 Sep 2024 20:09:18 +0000 Subject: [PATCH] fix: remove token_info call from token refresh path --- google/oauth2/credentials.py | 30 ---------- system_tests/secrets.tar.enc | Bin 10324 -> 10324 bytes tests/oauth2/test_credentials.py | 98 +++---------------------------- 3 files changed, 9 insertions(+), 119 deletions(-) diff --git a/google/oauth2/credentials.py b/google/oauth2/credentials.py index a478669cf..6e158089f 100644 --- a/google/oauth2/credentials.py +++ b/google/oauth2/credentials.py @@ -32,7 +32,6 @@ """ from datetime import datetime -import http.client as http_client import io import json import logging @@ -351,33 +350,6 @@ def with_universe_domain(self, universe_domain): def _metric_header_for_usage(self): return metrics.CRED_TYPE_USER - def _set_account_from_access_token(self, request): - """Obtain the account from token info endpoint and set the account field. - - Args: - request (google.auth.transport.Request): A callable used to make - HTTP requests. - """ - # We only set the account if it's not yet set. - if self._account: - return - - if not self.token: - return - - # Make request to token info endpoint with the access token. - # If the token is invalid, it returns 400 error code. - # If the token is valid, it returns 200 status with a JSON. The account - # is the "email" field of the JSON. - token_info_url = "{}?access_token={}".format( - _GOOGLE_OAUTH2_TOKEN_INFO_ENDPOINT, self.token - ) - response = request(method="GET", url=token_info_url) - - if response.status == http_client.OK: - response_data = json.loads(response.data.decode("utf-8")) - self._account = response_data.get("email") - @_helpers.copy_docstring(credentials.Credentials) def refresh(self, request): if self._universe_domain != credentials.DEFAULT_UNIVERSE_DOMAIN: @@ -414,7 +386,6 @@ def refresh(self, request): ) self.token = token self.expiry = expiry - self._set_account_from_access_token(request) return if ( @@ -451,7 +422,6 @@ def refresh(self, request): self._refresh_token = refresh_token self._id_token = grant_response.get("id_token") self._rapt_token = rapt_token - self._set_account_from_access_token(request) if scopes and "scope" in grant_response: requested_scopes = frozenset(scopes) diff --git a/system_tests/secrets.tar.enc b/system_tests/secrets.tar.enc index c22d40f6adfb4c567bb21756a3be06c4191ec2e1..c04565f4779af434b52425182ab181150e5757f8 100644 GIT binary patch literal 10324 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 literal 10324 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