Use oAuth token with Azure MobileServiceClient.login()

696 views Asked by At

I am using the native Facebook SDK (through an opensource tool called 'SimpleFacebook') to authenticate with Facebook. That part is working great. I find the Microsoft Azure implementation of Facebook authentication to be lacking.

Anyway, the next step is to use the token from this Facebook session and authenticate with MS/Azure. There are two methods like look like they should do the job

public void login(java.lang.String provider,
     java.lang.String oAuthToken,
     UserAuthenticationCallback callback)

Invokes Windows Azure Mobile Service authentication using a provider-specific oAuth token

Parameters:
provider - The provider used for the authentication process
oAuthToken - The oAuth token used for authentication
callback - Callback to invoke when the authentication process finishes

And another very similar method where the second param is a JSON object of type:

com.google.gson.JsonObject oAuthToken,

Is it just me or is the documentation lacking here? I tried just calling the Facebook session's .getAccessToken() and passing that to the functions and I get an error from Azure:

Caused by: com.microsoft.windowsazure.mobileservices.MobileServiceException: {"code":400,"error":"Error: invalid json"}
at com.microsoft.windowsazure.mobileservices.MobileServiceConnection$1.onNext(MobileServiceConnection.java:115)

How do we know what the correct JSON format is? Am Using the right token?

More information can be found at: at this Azure site

1

There are 1 answers

1
menting311 On

I think I have this figured out. Essentially all I had to do was create a JSON object (which is fairly new for me). I tried this earlier but I had imported the wrong JSON class (I had imported org.json.JsonObject or something rather than the com.google.gson.JsonObject).

once I did that I had to figure out what the correct json properties should be. Through a lot of Google searches I found out this is the correct format:

JsonObject jo = new JsonObject();
jo.addProperty("access_token", token);

Then use jo.toString() in the call like:

mClient.login(MobileServiceAuthenticationProvider.Facebook, jo.toString(), new UserAuthenticationCallback() {
.....
    }

Really not that difficult, but why wouldn't Azure team put this in their docs??? Maybe this is just "obvious" information for a seasoned dev, but it took me a whole evening to figure out.