Skip to content

Commit 2560045

Browse files
authored
Merge pull request #159 from AzureAD/oldalton/adfsv3_fix
Use refresh token from input if none is returned in response (ADFSv3 …
2 parents 6329e71 + c579a5f commit 2560045

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-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: 23 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",
@@ -227,6 +247,7 @@ - (void)testInitWithJson_andRefreshToken_shouldNotTakeFieldsFromRefreshTokenAndU
227247
};
228248

229249
MSIDRefreshToken *refreshToken = [MSIDRefreshToken new];
250+
refreshToken.refreshToken = @"rt2";
230251

231252
MSIDClientInfo *clientInfo = [MSIDClientInfo new];
232253
[clientInfo setValue:@"clientinfo" forKey:@"rawClientInfo"];
@@ -242,6 +263,7 @@ - (void)testInitWithJson_andRefreshToken_shouldNotTakeFieldsFromRefreshTokenAndU
242263
XCTAssertNil(error);
243264

244265
XCTAssertEqualObjects(response.clientInfo.rawClientInfo, clientInfoString);
266+
XCTAssertEqualObjects(response.refreshToken, @"rt");
245267
}
246268

247269
@end

0 commit comments

Comments
 (0)