@@ -268,8 +268,8 @@ void testCreateStsWithoutScope() {
268268 Assertions .assertEquals (jwtClaimsSet .getSubject (), consumerDid );
269269
270270 //validate inner token
271- Assertions .assertNotNull (jwtClaimsSet .getStringClaim (Constants .ACCESS_TOKEN ));
272- String innerToken = jwtClaimsSet .getStringClaim (Constants .ACCESS_TOKEN );
271+ Assertions .assertNotNull (jwtClaimsSet .getStringClaim (Constants .TOKEN ));
272+ String innerToken = jwtClaimsSet .getStringClaim (Constants .TOKEN );
273273
274274 Assertions .assertEquals (requestedInnerToken , innerToken );
275275 JWTClaimsSet innerTokenClaim = tokenService .verifyTokenAndGetClaims (innerToken );
@@ -282,6 +282,75 @@ void testCreateStsWithoutScope() {
282282 Assertions .assertEquals (Constants .MEMBERSHIP_CREDENTIAL , innerTokenClaim .getStringListClaim (Constants .CREDENTIAL_TYPES ).getFirst ());
283283 }
284284
285+ //CS-4559
286+ @ SneakyThrows
287+ @ Test
288+ @ DisplayName ("Create STS token without scope and validate, try to add token which signature verification gets failed" )
289+ void testCreateStsWithoutScopeWhenInnerTokenValidationFailed () {
290+ String consumerBpn = TestUtils .getRandomBpmNumber ();
291+ String providerBpn = "BPNL000000004OUP" ;
292+ String consumerDid = CommonUtils .getDidWeb (walletStubSettings .didHost (), consumerBpn );
293+ String providerDid = CommonUtils .getDidWeb (walletStubSettings .didHost (), providerBpn );
294+
295+ //Sample inner token which signature verification gets failed
296+ String requestedInnerToken = "eyJraWQiOiJ0cmFuc2Zlci1wcm94eS10b2tlbi1zaWduZXItcHVibGljLWtleSIsImFsZyI6IlJTMjU2In0.eyJpc3MiOiJCUE5MMDAwMDAwMDA0T1VQIiwiYXVkIjoiQlBOTDAwMDAwMDAwNE9VUCIsInN1YiI6IkJQTkwwMDAwMDAwMDRPVVAiLCJleHAiOjE3NjMzNzc1MTQsImlhdCI6MTc2MzM3NzIxNCwianRpIjoiYTY1NjNmOWMtZjk2ZC00N2YwLWE3YzAtNmEzNTFjMTcwMTcwIn0.IX_Yr1zsE0tQgFycxotWYG8gGg_7eW9cO9YS4QZJEyvW7ixmUehwukc1_o-1hc9_QKyCwGGctjtRKim4gJCwaYprRfwuNIWj98xMtsBIWPpe9aid8AWnuHp5eOXdgnx78KGAf2Btbu-2y4K8Y3Sug7jL5Kjnf88kahYwzR93np95VhVtkOezMkK5JSIv46D-JtBDQi3nr3FddcidrKogt3BwEMbG7rFlFhFyCedaRW4L8uUzqI3Q7W4oX6NirLRtaDN7WhQZKg4pgNLUEozGMOVSMtEx1ARdW56F8EeAD5K9pulG1Gl4QSq9O9BO-PEOfxzv9991aE8ylsAPxM3ctKuntjGvCRL28wAmZvy0P6tijBJxHbeaw6qDG-syXO45M9-qvx96tQCy2JniPzBjtYctlCJ86lpWHeghaf07IgWXwTcw-17RCzjnAGHj8aLjhiOV2GZCPAA2DfYn3uvU8syNez6nRzgJ8vwpQSpXyoOivfy5klRpB9csFBJesaBGQCJNDzPVcqydE2Kq44o2BzZRTC220hGru0-30fqQ-ORhzgXSybMxUzaN14AW-iaQHyJs4Paw0F_pdXpsfgUX2WIl6pDjqKi-f_DnIFK9G07t7uSa0WapKBcKb3tikQPiGdDdKais_JZJIZ27Hn9mFtdY_LrrOyVvMFNFfb05W3g" ;
297+
298+ String stsToken = createStsWithoutScope (consumerDid , providerDid , consumerBpn , requestedInnerToken );
299+ //validate STS
300+ JWTClaimsSet jwtClaimsSet = tokenService .verifyTokenAndGetClaims (stsToken );
301+ Assertions .assertEquals (jwtClaimsSet .getClaim (Constants .BPN ).toString (), consumerBpn );
302+ Assertions .assertEquals (jwtClaimsSet .getAudience ().getFirst (), providerDid );
303+ Assertions .assertEquals (jwtClaimsSet .getIssuer (), consumerDid );
304+ Assertions .assertEquals (jwtClaimsSet .getSubject (), consumerDid );
305+ }
306+
307+ @ SneakyThrows
308+ @ Test
309+ @ DisplayName ("Test creating STS token without audience claim should fail" )
310+ void testCreateStsWithoutAudience () {
311+ String readScope = "read" ;
312+ String consumerBpn = TestUtils .getRandomBpmNumber ();
313+ String providerBpn = TestUtils .getRandomBpmNumber ();
314+ String consumerDid = CommonUtils .getDidWeb (walletStubSettings .didHost (), consumerBpn );
315+ String providerDid = CommonUtils .getDidWeb (walletStubSettings .didHost (), providerBpn );
316+
317+ // Create token without audience
318+ JWTClaimsSet tokenWithoutAudience = new JWTClaimsSet .Builder ()
319+ .issuer (consumerDid )
320+ .subject (consumerDid )
321+ .issueTime (Date .from (Instant .now ()))
322+ .claim (Constants .CREDENTIAL_TYPES , List .of (Constants .MEMBERSHIP_CREDENTIAL ))
323+ .claim (Constants .SCOPE , readScope )
324+ .claim (CONSUMER_DID , consumerDid )
325+ .claim (PROVIDER_DID , providerDid )
326+ .claim (Constants .BPN , consumerBpn )
327+ .build ();
328+
329+ String tokenWithoutAudienceStr = CommonUtils .signedJWT (tokenWithoutAudience ,
330+ keyService .getKeyPair (consumerBpn ),
331+ didDocumentService .getOrCreateDidDocument (consumerBpn ).getVerificationMethod ().getFirst ().getId ())
332+ .serialize ();
333+
334+ // Attempt to create STS without audience should fail
335+ HttpHeaders headers = new HttpHeaders ();
336+ headers .add (HttpHeaders .AUTHORIZATION , TestUtils .createAOauthToken (consumerBpn , restTemplate , tokenService , tokenSettings ));
337+
338+ CreateCredentialWithoutScopeRequest request = CreateCredentialWithoutScopeRequest .builder ()
339+ .signToken (CreateCredentialWithoutScopeRequest .SignToken .builder ()
340+ .audience (consumerDid )
341+ .subject (providerDid )
342+ .issuer (providerDid )
343+ .token (tokenWithoutAudienceStr )
344+ .build ())
345+ .build ();
346+
347+ HttpEntity <CreateCredentialWithoutScopeRequest > entity = new HttpEntity <>(request , headers );
348+
349+ ResponseEntity <StsTokeResponse > response = restTemplate .exchange ("/api/sts" ,
350+ HttpMethod .POST , entity , StsTokeResponse .class );
351+
352+ Assertions .assertEquals (HttpStatus .BAD_REQUEST .value (), response .getStatusCode ().value ());
353+ }
285354
286355 @ SneakyThrows
287356 @ Test
0 commit comments