@@ -742,6 +742,7 @@ _oauth2_jose_jwks_provider_init(oauth2_log_t *log,
742
742
case OAUTH2_JOSE_JWKS_PROVIDER_AWS_ALB :
743
743
provider -> resolve = oauth2_jose_jwks_aws_alb_resolve ;
744
744
provider -> alb_arn = NULL ;
745
+ provider -> alb_base_url = NULL ;
745
746
break ;
746
747
}
747
748
@@ -773,6 +774,7 @@ _oauth2_jose_jwks_provider_clone(oauth2_log_t *log,
773
774
break ;
774
775
case OAUTH2_JOSE_JWKS_PROVIDER_AWS_ALB :
775
776
dst -> alb_arn = oauth2_strdup (src -> alb_arn );
777
+ dst -> alb_base_url = oauth2_strdup (src -> alb_base_url );
776
778
break ;
777
779
}
778
780
@@ -802,6 +804,8 @@ _oauth2_jose_jwks_provider_free(oauth2_log_t *log,
802
804
case OAUTH2_JOSE_JWKS_PROVIDER_AWS_ALB :
803
805
if (provider -> alb_arn )
804
806
oauth2_mem_free (provider -> alb_arn );
807
+ if (provider -> alb_base_url )
808
+ oauth2_mem_free (provider -> alb_base_url );
805
809
break ;
806
810
}
807
811
@@ -1864,6 +1868,7 @@ _OAUTH_CFG_CTX_CALLBACK(oauth2_jose_verify_options_jwk_set_aws_alb)
1864
1868
oauth2_cfg_token_verify_t * verify = (oauth2_cfg_token_verify_t * )ctx ;
1865
1869
char * rv = NULL ;
1866
1870
oauth2_jose_jwt_verify_ctx_t * ptr = NULL ;
1871
+ const char * alb_base_url = NULL ;
1867
1872
1868
1873
oauth2_debug (log , "enter" );
1869
1874
@@ -1880,6 +1885,11 @@ _OAUTH_CFG_CTX_CALLBACK(oauth2_jose_verify_options_jwk_set_aws_alb)
1880
1885
1881
1886
ptr -> jwks_provider -> alb_arn = oauth2_strdup (value );
1882
1887
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
+
1883
1893
end :
1884
1894
1885
1895
oauth2_debug (log , "leave: %s" , rv );
@@ -2266,6 +2276,8 @@ oauth2_jose_jwks_aws_alb_resolve(oauth2_log_t *log,
2266
2276
bool * refresh , cjose_header_t * hdr )
2267
2277
{
2268
2278
cjose_err err ;
2279
+ char * url = NULL ;
2280
+ const char * region = NULL ;
2269
2281
2270
2282
const char * signer = cjose_header_get (hdr , "signer" , & err );
2271
2283
const char * kid = cjose_header_get (hdr , "kid" , & err );
@@ -2278,7 +2290,6 @@ oauth2_jose_jwks_aws_alb_resolve(oauth2_log_t *log,
2278
2290
return NULL ;
2279
2291
}
2280
2292
2281
- // TODO - maybe needed? timing safe compare?
2282
2293
if (strcmp (signer , provider -> alb_arn ) != 0 ) {
2283
2294
oauth2_error (
2284
2295
log ,
@@ -2287,17 +2298,19 @@ oauth2_jose_jwks_aws_alb_resolve(oauth2_log_t *log,
2287
2298
return NULL ;
2288
2299
}
2289
2300
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 );
2296
2313
}
2297
-
2298
- // TODO: make the base URL configurable
2299
- char * url = _oauth2_stradd4 (NULL , "https://public-keys.auth.elb." ,
2300
- region , ".amazonaws.com/" , kid );
2301
2314
oauth2_debug (log , "constructed ALB JWKs URL: %s" , url );
2302
2315
2303
2316
provider -> jwks_uri = oauth2_uri_ctx_init (log );
0 commit comments