@@ -500,8 +500,7 @@ - (void)testRestorePreviousSignInNoRefresh_hasPreviousUser {
500500
501501 // Mock generating a GIDConfiguration when initializing GIDGoogleUser.
502502 OIDAuthorizationResponse *authResponse =
503- [OIDAuthorizationResponse testInstanceWithAdditionalParameters: nil
504- errorString: nil ];
503+ [OIDAuthorizationResponse testInstance ];
505504
506505 OCMStub ([_authState lastAuthorizationResponse ]).andReturn (authResponse);
507506 OCMStub ([_tokenResponse idToken ]).andReturn (kFakeIDToken );
@@ -676,7 +675,8 @@ - (void)testOAuthLogin_AdditionalScopes {
676675 oldAccessToken: NO
677676 modalCancel: NO
678677 useAdditionalScopes: YES
679- additionalScopes: nil ];
678+ additionalScopes: nil
679+ manualNonce: nil ];
680680
681681 expectedScopeString = [@[ @" email" , @" profile" ] componentsJoinedByString: @" " ];
682682 XCTAssertEqualObjects (_savedAuthorizationRequest.scope , expectedScopeString);
@@ -690,7 +690,8 @@ - (void)testOAuthLogin_AdditionalScopes {
690690 oldAccessToken: NO
691691 modalCancel: NO
692692 useAdditionalScopes: YES
693- additionalScopes: @[ kScope ]];
693+ additionalScopes: @[ kScope ]
694+ manualNonce: nil ];
694695
695696 expectedScopeString = [@[ kScope , @" email" , @" profile" ] componentsJoinedByString: @" " ];
696697 XCTAssertEqualObjects (_savedAuthorizationRequest.scope , expectedScopeString);
@@ -704,7 +705,8 @@ - (void)testOAuthLogin_AdditionalScopes {
704705 oldAccessToken: NO
705706 modalCancel: NO
706707 useAdditionalScopes: YES
707- additionalScopes: @[ kScope , kScope2 ]];
708+ additionalScopes: @[ kScope , kScope2 ]
709+ manualNonce: nil ];
708710
709711 expectedScopeString = [@[ kScope , kScope2 , @" email" , @" profile" ] componentsJoinedByString: @" " ];
710712 XCTAssertEqualObjects (_savedAuthorizationRequest.scope , expectedScopeString);
@@ -796,6 +798,37 @@ - (void)testOpenIDRealm {
796798 XCTAssertEqual (params[kOpenIDRealmKey ], kOpenIDRealm , @" OpenID Realm should match." );
797799}
798800
801+ - (void )testManualNonce {
802+ _signIn.configuration = [[GIDConfiguration alloc ] initWithClientID: kClientId
803+ serverClientID: nil
804+ hostedDomain: nil
805+ openIDRealm: kOpenIDRealm ];
806+
807+ OCMStub (
808+ [_keychainStore saveAuthSession: OCMOCK_ANY error: OCMArg.anyObjectRef]
809+ ).andDo (^(NSInvocation *invocation) {
810+ self->_keychainSaved = self->_saveAuthorizationReturnValue ;
811+ });
812+
813+ NSString * manualNonce = @" manual_nonce" ;
814+
815+ [self OAuthLoginWithAddScopesFlow: NO
816+ authError: nil
817+ tokenError: nil
818+ emmPasscodeInfoRequired: NO
819+ keychainError: NO
820+ restoredSignIn: NO
821+ oldAccessToken: NO
822+ modalCancel: NO
823+ useAdditionalScopes: NO
824+ additionalScopes: @[]
825+ manualNonce: manualNonce];
826+
827+ XCTAssertEqualObjects (_savedAuthorizationRequest.nonce ,
828+ manualNonce,
829+ @" Provided nonce should match nonce in authorization request." );
830+ }
831+
799832- (void )testOAuthLogin_LoginHint {
800833 _hint = kUserEmail ;
801834
@@ -1375,7 +1408,8 @@ - (void)OAuthLoginWithAddScopesFlow:(BOOL)addScopesFlow
13751408 oldAccessToken: oldAccessToken
13761409 modalCancel: modalCancel
13771410 useAdditionalScopes: NO
1378- additionalScopes: nil ];
1411+ additionalScopes: nil
1412+ manualNonce: nil ];
13791413}
13801414
13811415// The authorization flow with parameters to control which branches to take.
@@ -1388,18 +1422,20 @@ - (void)OAuthLoginWithAddScopesFlow:(BOOL)addScopesFlow
13881422 oldAccessToken: (BOOL )oldAccessToken
13891423 modalCancel: (BOOL )modalCancel
13901424 useAdditionalScopes: (BOOL )useAdditionalScopes
1391- additionalScopes: (NSArray *)additionalScopes {
1425+ additionalScopes: (NSArray *)additionalScopes
1426+ manualNonce: (NSString *)nonce {
13921427 if (restoredSignIn) {
13931428 // clearAndAuthenticateWithOptions
13941429 [[[_authorization expect ] andReturn: _authState] authState ];
1395- BOOL isAuthorized = restoredSignIn ? YES : NO ;
1430+ BOOL isAuthorized = restoredSignIn;
13961431 [[[_authState expect ] andReturnValue: [NSNumber numberWithBool: isAuthorized]] isAuthorized ];
13971432 }
13981433
13991434 NSDictionary <NSString *, NSString *> *additionalParameters = emmPasscodeInfoRequired ?
14001435 @{ @" emm_passcode_info_required" : @" 1" } : nil ;
14011436 OIDAuthorizationResponse *authResponse =
14021437 [OIDAuthorizationResponse testInstanceWithAdditionalParameters: additionalParameters
1438+ nonce: nonce
14031439 errorString: authError];
14041440
14051441 OIDTokenResponse *tokenResponse =
@@ -1475,6 +1511,8 @@ - (void)OAuthLoginWithAddScopesFlow:(BOOL)addScopesFlow
14751511 [_signIn signInWithPresentingWindow: _presentingWindow
14761512#endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST
14771513 hint: _hint
1514+ additionalScopes: nil
1515+ nonce: nonce
14781516 completion: completion];
14791517 }
14801518 }
0 commit comments