0

Qt ベースの OAuth ライブラリ ( https://github.com/pipacs/o2 ) をテストしています。FacebookをプロバイダーとしてOAuth 2.0 をテストしています。

プロトコルのImplicitGrantフローをテストしています。このフローでは、クライアントが *request_type* クエリ パラメータをtokenに設定すると、応答が URL フラグメントとして含まれ、アクセス トークンが含まれます。

Facebook は、ブラウザーでの認証に成功すると、私が提供した uri へのリダイレクトで応答し、アクセス トークンはURL フラグメントで送信されます。

例: ブラウザは次の場所にリダイレクトされます。

http://mylocalserver.com:8888/#access_token=ABCDE&expires_in=5162322

mylocalserver.com=localhost

このようなリダイレクトをすべて処理する Qt に実装された小さな HTTP サーバーがあります。

問題は、着信接続を取得するとき、つまりリダイレクトで開始したブラウザから、ソケットからデータを読み取るときに、フラグメント部分が見つからないことです! 例: 上記のローカル URL の場合、表示されるデータは次のとおりです。

GET / HTTP/1.1
ホスト: 127.0.0.1:8888
ユーザーエージェント: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:22.0) Gecko/20100101 Firefox/22.0
受け入れる: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip、デフレート
接続: キープアライブ

ご覧のとおり、フラグメントは完全に欠落しています。この問題を調べてみると、FF/Chrome がLocationヘッダーにフラグメントを配置している可能性があることがわかりました。しかし、それもわかりません。

フラグメントが失われている理由と、それを取り戻す/ブラウザに送信するように指示する方法についてのアイデアはありますか?

4

1 に答える 1

0

暗黙的なフローは、「サーバー」がない状況で使用することを意図しています。フラグメント (およびその中のアクセス トークン) は、クライアント側のコード (JavaScript、ネイティブ クライアントなど) によって抽出されます。これは、秘密を安全に守ることができない状況のためのものです。(サーバーの場合のように) 可能な場合は、通常、認証コード フローを使用します。サーバーへの GET で欠落しているフラグメントが予期されます。

于 2013-07-23T15:06:06.433 に答える