web-dev-qa-db-fra.com

Les appels d'API du serveur nécessitent un argument appsecret_proof

Je ne peux pas faire de demande d'API avec le SDK Android Facebook, ni même obtenir l'utilisateur à partir du rappel de connexion - il renvoie toujours la valeur null.

En particulier, avec newMeRequest, le message d'erreur suivant s'affiche:

{ "error": {
 "message": "API calls from the server require an appsecret_proof argument", 
 "type": "GraphMethodException", 
 "code": 100   } }

En fait, cela semble assez évident, car le drapeau est défini sur true dans les options de l'application Facebook. Cependant, je sais qu’il est possible, pour les sdks mobiles, de faire des requêtes d’API sans le secret. Cependant, si j'essaie d'utiliser le jeton d'accès à partir de la variable currentSession dans le débogueur de l'API Graph de Facebook, la réponse sera la même que ci-dessus.

Je ne sais pas si cela est lié au nouveau SDK Android de Facebook, mais mon code est fondamentalement le même que dans les exemples. La connexion se passe bien et j'obtiens le jeton de session mais je ne peux faire aucune demande d'API ...

loginButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() {
    @Override
    public void onUserInfoFetched(GraphUser user) {
        graphUser = user;
    }
});


Request.newMeRequest(currentSession, new Request.GraphUserCallback() {
    @Override
    public void onCompleted(GraphUser user, Response response) {
    }
    }
}).executeAsync();
10
dwbrito

La seule façon pour moi de faire en sorte que cela fonctionne est de définir No le App Secret proof for API calls dans les paramètres avancés de l'application facebook.

Cependant, il s’agit d’un correctif, et non d’une solution, car je n’étais pas en mesure de répondre à la demande dans l’option définie sur Yes (comme cela est possible dans le sdk facebook de l’iOS iOS).

28
dwbrito

vous devez ajouter un paramètre "appsecret_proof" à votre demande contenant un hachage 'sha256' de accessToken et appSecret

https://developers.facebook.com/docs/graph-api/securing-requests

9
lnx

Vous devez désactiver Require App Secret dans les paramètres avancés de l'application facebook.

4
Donal

Bien que ce ne soit pas une réponse réelle à votre question (puisqu'il ne concerne pas le SDK Android), il semble que, à compter du mars 2018 , il existe encore quelques problèmes concernant le appsecret_proof et appels de la page Web (Javascript)/et éventuellement des clients mobiles (pas sûr de cela).

Rapport de bogue Facebook (février 2018) - le problème est réapparu

Rapport de bogue Facebook (octobre 2016)

Rapport de bogue Facebook (février 2015)

Autrement dit, pour une application avec Requiert App Secret enabled App Dashboard > Settings > Advanced > Security > Require App Secret, il semble que l'on ne puisse pas effectuer d'appels d'API à partir de Javascript sans passer le appsecret_proof - au moment de l'écriture (mars 2018).

Rapide "correctif" - désactive le drapeau. Selon les besoins, on peut également choisir d’avoir deux applications Facebook: une pour les appels de pages Web/mobiles (indicateur désactivé) et une pour les appels côté serveur (indicateur activé).

0
turdus-merula