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ヘッダーにフラグメントを配置している可能性があることがわかりました。しかし、それもわかりません。
フラグメントが失われている理由と、それを取り戻す/ブラウザに送信するように指示する方法についてのアイデアはありますか?