/// <summary> /// Initiates the asynchronous refresh token authentication flow /// </summary> /// <param name="refreshTokenRequest">InitiateRefreshTokenAuthRequest object containing the necessary /// parameters to initiate the refresh token authentication flow</param> /// <returns>Returns the AuthFlowResponse object that can be used to respond to the next challenge, /// if one exists</returns> public void StartWithRefreshTokenAuthAsync(InitiateRefreshTokenAuthRequest refreshTokenRequest, AsyncCallback <AuthFlowResponse> callback = null) { InitiateAuthRequest initiateAuthRequest = CreateRefreshTokenAuthRequest(refreshTokenRequest.AuthFlowType); Provider.InitiateAuthAsync(initiateAuthRequest, r => { if (r.Exception != null) { callback?.Invoke(new AsyncResult <AuthFlowResponse>(null, r.Exception)); return; } InitiateAuthResponse initiateResponse = r.Response; UpdateSessionIfAuthenticationComplete(initiateResponse.ChallengeName, initiateResponse.AuthenticationResult); callback?.Invoke(new AsyncResult <AuthFlowResponse>(new AuthFlowResponse() { SessionID = initiateResponse.Session, ChallengeName = initiateResponse.ChallengeName, AuthenticationResult = initiateResponse.AuthenticationResult, ChallengeParameters = initiateResponse.ChallengeParameters, ClientMetadata = new Dictionary <string, string>(initiateResponse.ResponseMetadata.Metadata) }, null)); }); }
/// <summary> /// Initiates the asynchronous refresh token authentication flow /// </summary> /// <param name="refreshTokenRequest">InitiateRefreshTokenAuthRequest object containing the necessary /// parameters to initiate the refresh token authentication flow</param> /// <returns>Returns the AuthFlowResponse object that can be used to respond to the next challenge, /// if one exists</returns> public async Task <AuthFlowResponse> StartWithRefreshTokenAuthAsync(InitiateRefreshTokenAuthRequest refreshTokenRequest) { InitiateAuthRequest initiateAuthRequest = CreateRefreshTokenAuthRequest(refreshTokenRequest.AuthFlowType); InitiateAuthResponse initiateResponse = await Provider.InitiateAuthAsync(initiateAuthRequest).ConfigureAwait(false); UpdateSessionIfAuthenticationComplete(initiateResponse.ChallengeName, initiateResponse.AuthenticationResult); return(new AuthFlowResponse(initiateResponse.Session, initiateResponse.AuthenticationResult, initiateResponse.ChallengeName, initiateResponse.ChallengeParameters, new Dictionary <string, string>(initiateResponse.ResponseMetadata.Metadata))); }
/// <summary> /// Initiates the asynchronous refresh token authentication flow /// </summary> /// <param name="refreshTokenRequest">InitiateRefreshTokenAuthRequest object containing the necessary /// parameters to initiate the refresh token authentication flow</param> /// <returns>Returns the AuthFlowResponse object that can be used to respond to the next challenge, /// if one exists</returns> public virtual async Task <AuthFlowResponse> StartWithRefreshTokenAuthAsync(InitiateRefreshTokenAuthRequest refreshTokenRequest) { InitiateAuthRequest initiateAuthRequest = CreateRefreshTokenAuthRequest(refreshTokenRequest.AuthFlowType); InitiateAuthResponse initiateResponse = await Provider.InitiateAuthAsync(initiateAuthRequest).ConfigureAwait(false); // Service does not return the refresh token. Hence, set it to the old refresh token that was used. if (string.IsNullOrEmpty(initiateResponse.ChallengeName) && string.IsNullOrEmpty(initiateResponse.AuthenticationResult.RefreshToken)) { initiateResponse.AuthenticationResult.RefreshToken = initiateAuthRequest.AuthParameters[CognitoConstants.ChlgParamRefreshToken]; } UpdateSessionIfAuthenticationComplete(initiateResponse.ChallengeName, initiateResponse.AuthenticationResult); return(new AuthFlowResponse(initiateResponse.Session, initiateResponse.AuthenticationResult, initiateResponse.ChallengeName, initiateResponse.ChallengeParameters, new Dictionary <string, string>(initiateResponse.ResponseMetadata.Metadata))); }