You might see that the Dropbox Community team have been busy working on some major updates to the Community itself! So, here is some info on what’s changed, what’s staying the same and what you can expect from the Dropbox Community overall.

Forum Discussion

gagsbh's avatar
gagsbh
Helpful | Level 5
8 months ago

Invalid_Grant whlie generating Access Token using saved Refresh token in Dropbox Sign .NET SDK

Hello Greg-DB ,

 

I am using the following Dropbox Sign .NET SDK code in my project to generate Dropbox Sign Access token using previously saved Refresh token.

 

 public async Task<TokenResponse> GetRefreshToken(TokenResponse tokenResponse)
        {
            TokenResponse tokenResponse2 = new TokenResponse();
            string errorlog = ConfigurationManager2.AppSettings("ErrorLog");
 
            var config = new Configuration();
            var oAuthApi = new OAuthApi(config);
           
            try
            {
                var data = new OAuthTokenRefreshRequest(refreshToken: tokenResponse.RefreshToken);
 
                var result = await oAuthApi.OauthTokenRefreshAsync(data);
                if (result != null)
                {
                    tokenResponse2.Expires = result.ExpiresIn;
                    tokenResponse2.AcquireTime = DateTime.Now;
                    tokenResponse2.AccessToken = result.AccessToken;
                    tokenResponse2.RefreshToken = result.RefreshToken; 
                    tokenResponse2.AcquireTime = DateTime.UtcNow;                  
                }               
 
                return tokenResponse2;
            }            
            catch (ApiException ex)
            {                
                    File.AppendAllText(errorlog, "\r\n\r\n" + "nGetRefreshToken: - Error");
                    File.AppendAllText(errorlog, "\r\nException when calling Dropbox Sign API: " + ex.Message);
                    File.AppendAllText(errorlog, "\r\nStatus Code: " + ex.ErrorCode);
                    File.AppendAllText(errorlog, "\r\nStack Trace: " +  ex.StackTrace);
             
    throw ex;
            }
            catch (Exception ex)
            {
                File.AppendAllText(errorlog, "\r\nGetRefreshToken - Error");
                File.AppendAllText(errorlog, "\r\n" + ex.Message + "\r\n" + ex.StackTrace);
            }
 
            return tokenResponse;
        }

 

I am getting the following Error Message and Stack Trace.
 
Error converting value "invalid_grant" to type 'Dropbox.Sign.Model.ErrorResponseError'. Path 'error', line 1, position 24.
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
at Dropbox.Sign.Client.Configuration.<>c.<.cctor>b__78_0(String methodName, IApiResponse response)
at Dropbox.Sign.Api.OAuthApi.OauthTokenRefreshWithHttpInfoAsync(OAuthTokenRefreshRequest oAuthTokenRefreshRequest, Int32 operationIndex, CancellationToken cancellationToken)
at Dropbox.Sign.Api.OAuthApi.OauthTokenRefreshAsync(OAuthTokenRefreshRequest oAuthTokenRefreshRequest, Int32 operationIndex, CancellationToken cancellationToken)
at SGCloudMigration.Business.DropboxSignUtility.GetRefreshToken(TokenResponse tokenResponse, String relationshipname) in D:\SG Cloud Migration\SGCloudMigration.Business.Core\DropboxSignUtility.cs:line 364
 
Please  help.
 
Thanks,
Gagan
  • [Cross-linking for reference: https://stackoverflow.com/questions/78296262/why-am-i-getting-invalid-grant-error-while-using-refresh-token-to-generate-acces ]

     

    Hi Gagan,

    Thank you for reaching out, it looks like you are receiving an invalid_grant error. This error typically occurs when using a stored refresh token and one of the following is true: 

     - Scopes for the OAuth API app have changed

     - The user revoked authorization to the OAuth API app
     - The OAuth API app is approved multiple times by the same user—this will cause the previous authorization to reset and a new refresh token to be generated.

    If any of these actions have occurred, please try completing the authorization process again for the user to generate a new access_token and refresh_token. Try using the new refresh_token to generate any new access_token after the initial access_token expires. Please see our OAuth Walkthrough documentation for more details.

    If the issue persists, please submit a support request, along with the code snippet you just provided, so we can further assist you in determining why that error is being thrown. Thanks!

  • [Cross-linking for reference: https://stackoverflow.com/questions/78296262/why-am-i-getting-invalid-grant-error-while-using-refresh-token-to-generate-acces ]

     

    Hi Gagan,

    Thank you for reaching out, it looks like you are receiving an invalid_grant error. This error typically occurs when using a stored refresh token and one of the following is true: 

     - Scopes for the OAuth API app have changed

     - The user revoked authorization to the OAuth API app
     - The OAuth API app is approved multiple times by the same user—this will cause the previous authorization to reset and a new refresh token to be generated.

    If any of these actions have occurred, please try completing the authorization process again for the user to generate a new access_token and refresh_token. Try using the new refresh_token to generate any new access_token after the initial access_token expires. Please see our OAuth Walkthrough documentation for more details.

    If the issue persists, please submit a support request, along with the code snippet you just provided, so we can further assist you in determining why that error is being thrown. Thanks!

    • gagsbh's avatar
      gagsbh
      Helpful | Level 5

      Thank you for the reply.

      For me, the issue was due to:

      - The OAuth API app is approved multiple times by the same user—this will cause the previous authorization to reset and a new refresh token to be generated.