java経由でアクセス_tokenを取得するためにリダイレクトを検出する方法
-
29-10-2019 - |
質問
FacebookグラフAPIを使用し始めており、Javaを介していくつかの簡単なHTTPリクエストを使用してアクセストークンを取得します。
続く https://developers.facebook.com/docs/authentication/新しいアプリを作成しましたが、ドメインがないので、httpリクエストを行います
www.facebook.com/dialog/oauth?client_id=your_app_id&
redirect_uri = https://www.facebook.com/connect/login_success.html
サーバー側のフローの場合、URLにコードを使用してサクセスページにリダイレクトすると思います。次に、このコードを使用して別のHTTPリクエストを作成します
graph.facebook.com/oauth/access_token? client_id = your_app_id&redirect_uri = your_url&client_secret = your_app_secret&code = the_code_from_above
そして最後に私のアクセストークンを取得します。
両方を使用しました java.net.HttpURLConnection
と org.apache.http.HttpResponse
、しかし、どちらの場合も、最初の呼び出しを実行して、FacebookログインページのHTMLに応答します。
このHTMLを使用してWebページを作成してから、ログインボタンをクリックするだけで(ユーザー名とパスワードを挿入せずに)、コードでサクセスページを取得します。
HTMLでは、ボタンログインのフィールドの送信が空で、リダイレクトURLを取得できません... <meta>
auth_tokenを生成するタグ(それは何ですか?それは非常に異なるwrt an normal Access_token ...)。
だから私が尋ねるのは:
何らかの方法で隠されたリダイレクトを検出することが可能です
java.net.HttpURLConnection
またorg.apache.http.HttpRespons
e?はいの場合、メカニズムはどうですか?それはに関連していますか
auth_token
?いいえの場合、他のライブラリで可能ですか? (私もretsfbを使用しましたが、「手で」挿入されたアクセストークンがArgとして挿入されているようです。また、Facebook-java-apiも見ましたが、古いようです)。
また、Facebookにログインしている場合は、Java経由で最初のHTTPコールを実行して、FacebookログインページのHTMLを返信します。
HTMLを使用してWebページを作成してから、[ユーザー名とパスワードを挿入せずにログインボタンをクリックするだけで、URLのコードパラメーターを使用してSuccess.htmページを取得します。
ブラウザで元のURLを直接使用すると、中央に文章なしでsuccess.htmページを直接取得できます。
ですから、問題はCookieの管理にあると思います。Java(Eclipseで実行)では、ブラウザのCookieにアクセスできません。
サーブレットの使用をリダイレクトしようとしましたが、ドメインに関するエラーが発生します。Servleturlは、アプリに登録されているFacebookドメインや「サイトURL」ではありません(実際にはアプリのサイトURLを設定していません...そしてそれが問題のコアです)。
いずれにせよ、ここにありますhttp://developers.facebook.com/docs/authentication/セクションアプリタイプ>デスクトップアプリでは、次のように述べています。
...]ユーザーがアプリを許可した後[すべてを許可]、URIフラグメントのアクセストークンを使用してユーザーをRedirect_uriにリダイレクトします:[...
このリダイレクトを検出してから、選択したフレームワークによって提供されたメカニズムを使用して、URIのアクセストークンを読み取ります。 [...
ですから、Javaを介してこのリダイレクトを検出することはまだ可能だと思います。どのように?
解決
まだドメインを持っていない場合は、LocalHostをドメインとして使用することをお勧めします。そうすれば、ローカルWebサーバー /ローカルアプリでテストできます。
httpurlconnectionを使用すると、正常に機能します。これは私たちのやり方です。
Redirect to:
"https://graph.facebook.com/oauth/authorize?" +
"client_id=" + clientId + "&" +
"redirect_uri=" + URLEncoder.encode(returnUrl, "utf-8")
// After redirect to the return url do the following:
//Make a http request to
"https://graph.facebook.com/oauth/access_token?client_id=" +
"client_id=" + clientId + "&" +
"redirect_uri=" + URLEncoder.encode(returnUrl, "utf-8") + "&"+
"client_secret=" + clientSecret + "&"+
"code=" + request.getParameter("code");
これにより、Facebookを照会できるアクセストークンが返されます