@@ -742,6 +742,7 @@ _oauth2_jose_jwks_provider_init(oauth2_log_t *log,
742742 case OAUTH2_JOSE_JWKS_PROVIDER_AWS_ALB :
743743 provider -> resolve = oauth2_jose_jwks_aws_alb_resolve ;
744744 provider -> alb_arn = NULL ;
745+ provider -> alb_base_url = NULL ;
745746 break ;
746747 }
747748
@@ -773,6 +774,7 @@ _oauth2_jose_jwks_provider_clone(oauth2_log_t *log,
773774 break ;
774775 case OAUTH2_JOSE_JWKS_PROVIDER_AWS_ALB :
775776 dst -> alb_arn = oauth2_strdup (src -> alb_arn );
777+ dst -> alb_base_url = oauth2_strdup (src -> alb_base_url );
776778 break ;
777779 }
778780
@@ -802,6 +804,8 @@ _oauth2_jose_jwks_provider_free(oauth2_log_t *log,
802804 case OAUTH2_JOSE_JWKS_PROVIDER_AWS_ALB :
803805 if (provider -> alb_arn )
804806 oauth2_mem_free (provider -> alb_arn );
807+ if (provider -> alb_base_url )
808+ oauth2_mem_free (provider -> alb_base_url );
805809 break ;
806810 }
807811
@@ -1864,6 +1868,7 @@ _OAUTH_CFG_CTX_CALLBACK(oauth2_jose_verify_options_jwk_set_aws_alb)
18641868 oauth2_cfg_token_verify_t * verify = (oauth2_cfg_token_verify_t * )ctx ;
18651869 char * rv = NULL ;
18661870 oauth2_jose_jwt_verify_ctx_t * ptr = NULL ;
1871+ const char * alb_base_url = NULL ;
18671872
18681873 oauth2_debug (log , "enter" );
18691874
@@ -1880,6 +1885,11 @@ _OAUTH_CFG_CTX_CALLBACK(oauth2_jose_verify_options_jwk_set_aws_alb)
18801885
18811886 ptr -> jwks_provider -> alb_arn = oauth2_strdup (value );
18821887
1888+ alb_base_url = oauth2_nv_list_get (log , params , "alb_base_url" );
1889+ if (alb_base_url ) {
1890+ ptr -> jwks_provider -> alb_base_url = oauth2_strdup (alb_base_url );
1891+ }
1892+
18831893end :
18841894
18851895 oauth2_debug (log , "leave: %s" , rv );
@@ -2266,6 +2276,8 @@ oauth2_jose_jwks_aws_alb_resolve(oauth2_log_t *log,
22662276 bool * refresh , cjose_header_t * hdr )
22672277{
22682278 cjose_err err ;
2279+ char * url = NULL ;
2280+ const char * region = NULL ;
22692281
22702282 const char * signer = cjose_header_get (hdr , "signer" , & err );
22712283 const char * kid = cjose_header_get (hdr , "kid" , & err );
@@ -2278,7 +2290,6 @@ oauth2_jose_jwks_aws_alb_resolve(oauth2_log_t *log,
22782290 return NULL ;
22792291 }
22802292
2281- // TODO - maybe needed? timing safe compare?
22822293 if (strcmp (signer , provider -> alb_arn ) != 0 ) {
22832294 oauth2_error (
22842295 log ,
@@ -2287,17 +2298,19 @@ oauth2_jose_jwks_aws_alb_resolve(oauth2_log_t *log,
22872298 return NULL ;
22882299 }
22892300
2290- const char * region =
2291- _oauth2_jose_jwks_aws_alb_region (provider -> alb_arn );
2292- if (!region ) {
2293- oauth2_error (log , "failed to extract region from ARN: arn=%s" ,
2294- provider -> alb_arn );
2295- return NULL ;
2301+ if (provider -> alb_base_url == NULL ) {
2302+ region = _oauth2_jose_jwks_aws_alb_region (provider -> alb_arn );
2303+ if (!region ) {
2304+ oauth2_error (
2305+ log , "failed to extract region from ARN: arn=%s" ,
2306+ provider -> alb_arn );
2307+ return NULL ;
2308+ }
2309+ url = _oauth2_stradd4 (NULL , "https://public-keys.auth.elb." ,
2310+ region , ".amazonaws.com/" , kid );
2311+ } else {
2312+ url = oauth2_stradd (NULL , provider -> alb_base_url , kid , NULL );
22962313 }
2297-
2298- // TODO: make the base URL configurable
2299- char * url = _oauth2_stradd4 (NULL , "https://public-keys.auth.elb." ,
2300- region , ".amazonaws.com/" , kid );
23012314 oauth2_debug (log , "constructed ALB JWKs URL: %s" , url );
23022315
23032316 provider -> jwks_uri = oauth2_uri_ctx_init (log );
0 commit comments