fix: aws path normalization in windows (#842)
Path normalization for the canonical_uri was broken in windows.
This is because we were using `os.path.normpath`.
This normalizes "/" paths to "\\" in Windows OS.
Confirmed the fix is working in Windows.
diff --git a/google/auth/aws.py b/google/auth/aws.py
index 2f2a135..c8deee7 100644
--- a/google/auth/aws.py
+++ b/google/auth/aws.py
@@ -45,6 +45,7 @@
import os
import re
import urllib
+from urllib.parse import urljoin
from google.auth import _helpers
from google.auth import environment_vars
@@ -112,13 +113,17 @@
additional_headers = additional_headers or {}
uri = urllib.parse.urlparse(url)
+ # Normalize the URL path. This is needed for the canonical_uri.
+ # os.path.normpath can't be used since it normalizes "/" paths
+ # to "\\" in Windows OS.
+ normalized_uri = urllib.parse.urlparse(urljoin(url, uri.path))
# Validate provided URL.
if not uri.hostname or uri.scheme != "https":
raise ValueError("Invalid AWS service URL")
header_map = _generate_authentication_header_map(
host=uri.hostname,
- canonical_uri=os.path.normpath(uri.path or "/"),
+ canonical_uri=normalized_uri.path or "/",
canonical_querystring=_get_canonical_querystring(uri.query),
method=method,
region=self._region_name,