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

15

52

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?

Fourhanded answered 8/9, 2013 at 11:58 Comment(0)
N
58

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
Nievesniflheim answered 9/9, 2013 at 2:41 Comment(1)
hi Igy, thanks for your respond, we will check this as soon as we can, but also - this is how we generate the appsecret, can you see if it's correct? codestring appSecret = Instance.Configuration.Options[FacebookConfigurationOptions.AppSecret]; var secretByte = Encoding.UTF8.GetBytes(appSecret); var hmacsha256 = new HMACSHA256(secretByte); var tokenBytes = Encoding.UTF8.GetBytes(_accessToken); hmacsha256.ComputeHash(tokenBytes); return ByteToString(hmacsha256.Hash); codeFourhanded
A
19

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.

Adrenocorticotropic answered 28/3, 2016 at 22:32 Comment(1)
Thats it! In my case that helpd!Multiplechoice
P
12

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

Parfait answered 29/1, 2014 at 10:46 Comment(5)
The hashing is already done in the base_facebook.php on line 919 why do it again ?Eleemosynary
You don't need to do anything about it when using official SDK. As long as your app secret is correctTruett
This is a good answer, but you can go into the advanced settings for your app and disable 'require app secret,' of course you lose that added security.Handmaid
Facebook docs : $appsecret_proof= hash_hmac('sha256', $app_access_token, $app_secret); When it really is $appsecret_proof= hash_hmac('sha256', $access_token, $app_secret); Check it out, It works with ACCESS_TOKEN, no APP_ACCESS_TOKENComa
How do I get this $app_access_token? I tried $app_id|$app_secret, also tried the acces Token that's generated from tools and support for publish_actions. Please help.Dermatophyte
S
9

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!

Stomacher answered 25/9, 2013 at 21:14 Comment(3)
You may be using a different app id for the parts of your code with which you generate the token and when you use it.Walloping
Please note that if you are using a Facebook Page Access Token you should generate a new session from it passing page access token as an argument. This should be return of your function: return new FacebookSession( $access_token );Shum
I strongly recommend you not to disable appsecret_proof either by comment the code or FacebookSession::enableAppSecretProof(false); . That is simply not the right thing to do. @Mike's suggestion is probably right for most of you. You might just be using wrong facebook id or secret.Truett
M
3

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.

Microfilm answered 6/7, 2017 at 9:1 Comment(0)
E
1

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

Estragon answered 23/11, 2013 at 8:36 Comment(0)
P
1

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.

Prelate answered 23/5, 2014 at 13:31 Comment(1)
I don't have such setting in Advanced. The closest match is "Require App Secret".Cleanser
C
1

For me it was three fixes that made it work

  1. 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.

Configuration Avanced options of your app

  1. 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.

  2. 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

Calaboose answered 30/12, 2020 at 23:16 Comment(1)
enabling API call worked it for me. ThanksWainscot
N
0

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

Northey answered 24/6, 2015 at 12:26 Comment(0)
F
0

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.

Ferrous answered 28/10, 2015 at 9:57 Comment(0)
S
0

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.

Shirring answered 15/3, 2017 at 11:0 Comment(0)
S
0

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.

Sankey answered 19/11, 2018 at 7:25 Comment(0)
A
0

enter image description here 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"'

Andres answered 7/12, 2018 at 1:0 Comment(0)
T
0

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.

Trish answered 31/7, 2019 at 1:14 Comment(0)
T
0

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.

Tressatressia answered 10/5, 2021 at 12:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.