| 
					
				 | 
			
			
				@@ -251,10 +251,12 @@ public class OAuth2AuthorizationCodeAuthenticationProviderTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void authenticateWhenRefreshTokenTimeToLiveConfiguredThenRefreshTokenExpirySet() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void authenticateWhenTokenTimeToLiveConfiguredThenTokenExpirySet() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Duration accessTokenTTL = Duration.ofHours(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Duration refreshTokenTTL = Duration.ofDays(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		RegisteredClient registeredClient = TestRegisteredClients.registeredClient() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.tokenSettings(tokenSettings -> tokenSettings.refreshTokenTimeToLive(refreshTokenTTL)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.tokenSettings(tokenSettings -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						tokenSettings.accessTokenTimeToLive(accessTokenTTL).refreshTokenTimeToLive(refreshTokenTTL)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				.build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		OAuth2Authorization authorization = TestOAuth2Authorizations.authorization(registeredClient).build(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -267,7 +269,9 @@ public class OAuth2AuthorizationCodeAuthenticationProviderTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		OAuth2AuthorizationCodeAuthenticationToken authentication = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				new OAuth2AuthorizationCodeAuthenticationToken(AUTHORIZATION_CODE, clientPrincipal, authorizationRequest.getRedirectUri(), null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		when(this.jwtEncoder.encode(any(), any())).thenReturn(createJwt()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Instant accessTokenIssuedAt = Instant.now(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Instant accessTokenExpiresAt = accessTokenIssuedAt.plus(accessTokenTTL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		when(this.jwtEncoder.encode(any(), any())).thenReturn(createJwt(accessTokenIssuedAt, accessTokenExpiresAt)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		OAuth2AccessTokenAuthenticationToken accessTokenAuthentication = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				(OAuth2AccessTokenAuthenticationToken) this.authenticationProvider.authenticate(authentication); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -276,6 +280,11 @@ public class OAuth2AuthorizationCodeAuthenticationProviderTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		verify(this.authorizationService).save(authorizationCaptor.capture()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		OAuth2Authorization updatedAuthorization = authorizationCaptor.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(accessTokenAuthentication.getAccessToken()).isEqualTo(updatedAuthorization.getTokens().getAccessToken()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Instant expectedAccessTokenExpiresAt = accessTokenAuthentication.getAccessToken().getIssuedAt().plus(accessTokenTTL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(accessTokenAuthentication.getAccessToken().getExpiresAt()).isBetween( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				expectedAccessTokenExpiresAt.minusSeconds(1), expectedAccessTokenExpiresAt.plusSeconds(1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		assertThat(accessTokenAuthentication.getRefreshToken()).isEqualTo(updatedAuthorization.getTokens().getRefreshToken()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Instant expectedRefreshTokenExpiresAt = accessTokenAuthentication.getRefreshToken().getIssuedAt().plus(refreshTokenTTL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		assertThat(accessTokenAuthentication.getRefreshToken().getExpiresAt()).isBetween( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -309,6 +318,10 @@ public class OAuth2AuthorizationCodeAuthenticationProviderTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private static Jwt createJwt() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Instant issuedAt = Instant.now(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Instant expiresAt = issuedAt.plus(1, ChronoUnit.HOURS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return createJwt(issuedAt, expiresAt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private static Jwt createJwt(Instant issuedAt, Instant expiresAt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return Jwt.withTokenValue("token") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				.header(JoseHeaderNames.ALG, SignatureAlgorithm.RS256.getName()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				.issuedAt(issuedAt) 
			 |