web-dev-qa-db-ja.com

MyAPIのOAuth 2.0認証の実装

Facebook Graph API(認証にoauth 2.0を使用)を使用)をしばらく使用していますが、開発者が同様の方法で接続できるようにする独自のAPIを作成する必要があります。 。さまざまなライブラリを調べましたが、少しスリムなものが欲しいので、自分でロールすることにしました。Facebookでユーザーを認証する必要があるコードを見ると、比較的単純に見えますが、修正してください。 m軌道から外れる。

まず、消費者がリダイレクトする必要がある安全なページを提供する必要があります。例 https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEY&redirect_url=CALLBACK_URL 。ユーザーはアプリケーションを確認してから、クエリ文字列にoauth_tokenを使用してコールバックURLで提供されたURLにリダイレクトします。ここでoauth_tokenに対してランダムな一意の文字列を生成し、この特定のコンシューマーのユーザーに対して保存できると思います(編集:以下の回答を参照してください。これはユーザーではなく各コンシューマーアプリケーションで一意である必要があります)。

それがステップ1です。次に、コンシューマーがWeb要求をトリガーする2番目の安全なページを提供する必要があります。例 https://api.mydomain.com/oauth/access_token?client_id=CONSUMER_KEY&client_secret=CONSUMER_SECRET&oauth_token=OAUTH_TOKEN_RETURNED_ABOVE 。これにより、コンシューマーは上記で返されたoauth_tokenをアクセストークンと交換できます。ここでも、ランダムな一意の文字列を生成し、この特定のコンシューマーのユーザーに対して保存します。

これで、私のAPIは、それを使用しているユーザーに固有の情報を取得しようとするメソッドのaccess_tokenを受け入れます。

正しく理解できたか知りたいのですが。 OAuth 2.0仕様は、その場合は非常に些細なことのようです。また、なぜoauth_tokenをaccess_tokenと交換する必要があるのですか?私は自分の考えを持っていますが、誰かが明確にするのを手伝ってくれれば幸いです。この。

私は先に進みたくなくて、それが完全に間違っているときにこれを意味する時間を無駄にするので、あなたのフィードバックに本当に感謝します。

ありがとう

30
nfplee

実際、プロトコルフロー図は、OAuth 2のような仕様を視覚化するのに非常に役立ちますが、部分的な作業しかありません。クライアント側のみを実装したのでOAuth 2ライブラリ、あなたが正しい方向に進んでいることを確認できます。しかし、ここに問題があります。

oauth_tokenは、(IDのように)アプリケーションを認証するクライアントアプリケーション(つまり、デスクトップFacebookリーダー)に属しています。これを送信して、アプリケーションとログインユーザーに固有のaccess_tokenを取得します。これにより、ユーザーに関連する制限されたリソースにアクセスできます。

これが基本的なデスクトップアプリ認証プロセスです(以下から取得: http://developers.gigya.com/020_Developer_Guide/85_REST/OAuth2

REST OAuth 2.0

実際には、タイムライン付きのフロー図(上から下へ、以下から取得: http://www.ibm.com/developerworks/web/library/wa-oauthsupport/?ca=drs-

Protocol flow

そして最後に、完全な手順は次のとおりです:( http://h2anetwork.org/ProjectDocs/DPI/DPI_Framework.html から取得)

OAuth protocol flow

48
Teoman Soygul