Skip to content

Commit 177964e

Browse files
authored
Remove refresh_in feature (Azure#34316)
* Remove refresh_in feature * update changelog
1 parent b938a1b commit 177964e

File tree

4 files changed

+22
-134
lines changed

4 files changed

+22
-134
lines changed

sdk/identity/azure-identity/CHANGELOG.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22

33
## 1.9.0-beta.3 (Unreleased)
44

5-
### Features Added
6-
7-
### Breaking Changes
8-
95
### Bugs Fixed
6+
- Add `disableInstanceDiscovery` to `DefaultAzureCredentialBuilder`
107

118
### Other Changes
9+
- Removed feature from previous betas to compute refresh values for managed identity tokens.
1210

1311
## 1.9.0-beta.2 (2023-03-16)
1412

@@ -19,7 +17,6 @@
1917

2018
### Bugs Fixed
2119
- Fixed detection logic for az/azd.
22-
- Add `disableInstanceDiscovery` to `DefaultAzureCredentialBuilder`
2320

2421
## 1.8.1 (2023-03-06)
2522

sdk/identity/azure-identity/src/main/java/com/azure/identity/implementation/IdentityClientBase.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -344,10 +344,6 @@ ConfidentialClientApplication getManagedIdentityConfidentialClient() {
344344
result.setAccessToken(accessToken.getToken());
345345
result.setTenantId(trc.getTenantId());
346346
result.setExpiresInSeconds(accessToken.getExpiresAt().toEpochSecond());
347-
if (accessToken.getClass().isInstance(MSIToken.class)) {
348-
MSIToken msiToken = (MSIToken) accessToken;
349-
result.setRefreshInSeconds(msiToken.getRefreshAtEpochSeconds());
350-
}
351347
return result;
352348
}).toFuture();
353349
});

sdk/identity/azure-identity/src/main/java/com/azure/identity/implementation/MSIToken.java

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import com.fasterxml.jackson.annotation.JsonCreator;
1010
import com.fasterxml.jackson.annotation.JsonProperty;
1111

12-
import java.time.Duration;
1312
import java.time.Instant;
1413
import java.time.OffsetDateTime;
1514
import java.time.ZoneOffset;
@@ -45,28 +44,23 @@ public final class MSIToken extends AccessToken {
4544
@JsonProperty(value = "expires_in")
4645
private String expiresIn;
4746

48-
@JsonProperty(value = "refresh_in")
49-
private String refreshIn;
5047

5148
/**
5249
* Creates an access token instance.
5350
*
5451
* @param token the token string.
5552
* @param expiresOn the expiration time.
5653
* @param expiresIn the number of seconds until expiration.
57-
* @param refreshIn seconds until refresh.
5854
*/
5955
@JsonCreator
6056
public MSIToken(
6157
@JsonProperty(value = "access_token") String token,
6258
@JsonProperty(value = "expires_on") String expiresOn,
63-
@JsonProperty(value = "expires_in") String expiresIn,
64-
@JsonProperty(value = "refresh_in") String refreshIn) {
59+
@JsonProperty(value = "expires_in") String expiresIn) {
6560
super(token, EPOCH.plusSeconds(parseToEpochSeconds(expiresOn, expiresIn)));
6661
this.accessToken = token;
6762
this.expiresOn = expiresOn;
6863
this.expiresIn = expiresIn;
69-
this.refreshIn = refreshIn;
7064
}
7165

7266
@Override
@@ -108,26 +102,4 @@ private static Long parseToEpochSeconds(String expiresOn, String expiresIn) {
108102
}
109103
throw LOGGER.logExceptionAsError(new IllegalArgumentException("Unable to parse date time " + dateToParse));
110104
}
111-
112-
/**
113-
* Returns the epoch time at which refresh should occur.
114-
* If the service specified refresh_in, it is added to creation time.
115-
* If it is not passed in, it is half the value to expiry, unless that is
116-
* less than two hours, at which point it is the same as time to expiry.
117-
* @return The number of seconds until refresh.
118-
*/
119-
long getRefreshAtEpochSeconds() {
120-
if (this.refreshIn != null) {
121-
return OffsetDateTime.now(ZoneOffset.UTC).plusSeconds(Long.parseLong(refreshIn)).toEpochSecond();
122-
}
123-
124-
OffsetDateTime expiresAt = EPOCH.plusSeconds(parseToEpochSeconds(expiresOn, expiresIn));
125-
Duration duration = Duration.between(OffsetDateTime.now(ZoneOffset.UTC), expiresAt);
126-
if (duration.toHours() >= 2) {
127-
long halfDuration = duration.getSeconds() / 2;
128-
return expiresAt.minusSeconds(halfDuration).toEpochSecond();
129-
} else {
130-
return expiresAt.toEpochSecond();
131-
}
132-
}
133105
}

