| 
					
				 | 
			
			
				@@ -16,7 +16,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package org.springframework.security.oauth2.core.endpoint; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.oauth2.core.OAuth2AccessToken; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.util.Assert; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.util.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.time.Instant; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -83,11 +82,18 @@ public final class OAuth2AccessTokenResponse { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		public OAuth2AccessTokenResponse build() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Assert.isTrue(this.expiresIn >= 0, "expiresIn must be a positive number"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			Instant issuedAt = Instant.now(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// expires_in is RECOMMENDED, as per spec https://tools.ietf.org/html/rfc6749#section-5.1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// Therefore, expires_in may not be returned in the Access Token response which would result in the default value of 0. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// For these instances, default the expiresAt to +1 second from issuedAt time. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Instant expiresAt = this.expiresIn > 0 ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				issuedAt.plusSeconds(this.expiresIn) : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				issuedAt.plusSeconds(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			OAuth2AccessTokenResponse accessTokenResponse = new OAuth2AccessTokenResponse(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			accessTokenResponse.accessToken = new OAuth2AccessToken(this.tokenType, this.tokenValue, issuedAt, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				issuedAt.plusSeconds(this.expiresIn), this.scopes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			accessTokenResponse.accessToken = new OAuth2AccessToken( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.tokenType, this.tokenValue, issuedAt, expiresAt, this.scopes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			accessTokenResponse.additionalParameters = Collections.unmodifiableMap( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				CollectionUtils.isEmpty(this.additionalParameters) ? Collections.emptyMap() : this.additionalParameters); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return accessTokenResponse; 
			 |