@@ -97,10 +97,10 @@ def process_token(self, request) -> bool:
97
97
if user :
98
98
request .session [conf .SESSION_KEY ] = id_from_token
99
99
if request .user != user :
100
- logger .info ("Different user, logging out" )
100
+ logger .debug ("Different user, logging out" )
101
101
logout (request )
102
102
if not request .user .is_authenticated :
103
- logger .info ("Logging user in" , user = str (user ))
103
+ logger .debug ("Logging user in" , user = str (user ))
104
104
login (request , user )
105
105
else : # the same user with a new token
106
106
request .user = (
@@ -131,19 +131,37 @@ def get_audience(self, request) -> str:
131
131
def get_algorithms (self , request ) -> List [str ]:
132
132
return [conf .ALGORITHM ]
133
133
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
+
134
148
def get_jwt_from_request (self , request ) -> str :
135
149
token_header = conf .TOKEN_HEADER
136
150
header_value = request .META [token_header ]
151
+ bearer_token = self .get_bearer_token (request )
137
152
if token_header == "HTTP_AUTHORIZATION" :
138
153
logger .debug ("Bearer token" )
139
- auth_type , jwt = header_value .split (" " )
140
- if auth_type != "Bearer" :
154
+ if bearer_token is None :
141
155
raise ValueError ("No Bearer token" )
156
+ jwt = bearer_token
157
+ id_token = None
142
158
else :
143
159
logger .debug ("Header token" )
144
160
jwt = header_value
161
+ id_token = bearer_token # might be None
145
162
logger .debug ("Raw token retrieved" , raw_token = jwt )
146
163
request .jwt = jwt
164
+ request .id_token = id_token
147
165
return jwt
148
166
149
167
def get_data_from_jwt (self , request , jwt ) -> dict :
0 commit comments