diff --git a/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/endpoint/OAuth2AccessTokenResponse.java b/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/endpoint/OAuth2AccessTokenResponse.java index eeaba2d28c6..f1cca671d23 100644 --- a/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/endpoint/OAuth2AccessTokenResponse.java +++ b/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/endpoint/OAuth2AccessTokenResponse.java @@ -140,6 +140,7 @@ public Builder tokenType(OAuth2AccessToken.TokenType tokenType) { */ public Builder expiresIn(long expiresIn) { this.expiresIn = expiresIn; + this.expiresAt = null; return this; } diff --git a/oauth2/oauth2-core/src/test/java/org/springframework/security/oauth2/core/endpoint/OAuth2AccessTokenResponseTests.java b/oauth2/oauth2-core/src/test/java/org/springframework/security/oauth2/core/endpoint/OAuth2AccessTokenResponseTests.java index fa83124ac6e..c9f730f88b6 100644 --- a/oauth2/oauth2-core/src/test/java/org/springframework/security/oauth2/core/endpoint/OAuth2AccessTokenResponseTests.java +++ b/oauth2/oauth2-core/src/test/java/org/springframework/security/oauth2/core/endpoint/OAuth2AccessTokenResponseTests.java @@ -153,4 +153,22 @@ public void buildWhenResponseAndRefreshNullThenRefreshNull() { assertThat(withResponse.getRefreshToken()).isNull(); } + + @Test + public void buildWhenResponseThenChangeExpiresInThenExpiresAtMatchIssueAtPlusExpiresIn() { + long originalExpiresIn = 10; + OAuth2AccessTokenResponse tokenResponse = OAuth2AccessTokenResponse + .withToken(TOKEN_VALUE) + .tokenType(OAuth2AccessToken.TokenType.BEARER) + .expiresIn(originalExpiresIn) + .build(); + + long alteredExpiresIn = 30; + OAuth2AccessTokenResponse withResponse = OAuth2AccessTokenResponse.withResponse(tokenResponse) + .expiresIn(alteredExpiresIn) + .build(); + + assertThat(withResponse.getAccessToken().getExpiresAt()).isEqualTo( + withResponse.getAccessToken().getIssuedAt().plusSeconds(alteredExpiresIn)); + } }