Skip to content

Commit bd05948

Browse files
committed
Use refresh token from input if none is returned in response (ADFSv3 case)
1 parent 287601f commit bd05948

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

IdentityCore/src/oauth2/aad_base/MSIDAADTokenResponse.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ @implementation MSIDAADTokenResponse
4343
MSID_JSON_ACCESSOR(MSID_OAUTH2_RESOURCE, resource)
4444
MSID_JSON_RW(MSID_OAUTH2_CLIENT_INFO, rawClientInfo, setRawClientInfo)
4545
MSID_JSON_ACCESSOR(MSID_FAMILY_ID, familyId)
46+
MSID_JSON_RW(MSID_OAUTH2_REFRESH_TOKEN, refreshToken, setRefreshToken)
4647
MSID_JSON_ACCESSOR(MSID_TELEMETRY_KEY_SPE_INFO, speInfo)
4748

4849
- (instancetype)initWithJSONDictionary:(NSDictionary *)json
@@ -58,6 +59,11 @@ - (instancetype)initWithJSONDictionary:(NSDictionary *)json
5859
self.rawClientInfo = token.clientInfo.rawClientInfo;
5960
_clientInfo = token.clientInfo;
6061
}
62+
63+
if (token && [NSString msidIsStringNilOrBlank:self.refreshToken])
64+
{
65+
self.refreshToken = token.refreshToken;
66+
}
6167

6268
[self initDerivedProperties];
6369
}

IdentityCore/tests/MSIDAADTokenResponseTests.m

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ - (void)testExtendedExpiryDate_whenExtendedExpiresInNotAvailable_shouldReturnNil
173173

174174
#pragma mark - Refresh token
175175

176-
- (void)testInitWithJson_andRefreshToken_shouldTakeFieldsFromRefreshToken
176+
- (void)testInitWithJson_andRefreshToken_andNilClientInfoInResponse_shouldTakeClientInfoFromRefreshToken
177177
{
178178
NSDictionary *jsonInput = @{@"access_token": @"at",
179179
@"token_type": @"Bearer",
@@ -198,6 +198,26 @@ - (void)testInitWithJson_andRefreshToken_shouldTakeFieldsFromRefreshToken
198198
XCTAssertEqualObjects(response.clientInfo, clientInfo);
199199
}
200200

201+
- (void)testInitWithJson_andRefreshToken_andNilRefreshTokenInResponse_shouldTakeRefreshTokenFromInput
202+
{
203+
NSDictionary *jsonInput = @{@"access_token": @"at",
204+
@"token_type": @"Bearer",
205+
@"expires_in": @"3600"};
206+
207+
MSIDRefreshToken *refreshToken = [MSIDRefreshToken new];
208+
refreshToken.refreshToken = @"rt from refresh token";
209+
210+
NSError *error = nil;
211+
MSIDAADTokenResponse *response = [[MSIDAADTokenResponse alloc] initWithJSONDictionary:jsonInput
212+
refreshToken:refreshToken
213+
error:&error];
214+
215+
XCTAssertNotNil(response);
216+
XCTAssertNil(error);
217+
218+
XCTAssertEqualObjects(response.refreshToken, @"rt from refresh token");
219+
}
220+
201221
- (void)testInitWithJson_andNilRefreshToken_shouldNotTakeFieldsFromRefreshToken
202222
{
203223
NSDictionary *jsonInput = @{@"access_token": @"at",

0 commit comments

Comments
 (0)