＜内容＞  
現在cordovaを使用したスマートフォンアプリを開発しています。

アプリ側でFBログインして取得したアクセストークンをサーバー側に送信し、  
サーバーサイドで、再度トークンが正しいかFB認証してログインしたいのですが、  
サーバーサイドで送られてきたトークンをチェックする際に下記のエラーが発生し、  
解決できません。

「You must provide an app access token or a user access token that is an owner
or developer of the app」

※FB管理者で登録している端末ではエラーにはなりません。一般ユーザーからのアクセスでエラーとなります。  
アクセストークン、ユーザーID等の必要なパラメーターは取得できています。

＜補足＞  
開発言語  
クライアントサイド  
・react.js

サーバーサイド  
・ruby on rails

使用している端末  
・iPhone（IOS9）

使用しているAPI  
クライアントサイド・・・アクセストークン取得  
・cordova-plugin-facebook4

サーバーサイド・・・アクセストークンのチェック  
・koala（Graph API）

使用しているサーバー  
・AWS

FBで使用しているPermissions（申請完了）  
・email  
・public_profile  
・user_friends  
・user_birthday  
・user_work_history

ーーーーーー  
エラー箇所のソース(rails)

> def verify_facebook_token!  
>  @graph = Koala::Facebook::API.new(params[:facebook_token])  
>  # <https://graph.facebook.com/debug_token>? に問い合わせ  
>  token_info = @graph.debug_token(params[:facebook_token]) ←ここでエラー
```

>     # 期限切れなどになっていないかを確認
>     raise ArgumentError unless token_info['data']['is_valid']
>  
>     # Facebook の user_id も確認する
>     raise ArgumentError unless
> token_info['data']['user_id'].eql?(params[:facebook_id])
>  
>     # app_id は最初にアプリを登録したときにわかっているので固定値
>     raise ArgumentError unless
> token_info['data']['app_id'].eql?(ENV['FACEBOOK_APP_ID'])   rescue
>     logger.info("is_valid: #{@graph.debug_token(params[:facebook_token])}")
>     render template: 'api/v1/errors/facebook_token', status: 400   end
>  
```

ーーーーーー  
エラーログ

Koala::Facebook::ClientError (type: OAuthException, code: 100, message: (#100)
You must provide an app access token or a user access token that is an owner
or developer of the app, x-fb-trace-id: GjfLrs52rVy [HTTP 400]):  
app/controllers/api/auth_controller.rb:34:in `rescue in
verify_facebook_token!'  
app/controllers/api/auth_controller.rb:28:in`verify_facebook_token!'
CC BY-SA 3.0
2016-06-01T18:48:50.730
25364
2016-11-06T15:51:21.903
15725
question
ios ruby-on-rails facebook-graph-api facebook-api
スマホアプリのFaceBooKログインでサーバーサイドのアクセストークンチェックでエラーになります。
> @graph = Koala::Facebook::API.new(params[:facebook_token])

この時に渡した params[:facebook_token] にユーザトークンが入ってしまっていないでしょうか？

少しややこしいのですが、まず /debug_token はユーザトークンではアクセスできない仕様となっています。

> <https://developers.facebook.com/docs/graph-api/reference/v2.6/debug_token/>  
>  Permissions: An app access token or an app developer's user access token
> for the app associated with the input_token is required to access this
> endpoint.

かわりに、アプリトークンか開発者のユーザトークンを利用する必要があります。
(FB管理者で登録されている端末でエラーにならないのは、このためではないかと思われます)

多くの場合、恐らくアプリトークンを利用して /debug_token を叩くことになると思います。アプリトークンは、Graph
API経由で生成することもできますが、アプリIDとapp
secretをそのままアプリトークンとして利用することもできるようです。その場合、2つをパイプで繋いだ以下のような文字列をトークンとして使います。

`app_id|app_secret`

参考: <https://developers.facebook.com/docs/facebook-login/access-
tokens#apptokens>

これで解決すればよいのですが...お試しください。
CC BY-SA 3.0
2016-06-09T12:01:14.707
26592
2016-06-09T12:01:14.707
784
25364
answer