sdk/identity/azure-identity/src/test/java/com/azure/identity/implementation/MSITokenTests.java

Lines changed: 19 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -8,105 +8,28 @@
88
import com.azure.core.util.serializer.SerializerEncoding;
99
import org.junit.Assert;
1010
import org.junit.Test;
11-
import org.mockito.MockedStatic;
1211

1312
import java.io.IOException;
14-
import java.time.Clock;
15-
import java.time.Duration;
1613
import java.time.OffsetDateTime;
17-
import java.time.ZoneId;
1814
import java.time.ZoneOffset;
1915
import java.time.temporal.ChronoUnit;
2016

21-
import static org.mockito.ArgumentMatchers.any;
22-
import static org.mockito.Mockito.CALLS_REAL_METHODS;
23-
import static org.mockito.Mockito.mockStatic;
24-
2517
public class MSITokenTests {
2618
private OffsetDateTime expected = OffsetDateTime.of(2020, 1, 10, 15, 3, 28, 0, ZoneOffset.UTC);
2719

2820
private static final SerializerAdapter SERIALIZER = JacksonAdapter.createDefaultSerializerAdapter();
2921

3022
@Test
3123
public void canParseLong() {
32-
MSIToken token = new MSIToken("fake_token", "1578668608", null, null);
33-
MSIToken token2 = new MSIToken("fake_token", null, "3599", null);
34-
MSIToken token3 = new MSIToken("fake_token", "1578668608", "3599", null);
24+
MSIToken token = new MSIToken("fake_token", "1578668608", null);
25+
MSIToken token2 = new MSIToken("fake_token", null, "3599");
26+
MSIToken token3 = new MSIToken("fake_token", "1578668608", "3599");
3527

3628
Assert.assertEquals(expected.toEpochSecond(), token.getExpiresAt().toEpochSecond());
3729
Assert.assertTrue((token2.getExpiresAt().toEpochSecond() - OffsetDateTime.now().toEpochSecond()) > 3500);
3830
Assert.assertEquals(expected.toEpochSecond(), token3.getExpiresAt().toEpochSecond());
3931
}
4032

41-
@Test
42-
public void canParseRefreshes() {
43-
try (MockedStatic<OffsetDateTime> offsetDateTimeMockedStatic = mockStatic(OffsetDateTime.class, CALLS_REAL_METHODS)) {
44-
45-
offsetDateTimeMockedStatic.when(() -> OffsetDateTime.now((ZoneId) any())).thenReturn(expected);
46-
offsetDateTimeMockedStatic.when(() -> OffsetDateTime.now((Clock) any())).thenReturn(expected);
47-
offsetDateTimeMockedStatic.when(OffsetDateTime::now).thenReturn(expected);
48-
49-
OffsetDateTime now = OffsetDateTime.now();
50-
OffsetDateTime expiration = now.plusHours(12);
51-
OffsetDateTime expirationMinusOneHour = expiration.minusHours(1);
52-
Duration expirationMinusOneHourSeconds = Duration.between(expirationMinusOneHour, expected);
53-
OffsetDateTime expirationMinusElevenHours = expiration.minusHours(11);
54-
Duration expirationMinusElevenHoursSeconds = Duration.between(expirationMinusElevenHours, expected);
55-
56-
MSIToken expirationMinusOneHourToken = new MSIToken("fake_token",
57-
String.valueOf(expirationMinusOneHour.toEpochSecond()),
58-
String.valueOf(expirationMinusOneHourSeconds.getSeconds()), null);
59-
60-
MSIToken expirationMinus11HoursToken = new MSIToken("fake_token",
61-
String.valueOf(expirationMinusElevenHours.toEpochSecond()),
62-
String.valueOf(expirationMinusElevenHoursSeconds.getSeconds()), null);
63-
64-
MSIToken hasRefresh = new MSIToken("fake_token",
65-
String.valueOf(expirationMinusElevenHours.toEpochSecond()),
66-
String.valueOf(expirationMinusElevenHoursSeconds.getSeconds()),
67-
String.valueOf(240));
68-
69-
Assert.assertEquals(now.plusSeconds(240).toEpochSecond(), hasRefresh.getRefreshAtEpochSeconds());
70-
Assert.assertEquals(now.plusHours(1).toEpochSecond(), expirationMinus11HoursToken.getRefreshAtEpochSeconds());
71-
long expected = Duration.between(now, expirationMinusOneHour).getSeconds() / 2;
72-
Assert.assertEquals(now.plusSeconds(expected).toEpochSecond(), expirationMinusOneHourToken.getRefreshAtEpochSeconds());
73-
74-
}
75-
76-
}
77-
78-
@Test
79-
public void canDeserializeWithRefreshIn() {
80-
String json = "{\n"
81-
+ " \"access_token\": \"fake_token\",\n"
82-
+ " \"refresh_token\": \"\",\n"
83-
+ " \"expires_in\": \"3599\",\n"
84-
+ " \"expires_on\": \"1506484173\",\n"
85-
+ " \"refresh_in\": \"3600\",\n"
86-
+ " \"not_before\": \"1506480273\",\n"
87-
+ " \"resource\": \"https://managementazurecom/\",\n"
88-
+ " \"token_type\": \"Bearer\"\n"
89-
+ "}";
90-
91-
try (MockedStatic<OffsetDateTime> offsetDateTimeMockedStatic = mockStatic(OffsetDateTime.class, CALLS_REAL_METHODS)) {
92-
93-
offsetDateTimeMockedStatic.when(() -> OffsetDateTime.now((ZoneId) any())).thenReturn(expected);
94-
offsetDateTimeMockedStatic.when(() -> OffsetDateTime.now((Clock) any())).thenReturn(expected);
95-
offsetDateTimeMockedStatic.when(OffsetDateTime::now).thenReturn(expected);
96-
{
97-
MSIToken token;
98-
try {
99-
token = SERIALIZER.deserialize(json, MSIToken.class, SerializerEncoding.JSON);
100-
} catch (IOException e) {
101-
throw new RuntimeException(e);
102-
}
103-
104-
Assert.assertEquals(1506484173, token.getExpiresAt().toEpochSecond());
105-
Assert.assertEquals(OffsetDateTime.now(ZoneOffset.UTC).plusSeconds(3600).toEpochSecond(), token.getRefreshAtEpochSeconds());
106-
}
107-
}
108-
}
109-
11033
@Test
11134
public void canDeserialize() {
11235
String json = "{\n"
@@ -130,11 +53,11 @@ public void canDeserialize() {
13053

13154
@Test
13255
public void canParseDateTime24Hr() {
133-
MSIToken token = new MSIToken("fake_token", "01/10/2020 15:03:28 +00:00", null, null);
134-
MSIToken token2 = new MSIToken("fake_token", null, "01/10/2020 15:03:28 +00:00", null);
56+
MSIToken token = new MSIToken("fake_token", "01/10/2020 15:03:28 +00:00", null);
57+
MSIToken token2 = new MSIToken("fake_token", null, "01/10/2020 15:03:28 +00:00");
13558
MSIToken token3 = new MSIToken("fake_token", "01/10/2020 15:03:28 +00:00",
136-
"86500", null);
137-
MSIToken token4 = new MSIToken("fake_token", null, "43219", null);
59+
"86500");
60+
MSIToken token4 = new MSIToken("fake_token", null, "43219");
13861

13962
Assert.assertEquals(expected.toEpochSecond(), token.getExpiresAt().toEpochSecond());
14063
Assert.assertEquals(expected.toEpochSecond(), token2.getExpiresAt().toEpochSecond());
@@ -144,34 +67,34 @@ public void canParseDateTime24Hr() {
14467

14568
@Test
14669
public void canParseDateTime12Hr() {
147-
MSIToken token = new MSIToken("fake_token", "1/10/2020 3:03:28 PM +00:00", null, null);
148-
MSIToken token2 = new MSIToken("fake_token", null, "1/10/2020 3:03:28 PM +00:00", null);
70+
MSIToken token = new MSIToken("fake_token", "1/10/2020 3:03:28 PM +00:00", null);
71+
MSIToken token2 = new MSIToken("fake_token", null, "1/10/2020 3:03:28 PM +00:00");
14972
MSIToken token3 = new MSIToken("fake_token", "1/10/2020 3:03:28 PM +00:00",
150-
"86500", null);
151-
MSIToken token4 = new MSIToken("fake_token", null, "86500", null);
73+
"86500");
74+
MSIToken token4 = new MSIToken("fake_token", null, "86500");
15275

15376
Assert.assertEquals(expected.toEpochSecond(), token.getExpiresAt().toEpochSecond());
15477
Assert.assertEquals(expected.toEpochSecond(), token2.getExpiresAt().toEpochSecond());
15578
Assert.assertEquals(expected.toEpochSecond(), token3.getExpiresAt().toEpochSecond());
15679
Assert.assertTrue(ChronoUnit.HOURS.between(OffsetDateTime.now(), token4.getExpiresAt()) == 24L);
15780

158-
token = new MSIToken("fake_token", "12/20/2019 4:58:20 AM +00:00", null, null);
159-
token2 = new MSIToken("fake_token", null, "12/20/2019 4:58:20 AM +00:00", null);
81+
token = new MSIToken("fake_token", "12/20/2019 4:58:20 AM +00:00", null);
82+
token2 = new MSIToken("fake_token", null, "12/20/2019 4:58:20 AM +00:00");
16083
token3 = new MSIToken("fake_token", "12/20/2019 4:58:20 AM +00:00",
161-
"105500", null);
162-
token4 = new MSIToken("fake_token", null, "105500", null);
84+
"105500");
85+
token4 = new MSIToken("fake_token", null, "105500");
16386
expected = OffsetDateTime.of(2019, 12, 20, 4, 58, 20, 0, ZoneOffset.UTC);
16487

16588
Assert.assertEquals(expected.toEpochSecond(), token.getExpiresAt().toEpochSecond());
16689
Assert.assertEquals(expected.toEpochSecond(), token2.getExpiresAt().toEpochSecond());
16790
Assert.assertEquals(expected.toEpochSecond(), token3.getExpiresAt().toEpochSecond());
16891
Assert.assertTrue(ChronoUnit.HOURS.between(OffsetDateTime.now(), token4.getExpiresAt()) == 29L);
16992

170-
token = new MSIToken("fake_token", "1/1/2020 0:00:00 PM +00:00", null, null);
171-
token2 = new MSIToken("fake_token", null, "1/1/2020 0:00:00 PM +00:00", null);
93+
token = new MSIToken("fake_token", "1/1/2020 0:00:00 PM +00:00", null);
94+
token2 = new MSIToken("fake_token", null, "1/1/2020 0:00:00 PM +00:00");
17295
token3 = new MSIToken("fake_token", "1/1/2020 0:00:00 PM +00:00",
173-
"220800", null);
174-
token4 = new MSIToken("fake_token", null, "220800", null);
96+
"220800");
97+
token4 = new MSIToken("fake_token", null, "220800");
17598

17699
expected = OffsetDateTime.of(2020, 1, 1, 12, 0, 0, 0, ZoneOffset.UTC);
177100
Assert.assertEquals(expected.toEpochSecond(), token.getExpiresAt().toEpochSecond());

0 commit comments

Comments
 (0)