Skip to content

Commit 7377764

Browse files
JonMerlevedehashhar
authored andcommitted
Fix parsing of www-authenticate header
For multi-valued www-authenticate headers the previous code could throw: trino.exceptions.TrinoAuthError: Error: header info didn't have x_token_server
1 parent f8c7a32 commit 7377764

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

tests/unit/oauth_test_utils.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,25 @@ def __call__(self, request, uri, response_headers):
5454
if authorization and authorization.replace("Bearer ", "") in self.tokens:
5555
return [200, response_headers, json.dumps(self.sample_post_response_data)]
5656
elif self.redirect_server is None and self.token_server is not None:
57-
return [401, {'Www-Authenticate': f'Bearer x_token_server="{self.token_server}"',
58-
'Basic realm': '"Trino"'}, ""]
59-
return [401, {'Www-Authenticate': f'Bearer x_redirect_server="{self.redirect_server}", '
60-
f'x_token_server="{self.token_server}"',
61-
'Basic realm': '"Trino"'}, ""]
57+
return [401,
58+
{
59+
'Www-Authenticate': (
60+
'Bearer realm="Trino", token_type="JWT", '
61+
f'Bearer x_token_server="{self.token_server}"'
62+
),
63+
'Basic realm': '"Trino"'
64+
},
65+
""]
66+
return [401,
67+
{
68+
'Www-Authenticate': (
69+
'Bearer realm="Trino", token_type="JWT", '
70+
f'Bearer x_redirect_server="{self.redirect_server}", '
71+
f'x_token_server="{self.token_server}"'
72+
),
73+
'Basic realm': '"Trino"'
74+
},
75+
""]
6276

6377

6478
class GetTokenCallback:

trino/auth.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ def _attempt_oauth(self, response: Response, **kwargs: Any) -> None:
459459
auth_info_headers = self._parse_authenticate_header(auth_info)
460460

461461
auth_server = auth_info_headers.get('bearer x_redirect_server', auth_info_headers.get('x_redirect_server'))
462-
token_server = auth_info_headers.get('x_token_server')
462+
token_server = auth_info_headers.get('bearer x_token_server', auth_info_headers.get('x_token_server'))
463463
if token_server is None:
464464
raise exceptions.TrinoAuthError("Error: header info didn't have x_token_server")
465465

0 commit comments

Comments
 (0)