From 3eaea396be996fc960c55250c0eb075fe1d9a792 Mon Sep 17 00:00:00 2001 From: Joe Garcia Date: Mon, 28 Aug 2023 13:06:09 -0400 Subject: [PATCH] Add base64 check on JWT from authn --- awx/main/credential_plugins/conjur.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/awx/main/credential_plugins/conjur.py b/awx/main/credential_plugins/conjur.py index 83232cccac..e6984bed46 100644 --- a/awx/main/credential_plugins/conjur.py +++ b/awx/main/credential_plugins/conjur.py @@ -4,6 +4,8 @@ from urllib.parse import urljoin, quote from django.utils.translation import gettext_lazy as _ import requests +import base64 +import binascii conjur_inputs = { @@ -50,6 +52,13 @@ conjur_inputs = { } +def _is_base64(s: str) -> bool: + try: + return base64.b64encode(base64.b64decode(s.encode("utf-8"))) == s.encode("utf-8") + except binascii.Error: + return False + + def conjur_backend(**kwargs): url = kwargs['url'] api_key = kwargs['api_key'] @@ -77,7 +86,7 @@ def conjur_backend(**kwargs): token = resp.content.decode('utf-8') lookup_kwargs = { - 'headers': {'Authorization': 'Token token="{}"'.format(token)}, + 'headers': {'Authorization': 'Token token="{}"'.format(token if _is_base64(token) else base64.b64encode(token.encode('utf-8')).decode('utf-8'))}, 'allow_redirects': False, }