From ea58c0273e6c031636669a9814703891316a65eb Mon Sep 17 00:00:00 2001 From: Carl Lundin Date: Wed, 20 Jul 2022 00:31:17 +0000 Subject: [PATCH] fix: async certificate decoding The async `_cert_fetch` implementation was not properly decoding certificates into a utf-8 string. This updates the code and tests to decode the certificates into strings. This resolves https://github.com/googleapis/google-auth-library-python/issues/1050. --- google/oauth2/_id_token_async.py | 2 +- system_tests/secrets.tar.enc | Bin 10324 -> 10324 bytes tests_async/oauth2/test_id_token.py | 5 ++++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/google/oauth2/_id_token_async.py b/google/oauth2/_id_token_async.py index 20630e0d4..b90994cdc 100644 --- a/google/oauth2/_id_token_async.py +++ b/google/oauth2/_id_token_async.py @@ -95,7 +95,7 @@ async def _fetch_certs(request, certs_url): data = await response.data.read() - return json.loads(json.dumps(data)) + return json.loads(data.decode("utf-8")) async def verify_token( diff --git a/system_tests/secrets.tar.enc b/system_tests/secrets.tar.enc index 9baa3acd2cf4cf3d0bf30350bb91a10db05c2376..31e079b4ed972d337f2b69ceefc3bc28cfbaf695 100644 GIT binary patch literal 10324 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 m4;->JcLrlr