facebook oauth complaining of the missing "login secret" - facebook

this might seem like a repeat of a question that has been answered elsewhere, but I have ran into those answers and they're not helping...
so I keep getting this response (from https://graph.facebook.com/oauth/access_token) on my final part of the oauth login process (I've acquired the "code" received after approving the app via the facebook authorization dialog):
{"error":{"message":"Error validating login secret. Since your application has a login secret in addition to a secret key, you must use the login secret and not the secret key with OAuth.","type":"OAuthException"}}
other answers to this question are mentioning disabling the 'Forces use of login secret for OAuth call and for auth.login' option in the app settings. however that option is not in my settings (settings->advanced). the same issue is mentioned here not able to get the access token
"login secret" as a concept is not being mentioned anywhere in the facebook api docs.
anyone have any ideas? I would really appreciate it...
thank you
addition:
Im not using any library but instead directly communicating with the FB api via python

I guess you are using old api, try downloading latest version form here.
Now fb do not have secret key concept.

Related

Is it possible to request a new secret key for Facebook API programmatically?

Is there a way to request a new secret key for Facebook via the facebook API? Essentially I would be using my own secret key to request a NEW secret key, for key rotation purposes.
I looked through the Facebook API documentation but could not find anything about this operation. I suspect they won't support it, but I would just like to confirm that there isn't an automatable way to rotate your API keys? Thanks!
I assume you mean "Access Token" when you say "Key", and you are talking about "User Access Tokens"? That´s not possible, you can only get a new User Token on user interaction. More information:
https://developers.facebook.com/docs/facebook-login/access-tokens
http://www.devils-heaven.com/facebook-access-tokens/
Not sure what you mean with key rotation, but the User Token is the only "Key" that can´t be valid forever, so i guess that´s what you are talking about...
Edit: Seems that you are indeed talking about the "App Secret", which can not be changed with the API but you can change it in your App settings. A rotation only makes sense if someone got your App Secret by accident or if some security issue happened. Better read this and only allow API calls server side: https://developers.facebook.com/docs/graph-api/securing-requests#appsecret_proof

Regarding shindig oauth2 call for facebook authentication

Iam new to gadgets.
Iam using the oauth2 example for facebook authentication which is bundled with Shindig 2.5.0
The file is under /gadgets/oauth2/oauth2_facebook.xml
I don't know whether this is an issue or not?
I created a gadget container like commoncontainer is created.
Inside the gadget url i have given the above facebook gadget url.
I have created a facebook app and i have configured all the details in oauth2.json file.
When the gadget is rendered, it is asking for facebook username and password. After that it is returning some data.
The main problem here is, after this whenever i access the same gadget over the container it is not asking for the facebook credentials. Simply it is logging with the earlier credentials(I donno how the conainer is storing). Even I access the same gadget in other browser also, it is not asking for creadentials.
I googled it but i didn't find anything regarding this.
Even after deleting all the cookies in the browser, it is not asking for the credentials unless I restart the app server.
Please help me on this.
Is there anyway restrict this kind of behaviour?
Shindig stores the access token on the server. In a production implementation the access token would be stored by individual user, but the sample implementation does not have this concept right now. OAuth access tokens are usually long lived, so the user should not have to go through the oauth dance for a while. Once the access token expires you would have to do the dance again.

why do I get "Invalid appsecret_proof provided in the API argument"

Since the latest change on Facebook, regarding the appsecret_proof: https://developers.facebook.com/docs/reference/api/securing-graph-api/, we are still unable to download performance reports even after enabling/disabling features from Advanced Settings in our app, or apply the code as described in their document.
We are constantly getting this error:
{"error":{"message":"Invalid appsecret_proof provided in the API argument","type":"GraphMethodException","code":100}}
and I've open a confidential bug but no one returns to me with an answer.
I really don't know what more could we try?
The error is (based on my experience) almost certainly correct; it means you're proving an invalid appsecret_proof with your API call
Assuming you're using the standard PHP SDK without modifications, the most likely reasons for this are:
You configured the wrong app ID in the SDK code
You configured the wrong app secret in the SDK code
You're trying to use an access token from the wrong / another app
Another potential cause of the "Invalid appsecret_proof ..." error, is a user access token that is not associated with an app. If you are generating a user access token using the graph explorer, make sure to select an app from the dropdown on the top right corner. Otherwise, you will be generating tokens that only work within the graph API explorer.
I filed a bug with the Python SDK before I caught my mistake. GUIs are the devil.
No bug in the latest version of the facebook PHP SDK.
You need to create appsecret_proof as per the docs:
$appsecret_proof= hash_hmac('sha256', $access_token, $app_secret);
then pass it as a parameter to your api call.
See the docs here: https://developers.facebook.com/docs/graph-api/securing-requests/
Once I did this all was good and I didn't have to hack base_facebook.php
There is a bug in the Facebook SDK. After 20 hours of trying everything to debug my own code (which had no issues!), I commented this out in base_facebook.php:
/* Commented out by SJ
if (isset($params['access_token'])) {
$params['appsecret_proof'] = $this->getAppSecretProof($params['access_token']);
}
*/
And all the problems went away!
This is error is because of in correct token. It may be because you are using different account for configuring web app and mobile app for Facebook configuration. Both accounts should be same.
The app ID must be the same for your mobile app and your web app.
This error is the result of setting incorrect access token. For e.g posting to page album using a user's(admin's) access token. I have solved this error almost all the times by setting the proper access token
If this error is unexpected behavior, you may have checked a setting in your app to require it. Uncheck it and you should stop getting that error. That setting is in settings -> advanced and is called "App Secret Proof for Server API calls". Set that to NO.
As of now, that setting is on this page (make sure to put your appId in the URL): https://developers.facebook.com/apps/YOUR-APP-ID/settings/advanced/
Note this is not a universal solution, only a solution for people who don't want that behavior.
For me it was three fixes that made it work
Activate the Secret app and Access to API in the advanced configuration of your app in Facebook for developers. Although in theory it is not needed for me it always prompted that the appsecret_proof was needed even when those two options were off.
When creating the appsecret_proof, the access_token used to create it should be the same access_token to send in the request, and its the user access_token, my error was that I was using the app access_token. Use the user access_token.
Send the parameter appsecret_proof as appsecret_proof, not as app_secret_proof. A minor detail but happened to me.
Extra:
For python you can create the appsecret_proof like this:
import hmac
import hashlib
facebook_app_secret = '<your_app_secret>'
facebook_access_token = '<your_user_access_token>'
appsecret_proof = hmac.new(facebook_app_secret.encode('utf-8'),
msg=facebook_access_token.encode('utf-8'),
digestmod=hashlib.sha256).hexdigest()
print(appsecret_proof)
Gotten from facebook graph api calls with appsecret_proof in python
make sure your setting correct fbappid + fbappsecret
this error happens when those are not set correct
like you have 2 apps one development and one production
and you mess up the codes, double check those two
Just for people having the same problem;
When you set Client OAuth Login to "yes" on facebook, you should give proper Valid OAuth redirect URIs . Otherwise facebook throws exactly the same error.
In my case I needed to set Default Access Token via method: setDefaultAccessToken()
I used token generated in GraphApi dev tool but I did not switch into proper application. It was solved by changing application into proper one and using regenerated token.
I know that this is an old question but I solved mine by changing the Application to the proper application that I should be generating an access token with. E.g. from Project1 to Project2.
Perhaps something wrong with your access token, you need Business Manager style.
You can get the token from the content of https://business.facebook.com/settings/system-users/{sys_user_id}?business_id={business_id} with regex r'"accessToken":"([\d|\w]+)","context"'
Works for me:
$appsecret_proof = hash_hmac('sha256', $facebook_page_token, $app_secret);
WHERE facebook_page_token is the page token stored in my database created when I associate the page to the app.
Problem comes from wrong platform access token.
You should check your dashboard which you preferred to API and check your access token where it comes from.

