@@ -113,13 +113,16 @@ export const createAuthorizationRequestUrl = async ({
113113 const { redirectUri, requestObjectOpts = { requestObjectMode : CreateRequestObjectMode . NONE } } = authorizationRequest ;
114114 const client_id = clientId ?? authorizationRequest . clientId ;
115115
116- let { scope, authorizationDetails } = authorizationRequest ;
117- const parMode = endpointMetadata ?. credentialIssuerMetadata ?. require_pushed_authorization_requests
116+ // Authorization server metadata takes precedence
117+ const authorizationMetadata = endpointMetadata . authorizationServerMetadata ?? endpointMetadata . credentialIssuerMetadata
118+
119+ let { authorizationDetails } = authorizationRequest ;
120+ const parMode = authorizationMetadata ?. require_pushed_authorization_requests
118121 ? PARMode . REQUIRE
119122 : ( authorizationRequest . parMode ?? ( client_id ? PARMode . AUTO : PARMode . NEVER ) ) ;
120123 // Scope and authorization_details can be used in the same authorization request
121124 // https://datatracker.ietf.org/doc/html/draft-ietf-oauth-rar-23#name-relationship-to-scope-param
122- if ( ! scope && ! authorizationDetails ) {
125+ if ( ! authorizationRequest . scope && ! authorizationDetails ) {
123126 if ( ! credentialOffer ) {
124127 throw Error ( 'Please provide a scope or authorization_details if no credential offer is present' ) ;
125128 }
@@ -177,12 +180,8 @@ export const createAuthorizationRequestUrl = async ({
177180 if ( ! endpointMetadata ?. authorization_endpoint ) {
178181 throw Error ( 'Server metadata does not contain authorization endpoint' ) ;
179182 }
180- const parEndpoint = endpointMetadata . credentialIssuerMetadata ?. pushed_authorization_request_endpoint ;
183+ const parEndpoint = authorizationMetadata ?. pushed_authorization_request_endpoint ;
181184
182- // add 'openid' scope if not present
183- if ( ! scope ?. includes ( 'openid' ) ) {
184- scope = [ 'openid' , scope ] . filter ( ( s ) => ! ! s ) . join ( ' ' ) ;
185- }
186185
187186 let queryObj : Record < string , any > | PushedAuthorizationResponse = {
188187 response_type : ResponseType . AUTH_CODE ,
@@ -194,7 +193,7 @@ export const createAuthorizationRequestUrl = async ({
194193 ...( redirectUri && { redirect_uri : redirectUri } ) ,
195194 ...( client_id && { client_id } ) ,
196195 ...( credentialOffer ?. issuerState && { issuer_state : credentialOffer . issuerState } ) ,
197- scope,
196+ scope : authorizationRequest . scope ,
198197 } ;
199198
200199 if ( ! parEndpoint && parMode === PARMode . REQUIRE ) {
@@ -210,11 +209,11 @@ export const createAuthorizationRequestUrl = async ({
210209 { contentType : 'application/x-www-form-urlencoded' , accept : 'application/json' } ,
211210 ) ;
212211 if ( parResponse . errorBody || ! parResponse . successBody ) {
213- console . log ( JSON . stringify ( parResponse . errorBody ) ) ;
214- console . log ( 'Falling back to regular request URI, since PAR failed' ) ;
215212 if ( parMode === PARMode . REQUIRE ) {
216213 throw Error ( `PAR error: ${ parResponse . origResponse . statusText } ` ) ;
217214 }
215+
216+ debug ( 'Falling back to regular request URI, since PAR failed' , JSON . stringify ( parResponse . errorBody ) ) ;
218217 } else {
219218 debug ( `PAR response: ${ JSON . stringify ( parResponse . successBody , null , 2 ) } ` ) ;
220219 queryObj = { /*response_type: ResponseType.AUTH_CODE,*/ client_id, request_uri : parResponse . successBody . request_uri } ;
0 commit comments