@@ -1267,6 +1267,18 @@ def get(self):
12671267 # check if the grant type is supported by this tenant
12681268 config = tenant_configs_cache .get_config (tenant_id )
12691269 allowable_grant_types = json .loads (config .allowable_grant_types )
1270+
1271+ ## in case of oidc we save nonce to session for use later
1272+ nonce = (
1273+ request .args .get ("nonce" )
1274+ or request .form .get ("nonce" )
1275+ or request .cookies .get ("nonce" )
1276+ or session .get ("nonce" )
1277+ )
1278+ session ["nonce" ] = nonce # Always write nonce to session, even if None or empty
1279+ if session ["nonce" ]:
1280+ logger .debug (f"inside of get auth - nonce derived: { nonce } , args: { request .args } , form: { request .form } , cookies: { request .cookies } " )
1281+
12701282 mfa_config = json .loads (config .mfa_config )
12711283 user_code = request .args .get ("user_code" , None )
12721284
@@ -1382,6 +1394,7 @@ def get(self):
13821394 "client_state" : client_state ,
13831395 "device_login" : session .get ("device_login" , None ),
13841396 "user_code" : user_code ,
1397+ "nonce" : nonce ,
13851398 }
13861399
13871400 auto_approve = Users .query .filter_by (username = username , client_id = client_id ).first ()
@@ -1392,15 +1405,16 @@ def get(self):
13921405 logger .debug (f'Checking for auto approve ... ' )
13931406 if auto_approve and not is_device_flow :
13941407 logger .debug (f'Found. Skipping authoriziation page.' )
1395- generate_authorization_code (tenant_id , username , client_id , client )
1408+ generate_authorization_code (tenant_id , username , client_id , client , nonce )
13961409 auto_redirect = handle_response_type (
13971410 response_type ,
13981411 allowable_grant_types ,
13991412 tenant_id ,
14001413 username ,
14011414 client_id ,
14021415 client ,
1403- client_state
1416+ client_state ,
1417+ nonce = nonce
14041418 )
14051419 return auto_redirect
14061420 logger .debug (f'Not found. Proceeding to authentication page' )
@@ -1481,6 +1495,17 @@ def post(self):
14811495 if mfa_response :
14821496 return mfa_response
14831497
1498+ ## in case of oidc we save nonce to session for use later
1499+ nonce = (
1500+ request .args .get ("nonce" )
1501+ or request .form .get ("nonce" )
1502+ or request .cookies .get ("nonce" )
1503+ or session .get ("nonce" )
1504+ )
1505+ session ["nonce" ] = nonce # Always write nonce to session, even if None or empty
1506+ if session ["nonce" ]:
1507+ logger .debug (f"inside of get auth - nonce derived: { nonce } , args: { request .args } , form: { request .form } , cookies: { request .cookies } " )
1508+
14841509 # TODO - Move this to the handle_response_type function
14851510 if client_response_type == "device_code" :
14861511 if "device_code" not in allowable_grant_types :
@@ -1580,7 +1605,8 @@ def post(self):
15801605 username ,
15811606 client_id ,
15821607 client ,
1583- state
1608+ state ,
1609+ nonce = nonce
15841610 )
15851611
15861612
@@ -1823,13 +1849,15 @@ def _handle_tokens_request(request, oidc=False):
18231849 )
18241850 username = db_code .username
18251851 idp_id = db_code .tapis_idp_id
1852+ passthrough_nonce = getattr (db_code , "passthrough_nonce" , None )
18261853 elif grant_type == "device_code" :
18271854 username = db_code .username
18281855 ttl = db_code .access_token_ttl
18291856 idp_id = db_code .tapis_idp_id
1857+ passthrough_nonce = getattr (db_code , "passthrough_nonce" , None )
18301858
18311859 logger .debug (
1832- f"USERNAME: { username } ; TTL: { ttl } ; idp_id: { db_code .tapis_idp_id } "
1860+ f"device_code; USERNAME: { username } ; TTL: { ttl } ; idp_id: { db_code .tapis_idp_id } ; passthrough_nonce: { passthrough_nonce } "
18331861 )
18341862
18351863 elif grant_type == "refresh_token" :
@@ -1900,12 +1928,18 @@ def _handle_tokens_request(request, oidc=False):
19001928 if idp_id :
19011929 content ["claims" ]["tapis/idp_id" ] = idp_id
19021930 if oidc :
1931+ logger .debug ('Top of OIDC in handle_token_request - passthrough_nonce' , passthrough_nonce )
19031932 if client_id :
19041933 # bookstack for example requires aud to match client id
19051934 content ["claims" ]["aud" ] = client_id
19061935 content ["claims" ]["iat" ] = int (time .time ())
19071936 content ["claims" ]["extravar" ] = username
19081937 content ["claims" ]["email" ] = username
1938+ # Set passthrough_nonce from authorization code if available
1939+ if grant_type == "authorization_code" and passthrough_nonce :
1940+ content ["claims" ]["nonce" ] = passthrough_nonce
1941+ else :
1942+ content ["claims" ]["nonce" ] = ""
19091943
19101944 # only generate a refresh token when OAuth client is passed
19111945 if client_id and client_key :
@@ -2036,7 +2070,14 @@ def _handle_tokens_request(request, oidc=False):
20362070 raise errors .ResourceError (f"{ msg } " )
20372071
20382072 if oidc :
2039- logger .info ("Token endpoint with OIDC flag set." )
2073+ logger .info ("inside of POST /v3/oauth2/tokens with OIDC flag set" )
2074+ logger .debug (f"request headers: { request .headers } " )
2075+ logger .debug (f"request form: { request .form } " )
2076+ logger .debug (f"request json: { request .json } " )
2077+ logger .debug (f"request data: { request .data } " )
2078+ logger .debug (f"request args: { request .args } " )
2079+ logger .debug (f"request content type: { request .content_type } " )
2080+ logger .debug (f"request base url: { request .base_url } " )
20402081 response_json = {
20412082 "access_token" : result ["access_token" ]["access_token" ],
20422083 "expires_in" : result ["access_token" ]["expires_in" ],
@@ -2057,6 +2098,15 @@ def post(self):
20572098
20582099class OIDCTokensResource (Resource ):
20592100 def post (self ):
2101+ ## print all of flask request to logs
2102+ logger .info ("top of POST /v3/oauth2/tokens with OIDC flag set" )
2103+ logger .debug (f"request headers: { request .headers } " )
2104+ logger .debug (f"request form: { request .form } " )
2105+ logger .debug (f"request json: { request .json } " )
2106+ logger .debug (f"request data: { request .data } " )
2107+ logger .debug (f"request args: { request .args } " )
2108+ logger .debug (f"request content type: { request .content_type } " )
2109+ logger .debug (f"request base url: { request .base_url } " )
20602110 return _handle_tokens_request (request , oidc = True )
20612111
20622112
0 commit comments