2013-05-13 3 views
29

REST APIを呼び出すたびに、クライアントにユーザーの認証を行うユーザーのFacebookブックアクセストークンを渡す必要があります。このトークンを渡すためのベストプラクティスは何ですか?多分クライアントはどのようにしてサーバーにFacebookのアクセストークンを渡すべきですか?

HTTPの疑問符リクエストのヘッダで

GET /api/users/123/profile?access_token=pq8pgHWX95bLZCML 
  • か何とか後ろのパラメータとして多分

    1. 、同様にHTTP基本認証に

    2. 第三の選択肢? (私はトークンが同様GETの呼び出しに渡されるしたいので、JSONが収まらないので、私は私が思うに、JSONでそれを渡して除外している)
  • 答えて

    37

    あなたはすべての人気が提供するAPIエンドポイントを見ればOAuthプロバイダ(Google、Facebook、Pocket、Gitなど)では、すべてHTTPSエンドポイントがあることがわかります。

    あなたは、プロバイダへのアクセストークンを渡すことができる方法をされている -

    i)はクエリパラメータとして -

    https://yourwebsite.com/api/endpoint?access_token=YOUR_ACCESS_TOKEN

    II)要求でヘッダー -

    GET /api/users/123/profile HTTP/1.1 
    Host: yourwebsite.com 
    Date: Tue, 14 May 2013 12:00:00 GMT 
    Authorization: <YOUR_ACCESS_TOKEN> 
    

    これらの2つのアプローチは、ほとんどのAPIで一般的にサポートされています。あなたは同じことを考えることができます。

    iii)Pocket APIはGETをまったく使用しません。彼らは、データを検索する場合でも、すべての要求に対してPOSTを使用します。ドキュメントを見るには、linkをチェックしてください。 POSTを使用してデータを取得し、JSONパラメータを渡すことに注意してください。

    +0

    はい、私はとにかくHTTPSを使用しています。オプション(i)と(ii)も私にとっては大丈夫だと思うが、オプション(iii)には向かない。 (ii)では、* Basic *という単語を含めるべきですか、そこにトークンが必要であることを示してください。 –

    +2

    一般的な考え方は、トークンタイプを含めることです。ベアラトークンタイプを使用している場合は、「認可:ベアラー」を使用できます。これにより、アプリがクライアントのクレデンシャルを検索しないようになります。 – divyanshm

    +13

    クエリ文字列にアクセストークンを渡すことはお勧めできません。 HTTPSはまだクエリ文字列パラメータを含むURLをクリアテキストで要求します。ヘッダーと本文のみが暗号化されています。 –