How to set up a Facebook Chat API connection when authorizing as a Desktop App

The problem I am facing is that after I authorize my app for current user using
http://developers.facebook.com/docs/authentication/ (client-side flow)
I can't setup a XMPP connection as I need to know session key to access it. When using server-based flow, the session properties are being sent as a part of access token. And I didn't find a way to get the session key for my oAuth based authentication client-side flow.
Please suggest how can I get it.
I'm doing all requests from javascript (Google Chrome extension).
Facebook is actually deprecating the session key. They have just recently (a couple days after you posted the question i believe) updated their authentication method to no longer require the session key. If for whatever reason you still need it you can get it by looking up the auth.promote_session method in the REST API, but that is deprecated and will be removed come October.
If you check https://developers.facebook.com/docs/chat/ you should find that the access token will get you what you need now.

Facebook REST Api with OAuth tokens

As described in the Facebook Auth guide, I'm able to make (most) old REST API calls with OAuth tokens
i.e.
http://api.facebook.com/restserver.php?
method=friends.get&
app_id=...&
v=1.0&
call_id=...&
sig=...
becomes
https://api.facebook.com/restserver.php?
method=friends.get&
token=...
This does NOT work with the method "admin.setAppProperties". I get an "Application does not have permission for this action" error. The OAuth token I have though, has granted every available permission including offline access to my app, however. Any clue whats going on? Facebook docs and forums are characteristically mum.
In case you haven't managed to fix it yet, I've found the problem with their documentation:
the parameter name for the access token is wrong: it is "access_token" and not "token"
https://api.facebook.com/restserver.php?
method=friends.get&
access_token=...