One month down in 2025: How are your resolutions coming along? Check out how to get back on track here.
Forum Discussion
harunctgbd
7 years agoExplorer | Level 3
Android SDK auth access token malformed when Access Token use in Dropbox JS SDK
Recently I have included Dropbox in my ionic 1 android application through Dropbox JavaScript SDK for user data backup. I have used inAppBrowser for the authentication process. Everything is working perfectly and 100+ user already using this feature.
After 100+ user I have applied for production request but it's declined reason for OAuth app authorization flow inside a web view, instead of the system browser.
For handling this situation I have made an ionic plugin for native authentication flow of Dropbox android SDK. I have developed & configure my plugin using Dropbox android SDK (https://www.dropbox.com/developers-v1/core/sdks/android) for getting access token. This part also working fine and I am getting access token successfully.
But problem is, when I am sending my Access Token to JS SDK (https://github.com/dropbox/dropbox-sdk-js) it's returning 400 response The given OAuth 2 access token is malformed
var dbx = new Dropbox({ accessToken: ACCESS_TOKEN }); dbx.usersGetCurrentAccount() .then(function(response) { console.log(response); }).catch(function(error) { console.error(error); });
In this situation what can I do? I can not figure out the solution
- Greg-DB
Dropbox Staff
[Cross-linking for reference: https://stackoverflow.com/questions/53699757/dropbox-android-sdk-auth-access-token-malformed-when-use-in-dropbox-js-sdk ]
Regardless of where/how you got a Dropbox API OAuth 2 access token, you should be able to use it to make Dropbox API v2 calls from any platform. For instance, a Dropbox API OAuth 2 access token retrieved via a Java/Android SDK can also be copied over and used via JavaScript.
The error message is indicating that the supplied access token is "malformed", i.e., it isn't in the expected format, so it sounds like perhaps you're accidentally modifying it when copying it over.
First, I recommend inspecting the access token string itself to see how it may be malformed. For instance, has it been accidentally truncated, or perhaps it has unexpected leading or trailing whitespace, etc.
For comparison, here's a sample OAuth 2 access token:
Zu9U1XOZl8QAAAAAAAOIULgRVgYHAjrusYASKTBRbaRpQXKJWpH9C4BwyJ9fpd6M
Note that it is one long string, using letters and numbers, with no whitespace.
(I retrieved this access token and revoked it, just for reference here. Please don't post your own access token.)
By the way, note that the SDK you linked to is for the retired API v1, and so is no longer officially supported. The OAuth app authorization flow implementation in that may still work, but we recommend using the current official API v2 Java SDK on Android instead.
- harunctgbdExplorer | Level 3
Thanks for your response. I have updated Official API v2 SDK for android but still, I am getting access token which says malformed.
I have tested with android native Logcat for ensuring that before passing the token to my js client side it is modifying or not. I found both are the same token that I am getting after authentication.
package cordova.plugin.dbxconnect; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaPlugin; import org.json.JSONArray; import org.json.JSONException; import android.util.Log; import android.content.Context; import com.dropbox.core.android.Auth; import com.dropbox.core.v2.users.FullAccount; import com.dropbox.core.android.AuthActivity; public class DbxConnect extends CordovaPlugin { final static private String APP_KEY = "myAppKey"; private static CallbackContext myCallbackContext; @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if (action.equals("dbxAuth")) { this.dbxAuth(callbackContext); DbxConnect.myCallbackContext = callbackContext; return true; } return false; } private void dbxAuth(CallbackContext callbackContext) { Context context = this.cordova.getActivity().getApplicationContext(); Auth.startOAuth2Authentication(context, APP_KEY); } @Override public void onResume(boolean multitasking) { super.onResume(multitasking); try { String accessToken = Auth.getOAuth2Token(); Log.d("TOKEN",accessToken); DbxConnect.myCallbackContext.success(accessToken); } catch (IllegalStateException e) { DbxConnect.myCallbackContext.error("Drobox login fail"); } } }
- Greg-DB
Dropbox Staff
You mentioned you checked in LogCat on the Android side, but did you also add some logging to check on the JavaScript side? I recommend doing so if you haven't.
And then when you do inspect it in JavaScript, does it have the same format as the sample I shared in my previous post?
About Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.5,941 PostsLatest Activity: 5 days ago
If you need more help you can view your support options (expected response time for an email or ticket is 24 hours), or contact us on X or Facebook.
For more info on available support options for your Dropbox plan, see this article.
If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!