@@ -2311,6 +2311,50 @@ void tokenValidateWithEmailHash_Mismatch(Vertx vertx, VertxTestContext testConte
23112311 });
23122312 }
23132313
2314+ @ Test
2315+ void corsTokenValidateAllowsAuthorizationHeader (Vertx vertx , VertxTestContext testContext ) {
2316+ WebClient client = WebClient .create (vertx );
2317+ client .requestAbs (io .vertx .core .http .HttpMethod .OPTIONS , getUrlForEndpoint ("v2/token/validate" ))
2318+ .putHeader ("Origin" , "https://example.com" )
2319+ .putHeader ("Access-Control-Request-Method" , "POST" )
2320+ .putHeader ("Access-Control-Request-Headers" , "Content-Type, Authorization" )
2321+ .send (ar -> {
2322+ assertTrue (ar .succeeded ());
2323+ HttpResponse <Buffer > response = ar .result ();
2324+ assertEquals (204 , response .statusCode ());
2325+
2326+ String allowedHeaders = response .getHeader ("Access-Control-Allow-Headers" );
2327+ assertNotNull (allowedHeaders , "Access-Control-Allow-Headers header should be present" );
2328+ assertTrue (allowedHeaders .contains ("Content-Type" ), "Content-Type should be allowed" );
2329+ assertTrue (allowedHeaders .contains (ClientVersionHeader ), "Client version header should be allowed" );
2330+ assertTrue (allowedHeaders .contains ("Authorization" ), "Authorization header should be allowed for token/validate" );
2331+
2332+ testContext .completeNow ();
2333+ });
2334+ }
2335+
2336+ @ Test
2337+ void corsTokenGenerateDoesNotAllowAuthorizationHeader (Vertx vertx , VertxTestContext testContext ) {
2338+ WebClient client = WebClient .create (vertx );
2339+ client .requestAbs (io .vertx .core .http .HttpMethod .OPTIONS , getUrlForEndpoint ("v2/token/generate" ))
2340+ .putHeader ("Origin" , "https://example.com" )
2341+ .putHeader ("Access-Control-Request-Method" , "POST" )
2342+ .putHeader ("Access-Control-Request-Headers" , "Content-Type, Authorization" )
2343+ .send (ar -> {
2344+ assertTrue (ar .succeeded ());
2345+ HttpResponse <Buffer > response = ar .result ();
2346+ assertEquals (204 , response .statusCode ());
2347+
2348+ String allowedHeaders = response .getHeader ("Access-Control-Allow-Headers" );
2349+ assertNotNull (allowedHeaders , "Access-Control-Allow-Headers header should be present" );
2350+ assertTrue (allowedHeaders .contains ("Content-Type" ), "Content-Type should be allowed" );
2351+ assertTrue (allowedHeaders .contains (ClientVersionHeader ), "Client version header should be allowed" );
2352+ assertFalse (allowedHeaders .contains ("Authorization" ), "Authorization header should NOT be allowed for token/generate" );
2353+
2354+ testContext .completeNow ();
2355+ });
2356+ }
2357+
23142358 @ Test
23152359 void identityMapBatchBothEmailAndHashEmpty (Vertx vertx , VertxTestContext testContext ) {
23162360 final int clientSiteId = 201 ;
0 commit comments