Skip to content

Commit 388f974

Browse files
authored
Merge pull request #43 from Blueshoe/feat/add-id-token
Give app access to id-token if possible
2 parents 3478bd4 + de96c7a commit 388f974

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

pycloak/middleware.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ def process_token(self, request) -> bool:
9797
if user:
9898
request.session[conf.SESSION_KEY] = id_from_token
9999
if request.user != user:
100-
logger.info("Different user, logging out")
100+
logger.debug("Different user, logging out")
101101
logout(request)
102102
if not request.user.is_authenticated:
103-
logger.info("Logging user in", user=str(user))
103+
logger.debug("Logging user in", user=str(user))
104104
login(request, user)
105105
else: # the same user with a new token
106106
request.user = (
@@ -131,19 +131,37 @@ def get_audience(self, request) -> str:
131131
def get_algorithms(self, request) -> List[str]:
132132
return [conf.ALGORITHM]
133133

134+
def get_bearer_token(self, request) -> str:
135+
"""
136+
Get the token from the Authorization header
137+
depending on the configuration of the oauth2 proxy, this might be the jwt access_token or the id_token
138+
"""
139+
try:
140+
header_value = request.META["HTTP_AUTHORIZATION"]
141+
auth_type, token = header_value.split(" ")
142+
if auth_type != "Bearer":
143+
return None
144+
except (KeyError, ValueError, TypeError):
145+
return None
146+
return token
147+
134148
def get_jwt_from_request(self, request) -> str:
135149
token_header = conf.TOKEN_HEADER
136150
header_value = request.META[token_header]
151+
bearer_token = self.get_bearer_token(request)
137152
if token_header == "HTTP_AUTHORIZATION":
138153
logger.debug("Bearer token")
139-
auth_type, jwt = header_value.split(" ")
140-
if auth_type != "Bearer":
154+
if bearer_token is None:
141155
raise ValueError("No Bearer token")
156+
jwt = bearer_token
157+
id_token = None
142158
else:
143159
logger.debug("Header token")
144160
jwt = header_value
161+
id_token = bearer_token # might be None
145162
logger.debug("Raw token retrieved", raw_token=jwt)
146163
request.jwt = jwt
164+
request.id_token = id_token
147165
return jwt
148166

149167
def get_data_from_jwt(self, request, jwt) -> dict:

0 commit comments

Comments
 (0)