web-dev-qa-db-ja.com

Instagram API:スコープはOAuth2の暗黙的な認証フローで機能しますか?

モバイルアプリからInstagramAPIに対してリクエストを行っています。現在、ユーザーをInstagram auth urlに誘導し、応答タイプを「access_token」に指定しています。このresponse_typeを指定することは、暗黙的な認証と呼ばれます。

明示的な認証:response_type = code暗黙的な認証:response_type = access_token

明示的な認証を容易にするために、Webサービスを立ち上げる必要があることを回避しようとしています。明示的な認証フローでは、Instagram APIがリダイレクトURLを呼び出し、「コード」パラメーターを渡す必要があるため、これが必要になります。このコードは、サーバーサイドコードによって使用され、Instagramにアクセストークンの最終的なリクエストを行います。

モバイルアプリが暗黙的なフローを使用する方がはるかに効率的です。これは、それを処理するために追加のプライベートに維持される認証サービスを立ち上げる必要がないためです。

Instagramは次のスコープをサポートしています。

  • 基本-ユーザーに関連するすべてのデータを読み取るため(例:フォロー/フォローリスト、写真など)(デフォルトで付与)
  • コメント-ユーザーに代わってコメントを作成または削除します
  • 関係-ユーザーに代わってユーザーをフォローおよびフォロー解除する
  • 好き-ユーザーに代わってアイテムを好きで、好きではない

「基本」以外のタイプのスコープ指定を行うと、ユーザーが認証URLで資格情報を提供すると、次の応答が返されます。

{"code": 400, "error_type": "OAuthException", "error_message": "Invalid scope field(s): basic+likes"}

「基本」以外のスコープの任意の組み合わせは、同じ応答を返します。

だから、私の質問はこれらです:

  • 「基本」を超えるスコープを指定するには、明示的な認証が必要ですか??
  • 拡張スコープを機能させるにはresponse_type = codeを指定する必要がありますか?
  • これはInstagramの制限ですか、それともOAuth 2.0?の制限ですか?)

前もって感謝します。

11
NovaJoe

ここでの答えは、[〜#〜] yes [〜#〜]、スコープは暗黙の認証フローによって問題なく要求できるということです。私の問題は、使用していたOAuthコンポーネントに関連していました。コンポーネントは、Instagram認証エンドポイントによって拒否されたスコープパラメーターの値をサイレントにURLエンコードしていました。コンポーネントを更新しました( Xamarin.Auth )エンコードされていないスコープパラメータに対応し、プルリクエストを発行しました。

テストできる有効なURLを提供してくれた@krisakに感謝します。

7
NovaJoe

暗黙のoauthフローをclient_idとscope = basic + likesで試してみましたが、うまくいきました。以下のURLをclient_idとredirect_uriに置き換えて試してください。

https://instagram.com/oauth/authorize/?client_id=CLIENT_ID&redirect_uri=REDIRECT-URI&response_type=token&scope=basic+likes

Instagramが新しいクライアントアカウントで基本以外のスコープを許可していない可能性があります...

9
krisrak

そのため、複数のスコープ(基本、いいね、コメント)のアクセス許可を取得しようとしたときに、+のエンコードに関して同様の問題が発生しました。私が見つけた解決策は、個々のスコープの間にスペースを使用することでした。

Config/initializers/omniauth.rbファイル内:

Rails.application.config.middleware.use OmniAuth::Builder do
    provider :instagram, 'TOKEN', 'SECRETKEY' , {:scope => "basic likes comments"}
end
7
ckessenich

残念ながら、2015年4月14日以降、新しいクライアントはどのスコープにもアクセスできませんが、basicです。公式メッセージは、クライアント構成ページにあります。

2015年4月14日以降、新しいクライアントは、いいね、フォロー、コメントを投稿できるようにアクセスをリクエストする必要があります。詳細については、開発者ブログ http://developers.instagram.com をお読みください。

メッセージは次のブログエントリを参照しています: http://developers.instagram.com/post/116410697261/publishing-guidelines-and-signed-requests

Instagramでは、アプリケーションのスコープ(クライアントID)を有効にするために個人的なリクエストを送信する必要がありますが、アプリはブログエントリに記載されている特定の条件を満たす必要があります。

7
Vladimir L.

私はこの解決策を見つけてうまくいくのと同じ問題を抱えています

Instagram/developerの下のManageclientsに移動します。次に、アプリの下にある[編集]をクリックし、[暗黙的なOAuthを無効にする]をオフにします。これで、意図したとおりに機能します。

しかし、Instragramはこれを理由で変更したので、アプリで公開する前におそらくよく考えるべきです: http://instagram.com/developer/restrict-api-requests/

2
MilapTank

現時点では、2015年5月、はい。

Instagramのドキュメント で説明されているように認証について:

InstagramAPIはOAuth 2.0プロトコルを使用して、シンプルで効果的な認証と承認を行います。OAuth 2.0は、以前のスキームよりもはるかに使いやすく、開発者は使い始めることができますInstagram APIはほぼ即座に使用できます。覚えておくべきことの1つは、APIへのすべてのリクエストはSSL(http://ではなくhttps://)を介して行う必要があるということです。

最初にアプリを登録する必要があります here 次に、Instagramから提供されたCLIENT IDを使用して、次のリクエストを実行できます。

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code

Client_idとredirect_uriを配置する必要がある場所。

参考までに、redirect_uriフィールドに挿入することもできます

http://localhost
1
Luca Davanzo

「basic + comments + follower_list + likes + public_content + relationships」のようにスコープの間に「+」を追加する必要があります

0
aybars